实现思路 : 在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);
}
}
}
将该脚本挂在碰撞物体上就完成了
网友评论