赞
踩
V I K O _ C A K E
void jump()
{
if (Input.GetKeyDown(KeyCode.Space))
{
rb.AddForce(Vector3.up * force,ForceMode.VelocityChange);
}
}
if (Input.GetButton("Jump"))
{
rb.AddForce(Vector3.up * force);
}
private void Update() { //跳跃监听 if (Input.GetButton("Jump") && canJump ) { ani.SetTrigger("isjump"); rb.AddForce(transform.up * jumpForce); canJump = false; } } private void OnCollisionEnter(Collision collision) { if (collision.gameObject.CompareTag("Ground")) { canJump = true; } }
当您简单的阅读了上述代码就会发现Update中的Addforce方法只会执行一帧,看起来就是Addforce没有效果了,这显然是不符合咱们预期的,怎么修改呢,大家伙儿可以如下修改:
private void Update() { //跳跃监听 if (Input.GetButton("Jump") && canJump ) { ani.SetTrigger("isjump"); rb.AddForce(transform.up * jumpForce); //canJump = false; 这句话不能在这里用 } if (Input.GetButtonUp("Jump")) { canJump = false; } } private void OnCollisionEnter(Collision collision) { if (collision.gameObject.CompareTag("Ground")) { canJump = true; } }
而为什么对AddForce使用参数后GetxxxDown也能起效果呢?首先按照逻辑,使用GetxxxDown时仅会执行很短的时间,所以参数的效果应该能在一瞬间起作用而不是随着执行逐步变化的。
遗憾的是官方文档并未解释该ForceMode的一些特性和不同。上图按翻译分别是:加速度,冲量,速度改变。经过测试冲量和速度改变均可以瞬间生效。
需要注意的是这里的活动状态并不是指物体需要运动,而是物体本身的Setactive属性。
如果对您起到了一些些帮助,可以点个赞吗宝~(●ˇ∀ˇ●)
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。