珠海专业做网站公司,wordpress中文博客模板,企业网站的优化和推广方法,如何做电商网站设计【Unity教程】从0编程制作类银河恶魔城游戏_哔哩哔哩_bilibili
教程源地址#xff1a;https://www.udemy.com/course/2d-rpg-alexdev/
本章节实现了进入游戏和死亡之后的淡入淡出动画效果 UI_FadeScreen.cs
1. Animator 组件的引用 (anim)
该脚本通过 Animator 控制 UI 元…【Unity教程】从0编程制作类银河恶魔城游戏_哔哩哔哩_bilibili
教程源地址https://www.udemy.com/course/2d-rpg-alexdev/
本章节实现了进入游戏和死亡之后的淡入淡出动画效果 UI_FadeScreen.cs
1. Animator 组件的引用 (anim)
该脚本通过 Animator 控制 UI 元素的动画效果。anim 是对 Animator 组件的引用触发动画。
2. FadeOut 和 FadeIn 方法 这两个方法分别用于触发淡出和淡入的动画效果。具体行为取决于 Animator 中的动画触发器。 FadeOut(): 调用 anim.SetTrigger(fadeOut) 来触发名为 fadeOut 的动画触发器。这个触发器会在 Animator 控制器中关联到某个淡出动画如逐渐让 UI 元素透明或让元素消失等。 FadeIn(): 调用 anim.SetTrigger(fadeIn) 来触发名为 fadeIn 的动画触发器。同样这会在 Animator 中关联到一个淡入动画如逐渐使 UI 元素出现或增加元素的透明度等。
3. 使用 Animator 控制动画
Animator 是 Unity 中用于控制动画的组件。通过设置触发器SetTrigger可以在动画状态机中切换到指定的动画状态。脚本本身并不直接控制动画的具体效果而是通过 Animator 和触发器来控制因此你需要在 Unity 编辑器中确保 Animator 中有相应的动画和触发器。
using System.Collections;
using System.Collections.Generic;
using UnityEngine;//2024.11.28
public class UI_FadeScreen : MonoBehaviour
{private Animator anim;private void Start(){anim GetComponentAnimator();}public void FadeOut() anim.SetTrigger(fadeOut);public void FadeIn() anim.SetTrigger(fadeIn);
}UI_MainMenu.cs
添加了一个协程用于延时出现动画
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.SceneManagement;//2024.11.27到冬天了
public class UI_MainMenu : MonoBehaviour
{[SerializeField] private string sceneName MainScene;[SerializeField] private GameObject continueButton;[SerializeField] UI_FadeScreen fadeScreen;//引用UI_FadeScreen脚本private void Start(){if (SaveManager.instance.HasSavedData() false) //如果没有存档continueButton.SetActive(false);//不显示继续游戏按钮}public void ContinueGame(){StartCoroutine(LoadSceneWithFadeEffect(1.5f));}public void NewGame(){SaveManager.instance.DeleteSaveData();StartCoroutine(LoadSceneWithFadeEffect(1.5f));}public void ExitGame(){Debug.Log(退出游戏);}IEnumerator LoadSceneWithFadeEffect(float _delay)//加载场景的协程{fadeScreen.FadeOut();yield return new WaitForSeconds(_delay);SceneManager.LoadScene(sceneName);}
}UI.cs
改动 public void SwitchTo(GameObject _menu)// 该方法用于切换到指定的UI界面{for (int i 0; i transform.childCount; i)//遍历当前UI对象的所有子物体{bool fadeScreen transform.GetChild(i).GetComponentUI_FadeScreen() ! null;//检查UI界面是否有FadeScreensif (fadeScreenfalse)transform.GetChild(i).gameObject.SetActive(false);//遍历并隐藏所有子元素,确保了在显示新的UI界面时所有其他的UI界面都会被隐藏}if (_menu ! null)//传入的菜单不为空{_menu.SetActive(true);//显示}public void SwitchOnEndScreen(){fadeScreen.FadeOut();StartCoroutine(EndScreenCorutione());}IEnumerator EndScreenCorutione(){yield return new WaitForSeconds(1.5f);endText.SetActive(true);}
using System.Collections;
using UnityEngine;
using UnityEngine.UI;public class UI : MonoBehaviour
{[Header(End screens)][SerializeField] private UI_FadeScreen fadeScreen;[SerializeField] private GameObject endText;[Space][SerializeField] private GameObject characterUI;[SerializeField] private GameObject skillTreeUI;[SerializeField] private GameObject craftUI;[SerializeField] private GameObject optionsUI;[SerializeField] private GameObject inGameUI;//物品提示框和状态提示框public UI_SkillToolTip skillToolTip;public UI_ItemTooltip itemToolTip;public UI_StatToolTip statToolTip;public UI_CraftWindow craftWindow;private void Awake(){SwitchTo(skillTreeUI);//2024年11月22日P138 Skill Tree Hot Fix启动时默认显示技能树界面}void Start(){SwitchTo(inGameUI);itemToolTip.gameObject.SetActive(false);//戏启动时隐藏物品提示框和状态提示框statToolTip.gameObject.SetActive(false);}void Update(){if (Input.GetKeyDown(KeyCode.C))SwitchWithKeyTo(characterUI);if (Input.GetKeyDown(KeyCode.B))SwitchWithKeyTo(craftUI);if (Input.GetKeyDown(KeyCode.K))SwitchWithKeyTo(skillTreeUI);if (Input.GetKeyDown(KeyCode.O))SwitchWithKeyTo(optionsUI);}public void SwitchTo(GameObject _menu)// 该方法用于切换到指定的UI界面{for (int i 0; i transform.childCount; i)//遍历当前UI对象的所有子物体{bool fadeScreen transform.GetChild(i).GetComponentUI_FadeScreen() ! null;//检查UI界面是否有FadeScreensif (fadeScreenfalse)transform.GetChild(i).gameObject.SetActive(false);//遍历并隐藏所有子元素,确保了在显示新的UI界面时所有其他的UI界面都会被隐藏}if (_menu ! null)//传入的菜单不为空{_menu.SetActive(true);//显示}}public void SwitchWithKeyTo(GameObject _menu)//处理切换UI的逻辑{if (_menu ! null _menu.activeSelf)// UI界面已经显示隐藏, 如果目标UI界面未显示调用 SwitchTo 显示。{_menu.SetActive(false);CheckForInGameUI();return;}SwitchTo(_menu);}private void CheckForInGameUI()//关闭其他UI都会回到InGameUI{for (int i 0; i transform.childCount; i){if (transform.GetChild(i).gameObject.activeSelf)//检查当前 UI 对象的第 i 个子对象是否处于激活状态。return;}SwitchTo(inGameUI);}public void SwitchOnEndScreen(){fadeScreen.FadeOut();StartCoroutine(EndScreenCorutione());}IEnumerator EndScreenCorutione(){yield return new WaitForSeconds(1.5f);endText.SetActive(true);}
}
PlayerDeathState.cs