赞
踩
在 unity 里面要想实现碰撞,需要满足两个条件。
对于第一条:碰撞组件有很多, 针对不同的形状有不同的Collider 。其中 Box Collider 是六个面针对的是立方体等,如果不算2d 的 Collider,Box Collider 的面数是最少的,下面还有Capsule Collider 胶囊体,Sphere Collider 球体的。其中针对不规则的物体可以使用 Mesh Collider,比如说坦克,石头等。
如何在程序里检测到碰撞,Unity 已经给了相应的方法。
当两个碰撞的物体,其中一个勾选上 Is Trigger 时,会触发:OnTriggerEnter、OnTriggerStay、OnTriggerExit
当不勾选Is Trigger 时,会触发:OnCollisionEnter、OnCollisionStay、OnCollisionExit。
看上面的英语,字面意思就是, Enter碰撞开始,Stay 碰撞保持,Exit 碰撞结束。
每个方法都有一个参数Collider other,这个代表与它发生碰撞的另外一个物体。
private void OnTriggerEnter(Collider other)
{
Debug.Log("OnTriggerEnter:::"+other.transform.name);
}
下面写了个例子:,可以把这个方法拖拽到其中一个物体上可以查看效果。
using System.Collections; using System.Collections.Generic; using UnityEngine; public class TrigerAndColler : MonoBehaviour { // Start is called before the first frame update void Start() { } private void OnTriggerEnter(Collider other) { Debug.Log("OnTriggerEnter:::"+other.transform.name); // Destroy(other.gameObject); } private void OnTriggerStay(Collider other) { Debug.Log("OnTriggerStay"); } private void OnTriggerExit(Collider other) { Debug.Log("OnTriggerExit"); } private void OnCollisionEnter(Collision other) { // Destroy(other.gameObject); other.transform.GetComponent<MeshRenderer>().material.color = new Color(Random.value,Random.value,Random.value); Debug.Log("OnCollisionEnter"); } private void OnCollisionStay(Collision other) { Debug.Log("OnCollisionStay"); } private void OnCollisionExit(Collision other) { Debug.Log("OnCollisionExit"); } // Update is called once per frame void Update() { } }
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。