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

GameObject需同时跟随光标与追踪敌人?脚本故障排查及改写咨询

解决角色跟随光标/敌人位置的脚本问题

嘿,先聊聊你当前脚本大概率跑不起来的几个核心原因:

  • 代码片段不完整:你贴的内容连Input.mousePosition都没写完,语法上直接通不过编译
  • 缺少敌人状态检测逻辑:完全没看到判断"enemy"对象是否存在的代码,自然没法触发切换到追敌人的状态
  • ScreenToWorldPoint的Z轴疏漏:2D场景里如果不设置Z值,默认的0会让角色跑到相机平面后方,看起来像是完全没移动
  • 无状态切换分支:只写了跟随光标的部分,没有添加敌人存在时的移动逻辑分支

下面是完全贴合你需求的改写脚本,注释已经写得很清楚:

using UnityEngine;

public class FollowCursor : MonoBehaviour
{
    private GameObject enemy;
    // 控制角色移动的平滑速度,数值越大移动越快
    public float moveSpeed = 8f;

    void Update()
    {
        // 实时查找场景中名为"enemy"的对象(适配敌人动态生成/销毁的场景)
        enemy = GameObject.Find("enemy");

        Vector3 targetPosition;

        if (enemy != null)
        {
            // 敌人存在时,目标位置设为敌人的世界坐标
            targetPosition = enemy.transform.position;
        }
        else
        {
            // 敌人消失后,将鼠标屏幕坐标转换为世界坐标
            // 固定Z轴为角色初始Z值,避免角色跑到相机后方
            Vector3 mouseWorldPos = Camera.main.ScreenToWorldPoint(Input.mousePosition);
            mouseWorldPos.z = transform.position.z;
            targetPosition = mouseWorldPos;
        }

        // 平滑移动到目标位置,避免瞬间跳转的生硬感
        transform.position = Vector3.MoveTowards(transform.position, targetPosition, moveSpeed * Time.deltaTime);
    }
}

额外给你几个优化小建议:

  • 如果敌人是固定对象只是切换激活状态,可以用标签查找(GameObject.FindGameObjectWithTag),比按名称查找效率更高
  • 要是敌人生成/销毁频率高,建议把GameObject.Find移到Start里,或者用事件监听敌人的状态变化,避免每帧查找浪费性能
  • 3D场景下不用固定Z轴,根据你的相机类型调整ScreenToWorldPoint的参数即可

内容的提问来源于stack exchange,提问作者Scribble Sketches

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 08:18:48