2014-08-30 754 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幾乎沒有可見的向上運動。