Unity预制数组实例化和销毁
Unity prefab array instantiate and destroy
我在我的 Unity 项目中遇到了一个小问题,但找不到合适的帮助或解决方法。我被困在我有一组预制游戏对象的地方,我试图实例化索引 1 游戏对象,当它被破坏时实例化下一个索引。这就是我的做法。我有两个脚本:一个用于实例化,另一个用于销毁它。
脚本 1:
public class GameObjectsArray : MonoBehaviour {
public static GameObjectsArray Instance { get; set; }
public GameObject[] Objects;
public int i=0;
// Use this for initialization
void Start()
{
InstiatingMethod();
//Instantiate(Objects[i]);
}
public void InstiatingMethod()
{
Instantiate(Objects[i]);
}
}
脚本 2:
public class CheckDestroy : MonoBehaviour {
//public GameObject[] Objects;
//int i;
// Use this for initialization
void Start () {
Debug.Log("executed");
//Objects = GameObject.FindGameObjectsWithTag("Player");
//OnMouseDown();
//Instantiate(Objects[i], transform.position, transform.rotation);
}
// Update is called once per frame
void Update () {
if (Input.GetMouseButtonDown(0))
{
RaycastHit hit;
Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition);
if (Physics.Raycast(ray, out hit))
{
BoxCollider boxCollider = hit.collider as BoxCollider;
if (boxCollider != null)
{
GameObjectsArray.Instance.i++;
GameObjectsArray.Instance.InstiatingMethod();
Destroy(boxCollider.gameObject);
}
}
}
}
}
所以我创建了一个非常快速的项目来做出很好的回应:
Scene Image
在场景中,我们将有一个空的游戏对象,其中将包含我们调用的脚本 "GameManager",基本上这个脚本会做所有事情,将您的逻辑放在一个脚本中更符合逻辑。
public GameObject[] GameObjects;
private int _targetIndex = -1;
private RaycastHit _hit;
private void Start()
{
InstantiateNextGameObject();
}
public void InstantiateNextGameObject()
{
//if the index is pointing at the last game object in the array, init the index to -1
if (_targetIndex == GameObjects.Length - 1)
_targetIndex = -1;
Instantiate(GameObjects[++_targetIndex]);
}
private void Update()
{
if (Input.GetKeyDown(KeyCode.Mouse0))
{
Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition);
if (Physics.Raycast(ray, out _hit))
{
BoxCollider boxCollider = _hit.collider as BoxCollider;
if (boxCollider != null)
{
InstantiateNextGameObject();
Destroy(boxCollider.gameObject);
}
}
}
}
我们将有一个游戏对象数组,其后是从 -1 开始的 targetIndex。
函数 InstantiateNextGameObject() 将简单地递增 targetIndex,然后从数组中实例化一个游戏对象(++targetIndex 第一次为 0,第二次为 1,依此类推)。我们还必须检查 targetIndex 是否到达数组的末尾,将其放回 -1。
然后基本上就是你在更新中所做的,当你点击一个游戏对象时,实例化下一个并销毁当前的。
最后,你会得到这样的东西:
https://ayoub-gharbi.org/youba_docs/Whosebug/Whosebug01.mp4
有什么不明白的可以随时问我:)
编码愉快!
我在我的 Unity 项目中遇到了一个小问题,但找不到合适的帮助或解决方法。我被困在我有一组预制游戏对象的地方,我试图实例化索引 1 游戏对象,当它被破坏时实例化下一个索引。这就是我的做法。我有两个脚本:一个用于实例化,另一个用于销毁它。 脚本 1:
public class GameObjectsArray : MonoBehaviour {
public static GameObjectsArray Instance { get; set; }
public GameObject[] Objects;
public int i=0;
// Use this for initialization
void Start()
{
InstiatingMethod();
//Instantiate(Objects[i]);
}
public void InstiatingMethod()
{
Instantiate(Objects[i]);
}
}
脚本 2:
public class CheckDestroy : MonoBehaviour {
//public GameObject[] Objects;
//int i;
// Use this for initialization
void Start () {
Debug.Log("executed");
//Objects = GameObject.FindGameObjectsWithTag("Player");
//OnMouseDown();
//Instantiate(Objects[i], transform.position, transform.rotation);
}
// Update is called once per frame
void Update () {
if (Input.GetMouseButtonDown(0))
{
RaycastHit hit;
Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition);
if (Physics.Raycast(ray, out hit))
{
BoxCollider boxCollider = hit.collider as BoxCollider;
if (boxCollider != null)
{
GameObjectsArray.Instance.i++;
GameObjectsArray.Instance.InstiatingMethod();
Destroy(boxCollider.gameObject);
}
}
}
}
}
所以我创建了一个非常快速的项目来做出很好的回应:
Scene Image
在场景中,我们将有一个空的游戏对象,其中将包含我们调用的脚本 "GameManager",基本上这个脚本会做所有事情,将您的逻辑放在一个脚本中更符合逻辑。
public GameObject[] GameObjects;
private int _targetIndex = -1;
private RaycastHit _hit;
private void Start()
{
InstantiateNextGameObject();
}
public void InstantiateNextGameObject()
{
//if the index is pointing at the last game object in the array, init the index to -1
if (_targetIndex == GameObjects.Length - 1)
_targetIndex = -1;
Instantiate(GameObjects[++_targetIndex]);
}
private void Update()
{
if (Input.GetKeyDown(KeyCode.Mouse0))
{
Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition);
if (Physics.Raycast(ray, out _hit))
{
BoxCollider boxCollider = _hit.collider as BoxCollider;
if (boxCollider != null)
{
InstantiateNextGameObject();
Destroy(boxCollider.gameObject);
}
}
}
}
我们将有一个游戏对象数组,其后是从 -1 开始的 targetIndex。
函数 InstantiateNextGameObject() 将简单地递增 targetIndex,然后从数组中实例化一个游戏对象(++targetIndex 第一次为 0,第二次为 1,依此类推)。我们还必须检查 targetIndex 是否到达数组的末尾,将其放回 -1。
然后基本上就是你在更新中所做的,当你点击一个游戏对象时,实例化下一个并销毁当前的。
最后,你会得到这样的东西:
https://ayoub-gharbi.org/youba_docs/Whosebug/Whosebug01.mp4
有什么不明白的可以随时问我:)
编码愉快!