(1)想要ImageTargetParent作为父物体,然后在它下边实例化一些随机的点,输出ImageTargetParent下第0个子物体的位置;
(2)点击“重置”按钮,删除ImageTargetParent下所有子物体,然后再随机实例化一些点,同样输出ImageTargetParent下第0个子物体的位置; 实现方法如下:使用Destroy进行删除,可是发现并不能得到想要的结果,点击“重置”按钮,输出的结果一样。原因就是点击“重置”按钮后此时没有销毁原有的子物体,新增加的子物体索引在原有基础上继续增加,但是在Unity面板是看不到的,因为unity在下一帧时删除了原有的子物体。
using UnityEngine; using UnityEngine.UI; public class Test : MonoBehaviour { Transform targetPrefab; public Transform targetParent; public Button resetButton; void Start() { targetPrefab = Resources.Load修改方法如下:将Destroy替换为DestroyImmediate。("prewfabs/ImageTarget1"); resetButton.onClick.AddListener(ResetTargetObj); CreateTargetObjPosition(); } void ResetTargetObj() { for (int i = 0; i < targetParent.childCount; i++) { Destroy(targetParent.GetChild(i).gameObject); } CreateTargetObjPosition(); } void CreateTargetObjPosition() { int targetNum = UnityEngine.Random.Range(3, 6); for (int i = 0; i < targetNum; i++) { Transform _tra = Instantiate(targetPrefab, targetParent); _tra.localPosition = Vector3.one * UnityEngine.Random.Range(3, 6); _tra.gameObject.SetActive(true); } Debug.Log("**1**:" + targetParent.transform.GetChild(0).localPosition); } }
注意:此时程序还是不能正常执行,因为一旦DestroyImmediate执行,那么targetParent.childCount的数量就会立刻减1 ,循环不成立;最简单的办法,将循环范围+i,查找子物体的索引变成“ 0 ”;