You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.12 01:10:27