我在Unity中有一个盒子,后面跟着一架飞机上的摄像头。我试图处理盒子和不同物体之间的碰撞。当它与它旋转的不同事物碰撞时,跳跃并发生奇怪的事情。我上传了一段视频来展示问题。 The video
我创建了一个带有相机和盒子的空。这个空的质量为1的刚体。
空有一个脚本组件:
using UnityEngine;
using System.Collections;
public class Character : MonoBehaviour {
// Use this for initialization
void Start () {
}
// Update is called once per frame
void Update () {
}
void OnCollisionEnter(Collision collision)
{
Debug.Log ("Entered OnCollisionEnter function");
if (collision.gameObject.name == "Wall") {
GetComponent<Rigidbody>().velocity = Vector3.zero;
Debug.Log ("Inside if statement");
}
}
}
正如你所看到的,我试图处理碰撞,编写一个停止移动立方体的代码。
可以帮助你们的其他信息:
它有一个盒子对撞机。脚本:
using UnityEngine;
using System.Collections;
public class MoveCharacter : MonoBehaviour {
public float deltaMovement = 10f;
// Use this for initialization
void Start ()
{
}
// Update is called once per frame
void Update ()
{
Moving();
}
void Moving()
{
//Moves the character to where it needs.
if (Input.GetKey (KeyCode.A)) {
transform.Translate (new Vector3 (-deltaMovement, 0f, 0f) * Time.deltaTime);
} else if (Input.GetKey (KeyCode.D)){
transform.Translate (new Vector3 (deltaMovement, 0f, 0f) * Time.deltaTime);
}
float yRotation = Camera.main.transform.eulerAngles.y;
float movementX = Mathf.Sin ((yRotation * Mathf.PI) / 180) * deltaMovement;
float movementZ = Mathf.Cos ((yRotation * Mathf.PI) / 180) * deltaMovement;
if (Input.GetKey (KeyCode.W)) {
transform.Translate (new Vector3 (movementX, 0f, movementZ) * Time.deltaTime, Space.World);
} else if (Input.GetKey (KeyCode.S)){
transform.Translate (new Vector3 (-movementX, 0f, -movementZ) * Time.deltaTime, Space.World);
}
}
}
这是一架带有网状对撞机的飞机,有或没有刚体并没有什么区别,同样的问题......
请帮忙吗?
答案 0 :(得分:2)
如果你正在使用物理学,你不应该移动一个物体我改变它的平移,你应该通过对物体施加力来移动它,或者至少为它添加一个速度。这将允许物理引擎正确计算与其他刚体的反应。
如果你移动一个物体我调整它的平移然后当发生碰撞时,就好像物体已经物化到另一个物体到发动机,因为它将在没有速度等情况下移动,你会得到奇怪的行为。