【问题标题】:How to Instantiate a game object at the same position where the previous is destroyed如何在前一个被破坏的相同位置实例化一个游戏对象
【发布时间】:2018-11-28 09:23:09
【问题描述】:

我有多个空游戏对象作为生成游戏对象的生成点,如果要测试的条件为真,我希望销毁生成的游戏对象并在同一生成点上实例化一个新对象。

我有 2 个单独的脚本,一个附加在生成点对象上,另一个用于包含条件的游戏管理器。

游戏管理器脚本的条件:

public void checkword()
 {
     wordBuilded = displayer.text.ToString();

     LetterTiles[] tiles = FindObjectsOfType<LetterTiles>();

     foreach (LetterTiles item in tiles)
     {

         if (txtContents.Contains(wordBuilded))
         {
             if (item.gameObject.CompareTag("clicked"))
             {
                 Destroy(item.gameObject);
                 FindObjectOfType<letterSpawner>().refresh();
             }                                                     
         }

         else
         {
             if (item.gameObject.CompareTag("clicked"))
                 item.GetComponent<Button>().interactable = true;
         }

     }
 }

附加到实例化对象的生成点对象的脚本

using UnityEngine;

public class letterSpawner : MonoBehaviour {

     public GameObject[] letterTiles;
     GameObject tiles;
     Vector3 scale = new Vector3(0.8f, 0.8f, 0);

     void Start () {
         refresh();
     }

     public void refresh()
     {
         int rand = Random.Range(0, letterTiles.Length);
         tiles = Instantiate(letterTiles[rand], transform.position, Quaternion.identity);
         tiles.transform.SetParent(gameObject.transform);
         tiles.transform.localScale = scale;

     }
 }

【问题讨论】:

  • 好吧,例如,如果 object1 是被销毁的对象,而 object2 是您从 object1 被销毁的那一点开始创建的对象,那么我建议您将所有详细信息提供给 1 到 2 并且销毁 1 或不销毁其中一个并进行必要的更改以继续前进!

标签: c# visual-studio unity3d


【解决方案1】:

您可以通过对您拥有的任何内容进行小的更改来做到这一点,首先将您的刷新功能更改为这个

public void refresh(Vector3 position)
 {
     int rand = Random.Range(0, letterTiles.Length);
     tiles = Instantiate(letterTiles[rand], position, Quaternion.identity);
     tiles.transform.SetParent(gameObject.transform);
     tiles.transform.localScale = scale;

 }

也在同一个文件中添加另一个默认值,使用您拥有的默认值调用它

public void refresh()
 {
     refresh(transform.position);
 }

然后在你的 checkword 函数中

if (item.gameObject.CompareTag("clicked"))
{
    Vector3 pos = item.transform.position;
    Destroy(item.gameObject);
    FindObjectOfType<letterSpawner>().refresh(pos);
}

应该为你做的

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-10-17
    • 2020-07-02
    • 1970-01-01
    • 1970-01-01
    • 2020-01-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多