2015-07-20 18 views
2

我正在編程一個播放器(一個紅色的立方體)......在我的場景中有很多牆壁......不幸的是我的播放器穿過牆壁......我該如何修復它?我的播放器不尊重盒子對撞機

因此,這裏有我的腳本(JS):

#pragma strict 

    function Start() { 

    } 

function Update() { 


    if(Input.GetKey(KeyCode.LeftArrow) || Input.GetKey(KeyCode.A)) { 
    transform.Translate(Vector3.left * Time.deltaTime); 


} 

    if(Input.GetKey(KeyCode.RightArrow) || Input.GetKey(KeyCode.D)) { 
     transform.Translate(Vector3.right * Time.deltaTime); 


    } 
     if(Input.GetKey(KeyCode.UpArrow) || Input.GetKey(KeyCode.W)) { 
      transform.Translate(Vector3.forward * Time.deltaTime); 


    } 
    if(Input.GetKey(KeyCode.DownArrow) || Input.GetKey(KeyCode.S)) { 
     transform.Translate(Vector3.back * Time.deltaTime); 



    } 


    } 

我的球員有一個盒子撞機和我的牆壁上有一個太......(並且不被觸發)...

+0

在DeltaTime中,玩家完全有可能從牆的一側穿過牆到另一側,而您的碰撞測試只會檢查牆內的球員。 – vogomatix

回答

3

連接Rigidbodygameobject

對於在Unity中工作的碰撞,其中一個碰撞對象需要附加一個RigidbodyRigidbody通常附屬於非靜態的gameobject。在你的情況下,你的球員gameobject是非靜態的,並且需要附加一個Rigidbody以處理衝突。

1

直觀上可以認爲Collider s和RigidBody之間的差異如下。

物理計算是在另一個世界完成的,換句話說,物理引擎有自己的世界,所有的計算/模擬都在那裏完成。 Collider s實際上爲物理模擬器提供信息(作爲信息輸入),並且在另一側作爲輸出管道。

+-----------+ 
| +---+ | input 
| | A |---|----------> 
| +---+ | 
|   |    Physics Calculation World 
| +---+ | output 
| | B |<--|----------- 
| +---+ | 
+-----------+ 

在這張照片,A僅爲撞機和B具有剛性體。

  • input:向物理計算世界發送物理相關信息。 (被動地行動)
  • output:給物理世界的信息和申請他們的遊戲對象。 (積極作用)

因此,我們可以總結如下:

  • Collider:對物理模擬被動/信息提供商。
  • RigidBoy:活動/將物理計算結果應用於遊戲對象。
相關問題