2014-08-30 755 views
0

我正在制作一个3D平台游戏,并希望我的游戏对象与CharacterController跳转。我遇到了一个奇怪的问题,尽管我的调试文本说我的对象在y方向上受到向量的影响,但我在屏幕上看不到这些结果。似乎有很多资源可以用来完成这项工作 - 但这些方法都不适合我。我以为我会在这里问。Unity3D CharacterController跳跃问题

该角色是带有Transform(字符),角色控制器,RigidBody和附加脚本的游戏对象的集合。

刚体已检查“isKinematic”。 RigidBody中的所有其余部分都是默认设置。

以下是我的解决方案,以使我的人物跳跃,旋转的突出部分和移动在我的更新循环:

第一这顶到了:

private Vector3 forward; 
private Vector3 upvec = Vector3.zero; 

那么这里就是我的更新:

void Update(){ 
    CharacterController controller = GetComponent<CharacterController>(); 
    forward = Vector3.zero; //forward is a private Vector3 defined above 
    if (Input.GetKey ("w")) { forward = transform.TransformDirection (Vector3.forward); } 
    if (Input.GetKey("s")) { forward = transform.TransformDirection (Vector3.forward); } 
    if (Input.GetKey("space")) {upvec.y = jumpSpeed; //set to non-zero, I swear} 

    transform.Rotate (0, Input.GetAxis ("Horizontal") * rotateSpeed, 0);//rotate 
    float curSpeed = speed * Input.GetAxis ("Vertical");//allows backwards 
    text_3.text = (forward * curSpeed).ToString(); //my own debugging 
    controller.Move (forward * curSpeed); //moves backwards/forwards 
    text_1.text = upvec.ToString(); 
    controller.Move (upvec * Time.deltaTime); //SHOULD move upwards but does not 
} 

角色确实转身向前/向后移动就好了。它不会跳。

我试图隔离重要的代码来说明问题。让我知道是否有什么我可以做的,以澄清更多。

感谢

回答

1

你向上运动帧率依赖

controller.Move (upvec * Time.deltaTime) 

但你的向前运动是不是:

float curSpeed = speed * Input.GetAxis ("Vertical");//allows backwards 
controller.Move (forward * curSpeed); //moves backwards/forwards 

如果你有一个高的帧率,比如60 FPS

你的向前运动将是你向上运动的60倍,resu几乎没有可见的向上运动。