Unity C#如何在不指定对象名称的前提下引用挂载脚本的对象自身
Unity同脚本多对象间距控制方案
核心问题解答
- 你无需写具体对象名,Unity中脚本挂载到哪个对象上,内置变量
transform就代表当前对象的Transform组件,gameObject就代表当前对象本身,直接使用即可。
原有代码问题修正
你原来的代码存在以下问题:
- Start方法内重复声明了局部变量
distance,覆盖了类成员变量 chaos - distance += distances是非法语法,赋值运算符左侧不能是运算表达式- 缺少根据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
相关产品推荐
相关产品推荐

