Unity (玩家通关胜利的障碍物效果)

前沿

当玩家进过密室逃脱的时候 胜利的时候制作 通关 的物体

 

右键 3Dobject  -- cube 然后 改名为GameEnding

 然后取消材质的勾选

 

然后制作一个canvas 

右键Ui -image 

 

 选中右边的那个 按住 Alt 选中右下角那给个

然后平铺 在创建个图片一样的操作然后那图片地址替换下

 

 

然后吸写如脚本:

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.SceneManagement;
/// <summary>
/// 相当于GameManager的角色。控制游戏结束的进程。(包括游戏结束时图片、音频的播放)
/// </summary>
public class GameEnding : MonoBehaviour
{
    //游戏结束图片淡入的时间
    public float fadeDuration = 1f;
    //游戏结束图片显示的持续时间
    public float displayImageDuration = 1f;
    
    //触发器的目标对象-玩家
    public GameObject player;

    //UI组件--游戏通关的CanvasGroup
    public CanvasGroup exitBackgroundImageCanvasGroup;
    //音频组件--游戏通关
    public AudioSource ar_exit;
    
    //UI组件--碰到敌人导致游戏彻底结束的CanvasGroup
    public CanvasGroup RestartCanvasGroup;
    //音频组件--游戏结束
    public AudioSource ar_caught;

    //走到胜利位置---游戏通关的bool值
    bool m_IsPlayerExit=false;

    //碰到敌人---游戏失败的bool值
    bool m_IsCaught=false;

    //用于控制游戏结束与游戏通关的声音播放的bool值
    bool IsHasPlay =false;

    //计时器
    float m_Timer;
    
    //玩家走到胜利的位置
    private void OnTriggerEnter(Collider other)
    {
        if (other.gameObject == player) 
        {
            m_IsPlayerExit = true;
        }
    }

    // Update is called once per frame
    void Update()
    {
        //游戏通关,退出游戏
        if (m_IsPlayerExit)
        {
            EndLevel(exitBackgroundImageCanvasGroup,false,ar_exit);
        }
        //游戏失败,重新开始
        else if (m_IsCaught) 
        {
            EndLevel(RestartCanvasGroup,true,ar_caught);
        }
    }

    /// <summary>
    /// 玩家被敌人抓住
    /// </summary>
    public void IsCaught() 
    {
        m_IsCaught = true;
    }

    /// <summary>
    /// 游戏结束的方法 
    /// </summary>
    /// <param name="ca"></param>
    /// <param name="ReStart"></param>
    /// <param name="ar"></param>
    void EndLevel(CanvasGroup ca,bool ReStart,AudioSource ar) 
    {
        //控制声音播放的bool值的更新
        if (!IsHasPlay) 
        {
            //首先将音乐播放器打开
            ar.Play();
            IsHasPlay = true;
        }

        //根据m_Timer来设置本关游戏结束时的淡入淡出特效
        m_Timer+=Time.deltaTime;
        ca.alpha = m_Timer / fadeDuration;
        
        //本关游戏结束
        if (m_Timer > fadeDuration + displayImageDuration)
        {
                //游戏失败,重新开始
            if (ReStart) 
            {
                SceneManager.LoadScene(0);
            }
            else if (!ReStart) 
            {
                //游戏通关,退出游戏
                Application.Quit();
            }

        }
    }


}

这样就OK了

 

   //玩家走到胜利的位置
   private void OnTriggerEnter(Collider other)
   {
       if (other.gameObject == player) 
       {
           m_IsPlayerExit = true;
       }
   }
other.gameObject  就是碰撞器这样然后可以写 是否是玩家触碰到了这个

 

posted @ 2024-05-26 14:43  -鹿-  阅读(13)  评论(0编辑  收藏  举报