【问题标题】:Object doesnt collide物体不碰撞
【发布时间】:2017-01-05 04:00:54
【问题描述】:

我有以下脚本:

using UnityEngine;
using System.Collections;

public class BallScript : MonoBehaviour {
    public float speed;
    private Rigidbody body;
    // Use this for initialization
    void Start () {
        body = GetComponent<Rigidbody> ();
    }

    // Update is called once per frame
    void Update () {
        body.AddForce(transform.forward * speed);
    }

    void OnCollisionEnter(Collision collision) {
        Debug.Log("Collision");
        Destroy (this);
    }
}

您可以看到它有一个OnCollisionEnter,但是我的对象无法与任何东西发生碰撞,而是飞过每个对象?

这是我的prefab

我试图与之碰撞的对象:

谁能告诉我我做错了什么?

【问题讨论】:

  • 为什么你的 Sphere 是触发器?禁用触发器,应该没问题
  • 可悲的是这也不起作用:(
  • 您可能还想考虑使用RigidBody.AddForce() 或其他物理方法来移动您的对象 - 如果您使用Translate(),它会在不注意物理交互的情况下移动它,并且可能会导致一些错过碰撞。
  • @Serlite 我更新了我的代码,你可以看看。它仍然没有触发碰撞
  • 您还应该确保您的刚体不是运动学的,否则它不会进入物理模拟。

标签: unity3d collision-detection


【解决方案1】:

如果您想使用isTrigger,您需要检查与OnTriggerEnter 的冲突。如果您想使用OnCollisionEnter,请尝试将rigidBody 添加到带有is kinematic(用于性能)标志的多维数据集,从球体中禁用is trigger,看看是否有效。

查看这里方法的区别:

https://docs.unity3d.com/ScriptReference/Collider.OnCollisionEnter.html https://docs.unity3d.com/ScriptReference/Collider.OnTriggerEnter.html

问候

【讨论】:

  • 您是否调试过您的应用程序?调试您的游戏并在Design View 上手动将一个对象移动到另一个对象,这样您就可以看到两个碰撞器重叠并查看您的代码是否触发。另外,尝试添加一个盒子碰撞器只是为了测试目的,(你可以把你的球体碰撞器放在那里,只是禁用它)并检查脚本是否触发。
  • 只有一个刚体应该是运动学的。顺便说一句,不是他们俩
猜你喜欢
  • 1970-01-01
  • 2021-12-05
  • 1970-01-01
  • 2023-03-15
  • 2017-07-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多