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

Unity C#如何在不指定对象名称的前提下引用挂载脚本的对象自身

Unity同脚本多对象间距控制方案

核心问题解答

  • 你无需写具体对象名,Unity中脚本挂载到哪个对象上,内置变量transform就代表当前对象的Transform组件,gameObject就代表当前对象本身,直接使用即可。

原有代码问题修正

你原来的代码存在以下问题:

  1. Start方法内重复声明了局部变量distance,覆盖了类成员变量
  2. chaos - distance += distances是非法语法,赋值运算符左侧不能是运算表达式
  3. 缺少根据chaos值调整对象位置的核心逻辑

可用完整代码

using UnityEngine;

public class DistanceMovement : MonoBehaviour
{
    public int chaos = 0;
    public GameObject main; // Inspector面板中拖入你的主节点对象
    public float baseDistance = 1f; // 基础间距,可根据需求自行调整

    private float _targetDistance;
    
    void Start()
    {
        _targetDistance = baseDistance + chaos;
    }

    void Update()
    {
        // 直接用transform.position取当前对象自身的位置,无需写对象名
        float currentDistance = Vector3.Distance(main.transform.position, transform.position);
        // 计算当前对象远离主节点的方向向量
        Vector3 awayFromMain = (transform.position - main.transform.position).normalized;

        // 更新目标间距:chaos越大,间距越大
        _targetDistance = baseDistance + chaos;
        
        // 调整当前对象位置,保持与主节点的目标间距
        if (Mathf.Abs(currentDistance - _targetDistance) > 0.01f)
        {
            transform.position = main.transform.position + awayFromMain * _targetDistance;
        }
    }
}

使用方法

  • 将上述脚本挂载到所有主节点周围的对象上
  • 在Inspector面板给所有挂载脚本的对象的main字段赋值为你的主节点对象即可,所有对象共用同一份脚本,无需单独修改代码

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 19:54:04