美文网首页AR/VR/MRAR之道
AR Foudation功能记录(一) ------ 靠近物体触

AR Foudation功能记录(一) ------ 靠近物体触

作者: 千喜Ya | 来源:发表于2019-07-07 15:38 被阅读4次

实现思路 : 在ARcamera下增加Cube(上面带有BoxCollider),勾选掉其MeshRender并添加Rigibody组件,在要触发物体上增加BoxCollider,调整好两个boxcollider的范围,那么这两个boxcollider碰撞到会触发物体上的OnCollisionEnter函数,在此写逻辑即可

一.ARCamera下的Cube

二.物体上添加Boxcollider

三.新建ColliderParent函数

这里因为有可能需要多个碰撞物体,如果将脚本挂在ARCamera下的Cube身上然后通过tag去分辨碰撞到了哪个物体,我怕后面此脚本会非常臃肿,因此我选择将脚本挂在碰撞物体上,然后新建一个父脚本,这样结构会非常清晰,同时也可以将相同行为抽象出来

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
//碰撞脚本的Parent(摄像机与场景中人物的碰撞)
public class ColliderParent : MonoBehaviour
{
    public GameObject NextObject;
    
    public virtual void OnCollisionEvent(GameObject collisionObj)
    {

    }
    public void OnCollisionEnter(Collision collision)
    {
        OnCollisionEvent(collision.gameObject);
    }
}

四.具体碰撞函数实现

也要注意判断碰撞的tag是不是ARCamera

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
//门的碰撞触发函数
public class DoorCollider : ColliderParent
{
    bool isOneClick = false;
    Animator animator;
    public AudioClip openDoorClip;
    private void Start()
    {
        animator = transform.parent.GetComponent<Animator>();
    }
    public override void OnCollisionEvent(GameObject collisionObj)
    {
        if(!isOneClick && string.Compare(collisionObj.tag, "ARCamera", System.StringComparison.Ordinal) == 0)
        {
            isOneClick = true;
            //触发门打开
            animator.Play("kaimen");
            GetComponent<BoxCollider>().enabled = false;
            NextObject.SetActive(true);
            
            MainData.instance.PlayEffectAudio(openDoorClip,null);
        }
    }
}

将该脚本挂在碰撞物体上就完成了

相关文章

网友评论

    本文标题:AR Foudation功能记录(一) ------ 靠近物体触

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