关于Unity触发器的触发条件

首先,我在场景中创建了两个Cube和一个plane,每个cube都加了一个Box collider

一个Cube中挂了叫Moveto脚本如下

public class MoveTo : MonoBehaviour
 {
    public Transform Target;
	// Use this for initialization
	void Start () 
    {
		
	}
	
	// Update is called once per frame
	void Update () 
    {
        transform.position = Vector3.MoveTowards(transform.position,Target.position,2*Time.deltaTime);
	}
    private void OnTriggerEnter(Collider other)
    {
        Debug.Log("true");
    }
}

另一个不动的Cube挂的是Stand脚本,仅仅加了一个

    void OnTriggerEnter(Collider other)
    {
        Debug.Log("false");
    }

那么测试第一种情况,两个Cube都只加Collider

我们可以看到控制台没有任何信息输出,也就以为着没有触发碰撞器。

那么我们测试第二种情况,移动的Cube加一个Rigibody

这时候我们发现移动的Cube和不动的Cube他们都触发了他们的碰撞器

所以我决定在不动的Cube中也加一个刚体,结果当然和第二种情况一样了。

第三中情况,把两个Cube的刚体去掉,动的那个加一个CharacterController

我发现刚开始游戏的时候动的那个Cube就触发了两次碰撞器,为什么动的碰撞器触发了3次呢,我是这样理解的,因为CharacterController自带了碰撞器和刚体(这是触发碰撞器的原因),又因为动的Cube中我一开始就加了一个Box Collider所以动Cube自身发生了碰撞,所以刚开始游戏的时候碰撞器触发了两次

总结:如果要发生碰撞,两个物体必须都有Collider,其中一个物体需要一个刚体,当然CharacterController也可以。不过加了CharacterController就不要加碰撞器了,不然里面的函数触发多次。(如果有错误的地方,欢迎大家指正,一起学习哈)

 

  • 5
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值