首页 > 解决方案 > 选择枚举时显示游戏对象的 Vector3

问题描述

实例化时是否可以在检查器中显示游戏对象的位置以便可以更改它?我正在选择要在场景中实例化的游戏对象(通过枚举),如何在检查器中声明以显示脚本中的位置,以便用户在实例化后可以自由更改它?

public enum GOs {

        One,
        Two

    }
    public GOs go= GOs.Two;

 public void CreateGameObject () {

        if (go== GOs.One) {
            GameObject One_Prefab = UnityEditor.AssetDatabase.LoadAssetAtPath ("Resources/1.prefab", typeof (GameObject)) as GameObject;
            GameObject One = (GameObject) GameObject.Instantiate (One_Prefab, Vector3.zero, Quaternion.identity);
            One.name = One_Prefab.name;
            One.transform.parent = this.transform;
            One.GetComponent<RectTransform>().localPosition = new Vector3 (0, 0, 0); //declare this as public so that it can be changed by the user
            
        }

标签: c#unity3d

解决方案


如果您的主脚本处理实例化游戏对象的位置,您可以执行以下操作:游戏对象一;Vector3 一个位置;

private void Update()
{
    One.transform.position = OnePosition;
}

不要忘记设置 One 游戏对象:

public void CreateGameObject ()
{
    if (go== GOs.One) {
    GameObject One_Prefab = UnityEditor.AssetDatabase.LoadAssetAtPath ("Resources/1.prefab", typeof (GameObject)) as GameObject;
            
    One = (GameObject) GameObject.Instantiate (One_Prefab, Vector3.zero, Quaternion.identity);
    One.name = One_Prefab.name;
    One.transform.parent = this.transform;
    One.GetComponent<RectTransform>().localPosition = new Vector3 (0, 0, 0); //declare this as public so that it can be changed by the user       
}

如果您的脚本不操作您的实例化游戏对象,您可以在场景层次结构面板上找到新的实例化游戏对象,单击它并修改变换位置。

另一种解决方案是创建一个自定义检查器来处理 Vector 字段的更改,并在字段更改时设置实例化游戏对象的位置。它删除了更新位置属性。如果这是您想要的,您可以查看文档


推荐阅读