【发布时间】:2016-10-26 20:03:25
【问题描述】:
首先感谢大家阅读我的问题,
我正在尝试创建一个像地铁表面这样的永久运行游戏,我在 payerControl 脚本 py 中启动了 update() 函数,强制刚体以 10 的速度向前移动,如代码中所示,然后我添加了跳跃当你按下键盘上的向上箭头时输入,但这里的问题是角色有时会跳跃并且大部分时间不会跳跃,因为跳跃布尔值在不到一秒的时间内变为 true ,然后返回 false ,他们也是有什么方法可以让跳转过程停留2秒?
字符控制代码:
using UnityEngine;
using System.Collections;
public class player : MonoBehaviour {
public Animator anim;
public Rigidbody rbody;
public float verticalJumpPower;
public float horizantalJumpPower;
public float playerVelocity;
// Use this for initialization
void Start ()
{
anim = GetComponent<Animator>();
rbody = GetComponent<Rigidbody>();
verticalJumpPower = 50f;
horizantalJumpPower = 30f;
playerVelocity = 10f;
}
// Update is called once per frame
void Update ()
{
rbody.velocity = new Vector3(rbody.velocity.x,rbody.velocity.y,playerVelocity*Time.deltaTime);
rbody.transform.rotation = Quaternion.identity;
if(Input.GetKeyDown (KeyCode.UpArrow))
{
anim.SetBool("jump",true);
rbody.AddForce(new Vector3(0,verticalJumpPower,horizantalJumpPower));
}
else
{
anim.SetBool("jump", false);
}
if(Input.GetKey(KeyCode.LeftArrow))
{
Vector3 currentPosition = rbody.transform.position;
Vector3 leftPosition = new Vector3(rbody.transform.position.x+Constants.PLAYER_LEFT_DISTANCE, rbody.transform.position.y,rbody.transform.position.z);
rbody.transform.position = Vector3.Lerp(currentPosition,leftPosition,Time.deltaTime);
}
if(Input.GetKey(KeyCode.RightArrow))
{
Vector3 currentPosition = rbody.transform.position;
Vector3 rightPosition = new Vector3(rbody.transform.position.x+Constants.PLAYER_RIGHT_DISTANCE, rbody.transform.position.y,rbody.transform.position.z);
rbody.transform.position = Vector3.Lerp(currentPosition,rightPosition,Time.deltaTime);
}
if(Input.GetKey(KeyCode.DownArrow))
{
anim.SetBool("isSlide",true);
rbody.velocity = new Vector3(0f, 0f,5f);
anim.applyRootMotion = false;
}
else
{
anim.SetBool("isSlide", false);
anim.applyRootMotion = true;
}
}
}
【问题讨论】:
-
您可能需要的是检测角色何时接地的逻辑 - 如果是,则仅设置
anim.SetBool("jump", false)。关于如何执行此检查有很多想法 - 搜索,尝试实现一个,如果您遇到问题用您的新代码更新这个问题(或者如果它有很大不同,请提出一个新问题)。目前,这个问题太宽泛了,因为它基本上要求我们对游戏对象的设置方式做出假设并从头开始编写逻辑。 -
另外,你的跳跃动画到底是什么?只要角色在空中就应该播放,还是仅在角色执行初始跳跃时播放?这也会影响所需的解决方案。
标签: c# unity3d game-physics