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

Unity 2D中如何通过UI Button切换跟随目标?

问题分析与解决方案

首先你的核心问题出在代码结构错误和未做空值校验,导致切换逻辑根本没机会正常运行:

1. 代码的核心问题

  • 代码没有包裹在C#类中,成员变量targets、targetedEnemy、currentTarget直接声明在类外部,这会直接导致编译失败,程序根本跑不起来。
  • currentTarget没有初始赋值,第一次执行Update时,GameObject.FindGameObjectsWithTag(currentTarget)相当于传入空字符串,返回空数组,后续访问targets[Random.Range(...)]会触发索引越界错误。
  • 每次调用Follow()都重复查找对应标签的对象,效率低下,且未判断数组是否为空,若场景中没有对应标签的对象,依然会报错。

2. 修正后的代码

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class FollowTarget : MonoBehaviour
{
    private GameObject[] targets;
    private Transform targetedEnemy;
    // 给初始值,避免第一次调用时为空
    public string currentTarget = "Player";
    public float followSpeed = 2f;

    void Update()
    {
        Follow();
    }

    public void Follow()
    {
        // 先判断目标标签是否有效
        if(string.IsNullOrEmpty(currentTarget)) return;
        
        targets = GameObject.FindGameObjectsWithTag(currentTarget);
        if(targets.Length == 0) 
        {
            Debug.LogWarning($"未找到标签为{currentTarget}的对象");
            return;
        }

        // 随机选取一个目标
        targetedEnemy = targets[Random.Range(0, targets.Length)].transform;
        transform.position = Vector3.MoveTowards(transform.position, targetedEnemy.position, followSpeed * Time.deltaTime);
    }

    public void SwitchToPlayer()
    {
        currentTarget = "Player";
        // 可选:切换时立即执行跟随逻辑,无需等下一帧Update
        // Follow();
    }

    public void SwitchToBoss()
    {
        currentTarget = "Boss";
        // Follow();
    }
}

3. 按钮绑定的正确操作

你的第一种思路(给每个按钮绑定单独切换函数)完全可行,之前失败是因为代码编译错误:

  • 将修正后的脚本挂载到需要跟随的GameObject上
  • 在UI Button的OnClick事件中,拖拽挂载了脚本的GameObject到事件列表
  • 选择FollowTarget -> SwitchToPlayer()(或SwitchToBoss())作为点击触发的函数

4. 关于你的疑问

  • 你之前的FollowEnemy()和FollowPlayer()修改的currentTarget不是局部变量,它是类的成员变量(类范围内全局有效),问题是代码结构错误导致这些函数根本没被正确执行。
  • 完全可以通过修改这个全局的currentTarget值来切换跟随目标,这是最简洁的方案,不需要写多个跟随脚本或复杂的启用/禁用逻辑。

内容的提问来源于stack exchange,提问作者Aru Alonless

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.30 23:06:34