Unity:获取最后一次克隆实例化的位置object
Unity: Get the position of the last cloned instantiated object
我正在尝试使用 Unity 为 Android 创建一个无限大的场地。尝试使用 object 池来实现地面重复,但事实证明有点棘手。
我可以沿着 x 轴实例化和创建克隆。
我想要实现的是获取上次克隆的 object 的位置并将其设置为新位置并在新位置创建新的 object 并再次实例化。
我需要使用转换 parent 吗?
我的做法正确吗?
下面的代码。
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);
}
}
}
}
对于实例化,它应该可以工作,但不是您想要的方式。如果你想拥有无限的地面,你应该根据玩家的位置添加地面
- 如果玩家向前移动,在他之前实例化新的地面并且
摧毁他身后的旧地。
- 如果玩家向后移动,在他身后实例化新的地面,然后
摧毁他面前的旧地
如果您想更改密码。我会:
- 更改函数名称,例如 (InstantiateFloor),因为您想在开始时多次调用它
- 根据玩家位置调用函数(如上所述)
- 只需实例化 1 个大地板(而不是 10 个较小的)并占据它的位置
为什么不使用实例化返回的游戏对象?
GameObject newObject = Instantiate(ground1Obj, new Vector3(i * 100f, 0, 0), Quaternion.identity);
count++;
if (count == 10)
{
lastPosition = newObject .position;
Debug.Log("Last Position: " + lastPosition);
}
我正在尝试使用 Unity 为 Android 创建一个无限大的场地。尝试使用 object 池来实现地面重复,但事实证明有点棘手。 我可以沿着 x 轴实例化和创建克隆。
我想要实现的是获取上次克隆的 object 的位置并将其设置为新位置并在新位置创建新的 object 并再次实例化。
我需要使用转换 parent 吗? 我的做法正确吗?
下面的代码。
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);
}
}
}
}
对于实例化,它应该可以工作,但不是您想要的方式。如果你想拥有无限的地面,你应该根据玩家的位置添加地面
- 如果玩家向前移动,在他之前实例化新的地面并且 摧毁他身后的旧地。
- 如果玩家向后移动,在他身后实例化新的地面,然后 摧毁他面前的旧地
如果您想更改密码。我会:
- 更改函数名称,例如 (InstantiateFloor),因为您想在开始时多次调用它
- 根据玩家位置调用函数(如上所述)
- 只需实例化 1 个大地板(而不是 10 个较小的)并占据它的位置
为什么不使用实例化返回的游戏对象?
GameObject newObject = Instantiate(ground1Obj, new Vector3(i * 100f, 0, 0), Quaternion.identity);
count++;
if (count == 10)
{
lastPosition = newObject .position;
Debug.Log("Last Position: " + lastPosition);
}