我的播放器不尊重盒式对撞机

时间:2015-07-20 09:55:41

标签: unity3d physics unityscript

我正在编程一个玩家(一个红色的立方体)...在我的场景中有很多墙......不幸的是我的玩家穿过墙壁......我该如何解决?

所以这是我的脚本(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);



    }


   }

我的播放器有一个盒子对撞机,我的墙壁也有一个......(而且他不是触发器)......

2 个答案:

答案 0 :(得分:3)

Rigidbody附加到您的播放器gameobject

要在Unity中进行冲突,其中一个碰撞对象需要附加RigidbodyRigidbody通常附加到gameobject,这是非静态的。在您的情况下,您的播放器gameobject是非静态的,并且需要附加Rigidbody才能处理冲突。

答案 1 :(得分:1)

直观地,ColliderRigidBody之间的差异可以被认为如下。

物理计算在另一个世界中完成,换句话说,物理引擎有自己的世界,所有的计算/模拟都在那里完成。 Collider实际上为物理模拟器提供信息(作为信息输入),而RigidBody s在另一侧充当输出管道。

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

在这张照片中,A只是一个对手,B有一个僵硬的身体。

  • input:将物理相关信息发送到物理计算世界。 (被动地行动)
  • output:从物理世界提供信息,并将应用它们添加到游戏对象中。 (积极行动)

因此,我们可以总结如下:

  • Collider:物理模拟的被动/信息提供者。
  • RigidBoy:活动/将物理计算结果应用于游戏对象。