【问题标题】:How to reference a GameObject's position in a prefab script in Unity如何在 Unity 的预制脚本中引用游戏对象的位置
【发布时间】:2025-12-25 00:55:12
【问题描述】:

我刚开始使用 Unity,在我的第一款游戏中,我试图让这些敌方方块追逐玩家。敌人在随机位置生成,我试图让它们向玩家立方体的位置移动。但是当我尝试引用玩家的变换时,它不会让我将它拖到顶部,有什么修复吗?

using UnityEngine;

public class enemyFollow : MonoBehaviour {
    public Transform player;
    public Rigidbody rb;
    public float movementForce;

    // Update is called once per frame
    void FixedUpdate()
    {
        if (player.position.x > transform.position.x){
            rb.AddForce(movementForce * Time.deltaTime,0,0);
        }
        if (player.position.x < transform.position.x){
            rb.AddForce(-movementForce * Time.deltaTime,0,0);
        }
        if (player.position.z > transform.position.z){
            rb.AddForce(0,0,movementForce * Time.deltaTime);
        }
        if (player.position.z < transform.position.z){
            rb.AddForce(0,0,-movementForce * Time.deltaTime);
        }
    }
 }

Unity 不允许我将玩家从游戏对象窗口拖到预制件上的脚本上。错误说“没有分配enemyFollow的变量播放器” 它不会让我分配 Player。

【问题讨论】:

  • 这个问题是关于UnityScript(一种从 Javascript 派生并为 Unity 创建的已弃用的编程语言)还是关于 C#(一种完全不同的编程语言)?对我来说它看起来像 C#,所以我删除了 [unityscript] 标签。
  • 你拖的是场景视图中的播放器对象还是播放器预制文件?

标签: c# unity3d


【解决方案1】:

您可以在 void Start() 方法中添加它:

player = GameObject.FindGameObjectWithTag("Player").GetComponent<Transform>();

【讨论】:

    【解决方案2】:

    如果我理解正确,您是在尝试将玩家分配给预制配置中的敌人。那是行不通的,因为预制件不在场景中。由于预制件可以在任何场景中实例化,因此您不能引用场景对象。您需要在游戏期间执行此操作,除非您在设置时所有敌人都已经在场景中(在这种情况下,您需要对实例化的敌人执行此操作,然后复制粘贴它)。

    您可以在 Jeff 的回答中使用FindGameObjectWithTag(),但请确保将“玩家”标签分配给玩家游戏对象或预制件。

    我推荐的另一种方法是让任何实例化敌人的东西分配他们的目标,这样你就不需要搜索带有你可能输入错误的字符串的标签,你可以只更改引用当你需要改变某事时,一个地方。

    【讨论】:

      最近更新 更多