【问题标题】:Make gameObject child of the gameObject which is at the position of the button使 gameObject 成为按钮位置的 gameObject 的子对象
【发布时间】:2017-09-10 21:48:55
【问题描述】:

很难解释我的问题。我有 16 个图块,它们之间有 9 个按钮:

每个按钮后面都有一个白色的游戏对象,它位于 4 个图块的中心。如果按下按钮,4 个图块应围绕白色游戏对象旋转。 我认为最好的方法是当您单击一个按钮时,该按钮周围的 4 个图块应该成为该按钮后面的白色游戏对象的子对象,因此它们可以以 4 旋转。 如何做到这一点,当您按下按钮时,该按钮周围的图块将成为该按钮后面的白色游戏对象的子项?

【问题讨论】:

    标签: c# unity3d


    【解决方案1】:

    有几种方法可以做到这一点,但它或多或少可以分解为您提到的几个步骤。此方法假定您有一个脚本附加到每个白色对象。

    您首先需要生成一个白色物体正在触摸的物体列表。这可以使用 OnCollisionEnter/OnTriggerEnter 或通过执行距离检查来完成。下面是在标记每个彩色方块后如何使用 OnTriggerEnter 的示例。然后您可以简单地遍历列表中的 4 个对象并将它们的父对象分配给白色方块:

    void SquareClicked()
    {
        foreach(GameObject square in NeighborList)
        {
            square.transform.parent = gameObject.Transform;
        }
        DoRotate(); //this is where you do the rotation of the parent object.
    }
    
    List<GameObject> NeighborList = new List<GameObject>();
    void OnTriggerEnter2D(Collider2D col)
    {
        if (col.tag == "coloredsquare") //tag each square with this tag.
        {
             NeighborList.Add(col.gameObject);
        }
    }
    

    【讨论】:

    • 感谢您的回复。我想我做错了什么,因为什么都没发生。 - 我应该将 void SquareClicked() 添加到按钮吗? (我通过将函数放在 Start() 中对其进行测试) - 白色游戏对象有一个盒子碰撞器,选择了触发器,正方形有一个盒子碰撞器,没有触发器 - 我将此脚本添加到所有白色游戏对象 - 我添加了标签。我做错了吗?
    • 是的,它不仅仅是这段代码。您将使用任何方法调用 SquareClicked 来检测对游戏对象的点击。如果有一个按钮组件附加到这个白色方块,你可以使用onClick listener 来调用这个函数。
    • 但复杂的是按钮组件不在白色的游戏对象上,而是在它前面的按钮上。
    • 白色对象是按钮的子对象吗?您将需要某种可以浏览的关系。
    • 目前,正方形和白色游戏对象都是同一个父对象的子对象,因此具有相同的比例等。按钮是另一个父对象的子对象。
    猜你喜欢
    • 1970-01-01
    • 2017-04-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-02-22
    • 1970-01-01
    相关资源
    最近更新 更多