我目前正在制作游戏原型,这个游戏需要 产生一些我称之为“星星”的GameObjects,一切都很好 实例化,但当我尝试删除它们时,有很多 在它周围不起作用,我试图把所有实例化 GameObjects在列表中然后从中删除最后一个对象 新的实例化了。从代码中可以看出,当3 产生的对象应该从头开始删除一个脚本 并在同一时间产生一个新的。
现在,问题是我不知道我在这里缺少什么,代码不起作用,我不知道为什么。请帮我。谢谢!
以下是代码:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class SpawnStar : MonoBehaviour {
public float addedSpeed = -200f;
private GameObject spawned;
private float randomX;
public GameObject starToSpawn;
private List<GameObject> activeGO;
void Start ()
{
activeGO = new List<GameObject> ();
Invoke ("InstantiateStar", 2f);
}
// Update is called once per frame
void FixedUpdate ()
{
GetComponent<Rigidbody>().AddForce( new Vector3( 0f, addedSpeed, 0f));
}
void InstantiateStar ()
{
randomX = Random.Range (-3f, 3f);
GameObject GO;
GO = Instantiate (starToSpawn, new Vector3(randomX, 5f, 0f), transform.rotation) as GameObject;
activeGO.Add (GO);
if ( activeGO[0].transform.position.y < -2f)
{
DeleteActiveGO ();
}
}
void DeleteActiveGO ()
{
Destroy (activeGO [0]);
activeGO.RemoveAt (0);
}
}
我回来了。问题是我试图在一个脚本中做两件事...短篇小说:为了解决问题,我在场景中创建了一个空对象,将我的脚本分成两个独立的脚本,一个使得衍生对象移动得更快,一个产生对象的东西,我将移动对象的脚本放到将要生成的对象上,另一个脚本放在空的GameObject上,它将产生“星星”,它就像一个魅力。 谢谢你的所有答案!
这是最终的脚本:
产卵脚本:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class SpawnStars : MonoBehaviour {
public GameObject[] starsToSpawn;
private List<GameObject> spawnedStars;
private float randomX;
void Start ()
{
spawnedStars = new List<GameObject> ();
InvokeRepeating ("SpawnStar", 0f, 3f);
}
void SpawnStar ()
{
randomX = Random.Range (-3, 3);
GameObject GO;
GO = Instantiate ( starsToSpawn[0], new Vector3 (randomX, 5f, 0f), transform.rotation);
spawnedStars.Add (GO);
if (spawnedStars.Count > 2 )
{
Destroy (spawnedStars [0]);
spawnedStars.RemoveAt (0);
}
}
}
移动脚本:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class MoveStar : MonoBehaviour {
public float acceleration = -5f;
void FixedUpdate ()
{
GetComponent<Rigidbody>().AddForce( new Vector3( 0f, acceleration,0f));
}
}
答案 0 :(得分:0)
@Noobie :您要执行的操作称为对象池。你的实现是不正确的。
最好学习相同的知识并实施。
在此处阅读更多内容:https://unity3d.com/learn/tutorials/topics/scripting/object-pooling
答案 1 :(得分:0)
您的代码Invoke ("InstantiateStar", 2f);
只能拨打一次。
您可以更改为InvokeRepeating("InstantiateStar",2f,2f );
代码GetComponent<Rigidbody>().AddForce( new Vector3( 0f, addedSpeed, 0f));
似乎应该附加到Generate Gameobject。
另请注意您的删除条件。
祝你好运。