在上一节我们介绍了刚体,但刚体只能使物体可以在力的作用下运动,小球之所以能撞到地面而不是穿过地面,是因为在创建物体时,U3D自动为每个物体附加了碰撞器,有了碰撞器,才会使物体正常的碰撞,而不是穿过。

        接着上节的项目,选中Shere,点掉物体的材质渲染Mesh Renderer选项,在Scene视图里的绿线就是碰撞器

       

unity触发器实现物体移动 unity设置触发器_ide

       在碰撞器的属性中我们可以看到,U3D允许我们手动调节碰撞器的位置和大小(这里告诉大家一个小技巧,鼠标放在X,Y,Z,Radius,当鼠标变成两个左右对立的小箭头时,上下移动鼠标可以调节编辑框里的数值)

网状碰撞器。选中小球,在菜单栏选择Component——>Physics——>Mesh Collider在弹出是否替换碰撞器的对话框中选择替换,这样我们就为物体添加了网格碰撞器,在Scene视图,我们可以看到,网格碰撞器是按照物体的形状精密的排布,这样,不论物体是什么形状,我们都可以为它添加碰撞器了,但值得注意的是:两个网格碰撞器是不发生碰撞的

      触发器:

触发器是可以被穿越的,不然我们怎么进入这边区域呢,对吧

     和碰撞器一样,触发器也有相应的行为函数:

     OnTriggerEnter:当物体进入触发器的一瞬间触发

     OnTriggerStay:当物体进入触发器后离开触发器前触发

     OnTriggerExit:当物体离开触发器的一瞬间触发

为了让大家理解触发器,我们接着上节的项目,做一个小测试

      选中Cube,将它作为触发器,将下面的脚本拖到Cube上

using UnityEngine;
using System.Collections;

public class TriggerTest : MonoBehaviour {

	// Use this for initialization
	void Start () {
	
	}
	
	// Update is called once per frame
	void Update () {
	
	}

    void OnTriggerEnter(Collider other)
    {
        print(other.gameObject.name + "Enter");
    }

    void OnTriggerStay(Collider other)
    {
        print(other.gameObject.name + "Stay");
    }

    void OnTriggerExit(Collider other)
    {
        print(other.gameObject.name + "Exit");
    }
}

 

运行结果:

unity触发器实现物体移动 unity设置触发器_Unity3D_02

 


 在上一节我们介绍了刚体,但刚体只能使物体可以在力的作用下运动,小球之所以能撞到地面而不是穿过地面,是因为在创建物体时,U3D自动为每个物体附加了碰撞器,有了碰撞器,才会使物体正常的碰撞,而不是穿过。

        接着上节的项目,选中Shere,点掉物体的材质渲染Mesh Renderer选项,在Scene视图里的绿线就是碰撞器

       

unity触发器实现物体移动 unity设置触发器_ide

       在碰撞器的属性中我们可以看到,U3D允许我们手动调节碰撞器的位置和大小(这里告诉大家一个小技巧,鼠标放在X,Y,Z,Radius,当鼠标变成两个左右对立的小箭头时,上下移动鼠标可以调节编辑框里的数值)

网状碰撞器。选中小球,在菜单栏选择Component——>Physics——>Mesh Collider在弹出是否替换碰撞器的对话框中选择替换,这样我们就为物体添加了网格碰撞器,在Scene视图,我们可以看到,网格碰撞器是按照物体的形状精密的排布,这样,不论物体是什么形状,我们都可以为它添加碰撞器了,但值得注意的是:两个网格碰撞器是不发生碰撞的

      触发器:

触发器是可以被穿越的,不然我们怎么进入这边区域呢,对吧

     和碰撞器一样,触发器也有相应的行为函数:

     OnTriggerEnter:当物体进入触发器的一瞬间触发

     OnTriggerStay:当物体进入触发器后离开触发器前触发

     OnTriggerExit:当物体离开触发器的一瞬间触发

为了让大家理解触发器,我们接着上节的项目,做一个小测试

      选中Cube,将它作为触发器,将下面的脚本拖到Cube上


using UnityEngine;
using System.Collections;

public class TriggerTest : MonoBehaviour {

	// Use this for initialization
	void Start () {
	
	}
	
	// Update is called once per frame
	void Update () {
	
	}

    void OnTriggerEnter(Collider other)
    {
        print(other.gameObject.name + "Enter");
    }

    void OnTriggerStay(Collider other)
    {
        print(other.gameObject.name + "Stay");
    }

    void OnTriggerExit(Collider other)
    {
        print(other.gameObject.name + "Exit");
    }
}

 

运行结果:

unity触发器实现物体移动 unity设置触发器_Unity3D_02