【问题标题】:Unity: Get the position of the last cloned instantiated objectunity:获取最后克隆的实例化对象的位置
【发布时间】:2020-10-14 23:54:28
【问题描述】:

我正在尝试使用 Unity 为 Android 创建一个无限的基础。尝试使用对象池来实现地面重复,但事实证明有点棘手。 我可以开始实例化并沿 x 轴创建克隆。

我想要实现的是获取最后一个克隆对象的位置并将其设置为新位置并在新位置创建新对象并再次实例化。

我需要使用转换父级吗? 我在这件事上走对了吗?

代码如下。

public class InfiniteGround : MonoBehaviour
{
    public Transform ground1Obj;
    private int count;
    private Vector3 lastPosition;
   
    void Start()
    {
        count = 0;
        for (int i = 0; i < 10; i++)
        {
            Instantiate(ground1Obj, new Vector3(i * 100f, 0, 0), Quaternion.identity);
            count++;
            if (count == 10)
            {
                lastPosition = ground1Obj.position;
                Debug.Log("Last Position: " + lastPosition);
            }
                
        }

    }
}

【问题讨论】:

    标签: c# unity3d clone object-pooling objectinstantiation


    【解决方案1】:

    对于实例化它应该可以工作,但不是您想要的方式。如果你想拥有无限的地面,你应该根据玩家的位置添加地面

    • 如果玩家向前移动,则在他面前实例化新的地面并 摧毁他身后的旧地。
    • 如果玩家向后移动,则在他身后实例化新地面并 摧毁他面前的旧地

    如果您想更改代码。我会:

    1. 例如更改函数名 (InstantiateFloor),因为您想在开始时多次调用它
    2. 根据玩家位置调用函数(如上所述)
    3. 只需实例化 1 个大地板(而不是 10 个较小的)并占据它的位置

    【讨论】:

    • 从0到9有10次迭代,所以必须输入if stament :)
    • 是的,现在得到它,sry mb,相应地编辑了我的答案,希望它现在有帮助:D
    • 最简单的答案往往是最好的答案,谢谢。我过度复杂了我如何去编码它。 10 只是用于测试的硬编码数字。巨大的地面将到位:)
    【解决方案2】:

    为什么不使用实例化返回的游戏对象?

    GameObject newObject = Instantiate(ground1Obj, new Vector3(i * 100f, 0, 0), Quaternion.identity);
    count++;
    
    if (count == 10)
        {
            lastPosition = newObject .position;
            Debug.Log("Last Position: " + lastPosition);
        }
    

    【讨论】:

      猜你喜欢
      • 2016-06-24
      • 1970-01-01
      • 1970-01-01
      • 2015-02-07
      • 1970-01-01
      • 2021-11-20
      • 2020-06-28
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多