对象未正确合并
Objects not pooling correctly
我在合并一些对象时遇到问题。我查看了我们在 class 中获得的用于重新创建场景但不同的起始文件,但我没有得到正确的结果而且我似乎无法弄清楚:/
我有的是:
具有 3 个子对象池(ground、dew、corona)的环境。 ground 有 3 个 child(飞机),dew 和 corona 都有 10 个 child(模型)。
我想做的是将数组中的第一个对象移动到数组的最后一个位置,并更改 z 位置以在玩家 运行 超过它后将其向前移动。
一旦我的角色经过某个位置,我的地面物体就会正确地向前移动,但是露水和日冕却不会,我不明白为什么。
这是我正在使用的代码:
public class Environment : MonoBehaviour
{
List<Transform> dews = new List<Transform>();
List<Transform> coronas = new List<Transform>();
List<Transform> grounds = new List<Transform>();
Transform player;
int propsCount = 0;
int groundCount = 0;
// Use this for initialization
void Start()
{
player = GameObject.Find("Player").transform;
dews = GameObject.Find("DewPool").GetComponentsInChildren<Transform>().ToList();
coronas = GameObject.Find("CoronaPool").GetComponentsInChildren<Transform>().ToList();
grounds = GameObject.Find("GroundPool").GetComponentsInChildren<Transform>().ToList();
dews.RemoveAt (0);
coronas.RemoveAt (0);
grounds.RemoveAt (0);
}
// Update is called once per frame
void Update()
{
// Voeg hier code toe voor Object Pooling!
Vector3 nieuwePos;
if (player.transform.position.z > dews[0].transform.position.z + 5)
{
dews[0].transform.position = nieuwePos = new Vector3(dews[0].transform.position.x, dews[0].transform.position.y, dews[0].transform.position.z + 50);
dews.Add(dews[0]);
dews.RemoveAt(0);
}
if (player.transform.position.z > coronas[0].transform.position.z + 5)
{
coronas[0].transform.position = nieuwePos = new Vector3(coronas[0].transform.position.x, coronas[0].transform.position.y, coronas[0].transform.position.z + 55);
coronas.Add(coronas[0]);
coronas.RemoveAt(0);
}
if (player.transform.position.z > grounds[0].transform.position.z + 40)
{
grounds[0].transform.position = nieuwePos = new Vector3(grounds[0].transform.position.x, grounds[0].transform.position.y, grounds[0].transform.position.z + 120);
grounds.Add(grounds[0]);
grounds.RemoveAt(0);
}
}
}
所有包含对象的池都位于 0,dews 和 coronas 分别从 Z-index 7.5 和 10 开始,副本总是 5 Z 更远。
玩家是一个空的游戏对象,位于 0 - 0 - 4.4,包含模型 Ethan。
第一个露水和电晕被正确地向后推,其余的非常有问题。
如果有人能提供帮助,将不胜感激,在此先感谢!
通过添加
修复了它
for (int i = dews.Count-1; i > 0; i-=2) {
dews.RemoveAt (i);
}
for (int i = coronas.Count-1; i > 0; i-=2) {
coronas.RemoveAt (i);
}
进入我的 start() 函数,我的 objects 有另一个 child 而我的 objects 没有。
可能不是最好的解决方案,但现在我可以接受:-)
我在合并一些对象时遇到问题。我查看了我们在 class 中获得的用于重新创建场景但不同的起始文件,但我没有得到正确的结果而且我似乎无法弄清楚:/
我有的是:
具有 3 个子对象池(ground、dew、corona)的环境。 ground 有 3 个 child(飞机),dew 和 corona 都有 10 个 child(模型)。
我想做的是将数组中的第一个对象移动到数组的最后一个位置,并更改 z 位置以在玩家 运行 超过它后将其向前移动。
一旦我的角色经过某个位置,我的地面物体就会正确地向前移动,但是露水和日冕却不会,我不明白为什么。
这是我正在使用的代码:
public class Environment : MonoBehaviour
{
List<Transform> dews = new List<Transform>();
List<Transform> coronas = new List<Transform>();
List<Transform> grounds = new List<Transform>();
Transform player;
int propsCount = 0;
int groundCount = 0;
// Use this for initialization
void Start()
{
player = GameObject.Find("Player").transform;
dews = GameObject.Find("DewPool").GetComponentsInChildren<Transform>().ToList();
coronas = GameObject.Find("CoronaPool").GetComponentsInChildren<Transform>().ToList();
grounds = GameObject.Find("GroundPool").GetComponentsInChildren<Transform>().ToList();
dews.RemoveAt (0);
coronas.RemoveAt (0);
grounds.RemoveAt (0);
}
// Update is called once per frame
void Update()
{
// Voeg hier code toe voor Object Pooling!
Vector3 nieuwePos;
if (player.transform.position.z > dews[0].transform.position.z + 5)
{
dews[0].transform.position = nieuwePos = new Vector3(dews[0].transform.position.x, dews[0].transform.position.y, dews[0].transform.position.z + 50);
dews.Add(dews[0]);
dews.RemoveAt(0);
}
if (player.transform.position.z > coronas[0].transform.position.z + 5)
{
coronas[0].transform.position = nieuwePos = new Vector3(coronas[0].transform.position.x, coronas[0].transform.position.y, coronas[0].transform.position.z + 55);
coronas.Add(coronas[0]);
coronas.RemoveAt(0);
}
if (player.transform.position.z > grounds[0].transform.position.z + 40)
{
grounds[0].transform.position = nieuwePos = new Vector3(grounds[0].transform.position.x, grounds[0].transform.position.y, grounds[0].transform.position.z + 120);
grounds.Add(grounds[0]);
grounds.RemoveAt(0);
}
}
}
所有包含对象的池都位于 0,dews 和 coronas 分别从 Z-index 7.5 和 10 开始,副本总是 5 Z 更远。
玩家是一个空的游戏对象,位于 0 - 0 - 4.4,包含模型 Ethan。
第一个露水和电晕被正确地向后推,其余的非常有问题。
如果有人能提供帮助,将不胜感激,在此先感谢!
通过添加
修复了它for (int i = dews.Count-1; i > 0; i-=2) {
dews.RemoveAt (i);
}
for (int i = coronas.Count-1; i > 0; i-=2) {
coronas.RemoveAt (i);
}
进入我的 start() 函数,我的 objects 有另一个 child 而我的 objects 没有。 可能不是最好的解决方案,但现在我可以接受:-)