2015-10-25 49 views
0

我有一個腳本附加到一個網格上,帶有一個運動學剛體,帶有凸網格對撞機,我想要移動。下面是我在更新功能撥打:爲剛體分配速度並不會做任何事

if (Input.GetKey(forwards)) { 

     Debug.Log("forwards!!"); 

     //get current velocity in local space 
     Vector3 localVel = transform.InverseTransformDirection(body.velocity); 

     //alter so that forward component = speed 
     localVel = new Vector3(localVel.x, localVel.y, linearSpeed); 

     //convert back into world space and set to body 
     Vector3 worldVel = transform.TransformDirection(localVel); 
     body.velocity = worldVel; 
    } 

其他信息:

  • bodyRigidbody變量,我在Start()分配使用GetComponent<Rigidbody>();

  • linearSpeedfloat值爲1

我得到了Debug.Log輸出,但我的網格不動。有什麼明顯的我在這裏失蹤?這是我的第一個3D腳本,而不是一個2D遊戲。

+0

你能否更詳細地解釋一下你在什麼地方四處走動,你是否想在改變方向時使用慣性。 –

+0

@Neven,我不想使用慣性。假設我的角色目前在x方向上有一個速度,但它目前面向'z'方向,而我按'前進',我希望角色在z和x方向都有速度。這是我這段代碼 –

+0

這就是說,這個問題的目的是爲了確定爲什麼人物的速度並沒有改變背後的原因。不是指出邏輯錯誤是不受歡迎的。 –

回答

1
public float speed = 20; 
Rigidbody r; 

void Start(){ 
    r = gameObject.GetComponent<Rigidbody>(); //Put's reference to local rigidbody into variable "r" 
} 

void FixedUpdate() { 
    Vector3 direction = Vector3.zero; //set's current direction to none 

    //Adds vectors in case that user is pressing the button 
    if(Input.GetKey(KeyCode.W)) direction += Vector3.forward; 
    if(Input.GetKey(KeyCode.S)) direction -= Vector3.forward; 
    if(Input.GetKey(KeyCode.D)) direction += Vector3.right; 
    if(Input.GetKey(KeyCode.A)) direction -= Vector3.right; 

    //Normalizez direction (put's it's magnitude to 1) so object moves at same speeds in all directions 
    r.AddForce (direction.normalized * speed); //Adds direction with magnitude of "speed" to rigidbody 
} 

剛體MUST被連接到相同的GO作爲此腳本。此腳本使用世界的方向,因爲與當地的方向工作更難(物體旋轉,並迅速改變方向,你可以使用它,如果你想僅僅通過更換來的Vector3參考這樣的轉變:

if(Input.GetKey(KeyCode.W)) direction += transform.forward; 

中當然,所有的方向。

這是非常移動物體沿着它的本地軸系,做更多更好的,你需要編寫對象的特定集合特定腳本基本方式,這一切都取決於什麼樣的對象是你在移動,你想如何移動它(它是球體,立方體......,它是否會飛起來,是否應該旋轉......)

0

如果RigidBody是Kinematic,它的意思是通過物理系統以外的方式來移動;動畫,transform.position等讓你的剛體不運動,當你設定的速度應該移動。