我正在编程一个玩家(一个红色的立方体)...在我的场景中有很多墙......不幸的是我的玩家穿过墙壁......我该如何解决?
所以这是我的脚本(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 :(得分:3)
将Rigidbody
附加到您的播放器gameobject
要在Unity中进行冲突,其中一个碰撞对象需要附加Rigidbody
。 Rigidbody
通常附加到gameobject
,这是非静态的。在您的情况下,您的播放器gameobject
是非静态的,并且需要附加Rigidbody
才能处理冲突。
答案 1 :(得分:1)
直观地,Collider
和RigidBody
之间的差异可以被认为如下。
物理计算在另一个世界中完成,换句话说,物理引擎有自己的世界,所有的计算/模拟都在那里完成。 Collider
实际上为物理模拟器提供信息(作为信息输入),而RigidBody
s在另一侧充当输出管道。
+-----------+
| +---+ | input
| | A |---|---------->
| +---+ |
| | Physics Calculation World
| +---+ | output
| | B |<--|-----------
| +---+ |
+-----------+
在这张照片中,A
只是一个对手,B
有一个僵硬的身体。
input
:将物理相关信息发送到物理计算世界。 (被动地行动)output
:从物理世界提供信息,并将应用它们添加到游戏对象中。 (积极行动)因此,我们可以总结如下:
Collider
:物理模拟的被动/信息提供者。RigidBoy
:活动/将物理计算结果应用于游戏对象。