找回密码
 立即注册
查看: 298|回复: 0

Unity 中的碰撞

[复制链接]
发表于 2022-9-25 17:46 | 显示全部楼层 |阅读模式
想在 Unity 中实现碰撞来选择物体,所以先研究一下碰撞。

  • 新建两个cube
  • 其中一个的 Box Collider 选上 IsTrigger
  • 添加上代码,写下 OnTriggerEnter Event
  • 让它们碰撞起来
public class BumpIntoSomething : MonoBehaviour
{
    public float speed = 2000;
    // Start is called before the first frame update
    void Start()
    {

    }

    // Update is called once per frame
    void Update()
    {
        transform.Translate(Vector3.forward * Time.deltaTime * speed);
    }

    private void OnTriggerEnter(Collider other) {
        Debug.Log( other.name );
    }
}
即使碰撞发生,但是 OnTriggerEnter 并没有被调用。
Collider vs Rigidbody

发现不行,然后回头去看官方文档  Collider.OnTriggerEnter(Collider),原来:
Both GameObjects must contain a Collider component. One must have Collider.isTrigger enabled, and contain a Rigidbody. If both GameObjects have Collider.isTrigger enabled, no collision happens. The same applies when both GameObjects do not have a Rigidbody component.
一定要有 Rigidbody 这个 component,再搜了一下:
No, at least one must have a rigidbody attached.
两个物体之间必须要有一个 Rigidbody,至于原理,大概是因为碰撞是物理的,和 physics system 相关,所以一定要 Rigidbody,尝试把 Rigidbody 添加到两个物体上面任意一个,都 work。
随意的给另一个物体添加了代码:
public class ChangeColorWhenCollide : MonoBehaviour
{
    private void OnTriggerEnter(Collider other) {
        Debug.Log( "cube being collided" );
        var renderer = GetComponent<Renderer>();
        renderer.material.SetColor("_Color", Color.red);
    }
}



参考:

  • Collider.OnTriggerEnter(Collider)

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

×
懒得打字嘛,点击右侧快捷回复 【右侧内容,后台自定义】
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Unity开发者联盟 ( 粤ICP备20003399号 )

GMT+8, 2024-11-24 10:32 , Processed in 0.093131 second(s), 26 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表