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

游戏开发技术问题:如何引用GameObject的左侧与右侧?

实现物体在目标物体上来回移动的方案

要获取目标物体的左右边缘位置,核心是基于目标物体的Transform组件结合尺寸信息计算,下面是具体思路和实现代码:

一、计算目标物体的左右边界

有两种常用方式获取左右位置:

  • 基于Collider组件(推荐):如果目标物体挂载了BoxCollider(3D)或BoxCollider2D(2D),可以直接通过其边界数据计算:

    // 3D场景示例
    Bounds targetBounds = targetObject.GetComponent<BoxCollider>().bounds;
    float leftEdgeX = targetBounds.min.x; // 左侧边缘X坐标
    float rightEdgeX = targetBounds.max.x; // 右侧边缘X坐标
    

    2D场景只需把BoxCollider替换为BoxCollider2D即可,边界计算逻辑完全一致。

  • 基于Renderer组件或自定义偏移:如果目标物体没有Collider,可通过Renderer的边界获取尺寸,或手动设置偏移量:

    // 用Renderer获取半宽,计算左右位置
    float halfWidth = targetObject.GetComponent<Renderer>().bounds.extents.x;
    float leftEdgeX = targetObject.transform.position.x - halfWidth;
    float rightEdgeX = targetObject.transform.position.x + halfWidth;
    

二、完整移动实现代码(C#)

下面是基于MoveTowards的来回移动脚本,直接挂载到需要移动的物体上即可:

using UnityEngine;

public class BackAndForthMovement : MonoBehaviour
{
    public GameObject targetObject; // 拖拽绑定目标物体
    public float moveSpeed = 3f;
    private Vector3 _currentTargetPos;
    private float _leftEdgeX;
    private float _rightEdgeX;

    void Start()
    {
        // 初始化目标物体的左右边界(这里用3D BoxCollider为例)
        Bounds targetBounds = targetObject.GetComponent<BoxCollider>().bounds;
        _leftEdgeX = targetBounds.min.x;
        _rightEdgeX = targetBounds.max.x;

        // 初始移动目标设为右侧边缘
        _currentTargetPos = new Vector3(_rightEdgeX, transform.position.y, transform.position.z);
    }

    void Update()
    {
        // 向当前目标位置移动
        transform.position = Vector3.MoveTowards(transform.position, _currentTargetPos, moveSpeed * Time.deltaTime);

        // 到达目标后切换方向(用小阈值避免精度问题导致频繁切换)
        if (Vector3.Distance(transform.position, _currentTargetPos) < 0.1f)
        {
            _currentTargetPos = _currentTargetPos.x == _rightEdgeX 
                ? new Vector3(_leftEdgeX, transform.position.y, transform.position.z) 
                : new Vector3(_rightEdgeX, transform.position.y, transform.position.z);
        }
    }
}

注意事项

  • 2D场景适配:将代码中的BoxCollider替换为BoxCollider2D,Vector3替换为Vector2,transform.position对应调整为二维坐标。
  • 阈值调整:0.1f的距离阈值可根据物体大小和移动速度灵活修改,避免因浮点精度问题导致的异常切换。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.17 20:57:08