unity学习

Unity触发交互的几种方式

2017-03-23  本文已影响998人  假装不是人

自己刚刚接触Unity,觉得很有意思,了解了几种触发方式,记录一下方便以后查阅

1.光线投射

简单来说就是用眼神杀死你

public static bool Raycast(Vector3 origin, Vector3 direction,out RaycastHit hitInfo, float maxDistance, int layerMask = DefaultRaycastLayers, QueryTriggerInteraction queryTriggerInteraction = QueryTriggerInteraction.UseGlobal);

origin 是光源点
direction 是发出的方向
maxDistance 是光线的距离
hitInfo 如果返回值是true,它会回调出被碰撞物体的信息
layerMask 是选定当前层内碰撞器,忽略其他层
queryTriggerInteraction 指定查询指令是否撞击触发器
返回值判断光线是否与其他物体交互

void Update () {
        RaycastHit hit;
        if(Physics.Raycast(transform.position,transform.forward,out hit,3.0f)){
        //  hit.collider.gameObject 获取到碰撞的物体进行操作    
        }
    }

2.角色控制器

void OnControllerColliderHit(ControllerColliderHit hit){} 只有添加角色控制器组件才会触发这个方法, hit为碰撞的对象,例子如下

void OnControllerColliderHit(ControllerColliderHit hit){
        
        if (hit.gameObject.tag == "playerDoor"   ) { //碰撞物体的标签
            AudioSource source = hit.gameObject.GetComponent<AudioSource> ();
            if(!source.isPlaying){
                source.PlayOneShot (door_open_sound); //只执行一次的音频
            }
            hit.gameObject.transform.parent.GetComponent<Animator> ().Play ("dooropen");
            hit.gameObject.transform.Rotate(0,90,0);
            InvokeRepeating ("close", 3.0f, 3.0f); //计时器
        }   
}

3.OnTriggerEnter

胶囊碰撞器.png

只要两者有一个勾选Is Trigger 选项, 在碰撞范围内并且有一个有刚体组件就会触发 OnTriggerEnter方法,
可以调节触发范围的大小,来达到你想要的碰撞范围

void OnTriggerEnter(Collider col){
        if (col.gameObject.tag == "Player") {
            col.gameObject.SendMessage ("cellPickup");//触发col.gameObject的方法
            Destroy (gameObject);//销毁
        }
    }

4.OnCollisionEnter

只有都没有勾选Is Trigger 选项,并且发起的碰撞的一方要有刚体,就会触发此方法

void OnCollisionEnter(Collision collision){
//      print (GetComponent<wupin>().count);
        print ("刚体碰撞");

}

如果想实现两个刚体物理的实际碰撞效果时候用OnCollisionEnter,Unity引擎会自动处理刚体碰撞的效果。
如果想在两个物体碰撞后自己处理碰撞事件用OnTriggerEnter。

以上是自己学习了解到的 ,如有不对请大神们指出来

上一篇下一篇

猜你喜欢

热点阅读