Unity中替换切换脚本内第二个Avatar的实现问题求助
解决方案
要实现靠近物体按E键替换第二个Avatar的功能,只需对两个脚本做如下修改:
1. 扩展SwitchCharacterScript,添加替换Avatar2的方法
在原脚本中新增公共方法,用于更新avatar2的引用并同步显示状态:
using System.Collections; using System.Collections.Generic; using UnityEngine; public class SwitchCharacterScript : MonoBehaviour { private const string ButtonName = "E"; public GameObject avatar1, avatar2; // 保存原始Avatar2,方便后续恢复(可选) private GameObject originalAvatar2; int whichAvatarIsOn = 1; void Start() { originalAvatar2 = avatar2; avatar1.SetActive(true); avatar2.SetActive(false); } public void SwitchAvatar() { switch (whichAvatarIsOn) { case 1: whichAvatarIsOn = 2; avatar1.SetActive(false); avatar2.SetActive(true); break; case 2: whichAvatarIsOn = 1; avatar2.SetActive(false); avatar1.SetActive(true); break; } } // 新增:替换Avatar2的核心方法 public void ReplaceAvatar2(GameObject newAvatar) { // 隐藏当前Avatar2 if (avatar2 != null) avatar2.SetActive(false); // 更新Avatar2引用 avatar2 = newAvatar; // 如果当前显示的是Avatar2,立即激活新物体 if (whichAvatarIsOn == 2) avatar2.SetActive(true); } // 可选:恢复原始Avatar2的方法 public void RestoreOriginalAvatar2() { ReplaceAvatar2(originalAvatar2); } void Update() { if (Input.GetKeyDown(KeyCode.LeftAlt)) { SwitchAvatar(); } } }
2. 完善Trigger脚本的SomeCoolAction方法
修改Trigger脚本,调用SwitchCharacterScript的替换方法,同时处理触发物体的状态:
using System.Collections; using UnityEngine; public class Trigger : MonoBehaviour { public SwitchCharacterScript player; [SerializeField] private bool triggerActive = false; // 变量名避免和内置类名冲突,改为targetObject public GameObject targetObject; void OnTriggerEnter2D(Collider2D other) { if (other.CompareTag("Player")) { triggerActive = true; } } void OnTriggerExit2D(Collider2D other) { if (other.CompareTag("Player")) { triggerActive = false; } } private void Update() { if (triggerActive && Input.GetKeyDown(KeyCode.E)) { SomeCoolAction(); } } public void SomeCoolAction() { if (player != null && targetObject != null) { // 隐藏触发的物体(按需选择) targetObject.SetActive(false); // 执行替换逻辑 player.ReplaceAvatar2(targetObject); // 关闭触发状态,防止重复触发 triggerActive = false; } } }
配置说明
- 在Unity编辑器中,给Trigger脚本的
player字段赋值为挂载了SwitchCharacterScript的对象,targetObject赋值为当前触发物体本身。 - 若需要恢复原始Avatar2,可在合适时机调用
RestoreOriginalAvatar2方法。
内容的提问来源于stack exchange,提问作者jackieboi
相关产品推荐
相关产品推荐

