美文网首页unity学习
Unity触发交互的几种方式

Unity触发交互的几种方式

作者: 假装不是人 | 来源:发表于2017-03-23 13:13 被阅读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。

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

    相关文章

      网友评论

        本文标题:Unity触发交互的几种方式

        本文链接:https://www.haomeiwen.com/subject/qmdznttx.html