2015-07-20 42 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:活动/将物理计算结果应用于游戏对象。