Unity--Stealth秘密行动开发(二):自动滑动门

Unity–Stealth秘密行动开发(二):自动滑动门

自动滑动门的原理就是根据英雄的触发器来控制门的移动,在英雄身上加上刚体,触发器,碰撞器,门的上面只需要加触发器

自动门有两种:通过的钥匙开启和自动开启
1.设置成员变量
 	public bool reqireKey = false;//门的开启是否需要钥匙
    public AudioSource audio;
    public AudioClip openmusic;   //开门声音
    public AudioClip deniedmusic; //不能开门声音
    
	private int count = 0;//计数器
    private Animator anim;
2.在Awake()中初始化
private void Awake()
{
    anim = GetComponent<Animator>();
    audio = GetComponent<AudioSource>();       
}
3.设置触发器–只触发一次
 private void OnTriggerEnter(Collider other)
    {
        //判断开门是否需要钥匙
        if(reqireKey)
        {
            
            if(other.tag==Tags.player)   //other.collider is CapsuleCollider 指定触发器
            {
                //判断玩家是否拥有钥匙  
                //Player player = other.GetComponent();
                bool haskey=Player._instance.isHaskey();
                if (haskey) 
                {
                    audio.clip = openmusic;
                    audio.Play();
                    count++;                 
                }
                else
                {
                    audio.clip = deniedmusic;
                    audio.Play();//播放拒绝的声音                    
                }
            }            
        }
        else
        {
            if (other.tag == Tags.enemy || other.tag == Tags.player)//判断是否有人和敌人的存在
            {
                audio.clip = openmusic;
                audio.Play();
                count++;
              
            }
        }
    }
4.触发器的检测退出

    private void OnTriggerExit(Collider other)
    {
        if (other.tag == Tags.enemy || other.tag == Tags.player)
        {
            if(count==0)
            {

            }
            else
            {
                count--;
            }
            
        }
    }
5.在调度器中每一帧去设置门是否开启
 void Update()
    {
        //count小于或等于0说明当前没有人,
        anim.SetBool("Close", count <= 0);      
    }
6.设置动画机

设置一个bool值Close,门开启,为true,门关闭,为false
切换条件设置好即可,状态机默认动画为门关闭

你可能感兴趣的:(Unity,触发器,游戏开发)