c# - 如何在前一个被破坏的相同位置实例化一个游戏对象
问题描述
我有多个空游戏对象作为生成游戏对象的生成点,如果要测试的条件为真,我希望销毁生成的游戏对象并在同一生成点上实例化一个新对象。
我有 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;
}
}
解决方案
您可以通过对您拥有的任何内容进行小的更改来做到这一点,首先将您的刷新功能更改为这个
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);
}
那应该为你做
推荐阅读
- javascript - React 组件级别的状态管理
- angular - 浏览器导航但 url 在 e2e 测试中无法匹配
- javascript - 如何从 12 位数字的开头获取所有文本并使用正则表达式对它们进行分组
- javascript - 如何在 sequelize 中使用数据库时区获取当前日期/时间
- webgl - 不要在 webgl 中混合与自身交叉的折线
- c# - 如何检查 QueryContainer 是否具有特定属性?
- powershell - 从字符串生成唯一 ID 的最佳方法是什么?
- javascript - 移动浏览器上的缓存破坏
- sql - 获取非返回/未找到输入 sql 的列表
- netsuite - 在 Suitescript 2.0 的销售订单中保存项目行时出错