【问题标题】:Unity Cube gameobject Transform position not changingUnity Cube游戏对象变换位置不变
【发布时间】:2016-08-18 00:10:27
【问题描述】:

我想变换底墙的位置。底墙是一个用于碰撞的 3D 立方体。这是立方体和属性的图片。

在图片的右侧,您可以看到一个名为 transform 的属性栏。我想通过脚本访问它并更改位置。这是我尝试使用的代码。

    void Start () {


    GameObject bottomWall = GameObject.Find("Bottom");
    Bottom bottomScript = bottomWall.GetComponent<Bottom>();
    bottomScript.wallPos.y = -Camera.main.orthographicSize * 1000;
    bottomWall.transform.position.Set(1000, 100, 1000);
    bottomWall.GetComponent<Transform>().position.Set(100, 100, 100);
}

当我这样做时没有任何反应。我似乎做不到,非常感谢任何帮助。

【问题讨论】:

    标签: c# unity3d scripting


    【解决方案1】:

    Transform.position 返回Vector3副本,而不是引用。所以修改副本不会影响原来的Vector3位置。

    Replace bottomWall.transform.position.Set(1000, 100, 1000);
    

    bottomWall.transform.position = new Vector3(100, 100, 100);
    

    与您的问题无关

    由于 BottomWalls 的子级,最好在 Find 函数中使用 Walls/Button,因为这会告诉 Unity 寻找 Bottom 仅在 Walls 层次结构下的游戏对象。当场景中有太多游戏对象时,这会很快。

    所以使用GameObject bottomWall = GameObject.Find("Walls/Bottom");

    【讨论】:

    • @Luke 欢迎您。我更新了关于在子对象中查找 GameObject 的答案。这对您将来会有帮助。
    • 为了进一步完成答案,它不起作用,因为统一 vector3 是一个结构,结构是值类型 - 认为它已经是数据,而不是对内存持有的引用它。更多见解在这里。 msdn.microsoft.com/en-us/library/t63sy5hs.aspx 这还有其他效果,例如 vector3 永远不能为空 - 只有引用类型可以为空。
    【解决方案2】:

    它是另一个游戏对象的子对象吗?可以试试gameObject.transform.localPosition

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-07-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多