C# Unity Engine destroy() 子类
C# Unity Engine destroy() subclass
你好,我有这个代码:
public abstract class Test : MonoBehaviour
{
public abstract void OnStart();
public abstract void OnUpdate();
private void Start()
{
OnStart();
}
private void Update()
{
if (Input.GetKeyDown(KeyCode.X))
{
Destroy(this);
}
OnUpdate()
}
}
然后我有这个:
public class SecondTest : Test
{
public override void OnStart()
{
}
public override void OnUpdate()
{
Writter.Log("Running");
}
}
然而,每当我按 X 时,我的作者一直在记录,似乎 "Test" 的实例被破坏但我的 "SecondTest" 没有被破坏,有什么办法可以解决这个问题吗?谢谢!
*OP 解释的目的是在 Parent 存在时导致 Children 被销毁。
- 该解决方案可能最好由“(测试)经理”或 'LevelManager' 处理。
您可以手动将 Children 或预制件分配给您的 (Test)Manager,或者让 (Test)Manager 实例化 child 预制件。
GameObject child = Instantiate(prefab);
child.transform.SetParent(gameObject.transform); //set the child's parent to the Manager
然后在您的(测试)管理器中
private void Update()
{
if (Input.GetKeyDown(KeyCode.X))
{
for(int i=0;i<gameObject.transform.childCount;i++)
Destroy(gameObject.transform.GetChild(i).gameObject);
}
}
这只是一个粗略的建议,可能有更好的方法来做到这一点,例如在经理中保留一些对 children 的引用而不是养育。
你好,我有这个代码:
public abstract class Test : MonoBehaviour
{
public abstract void OnStart();
public abstract void OnUpdate();
private void Start()
{
OnStart();
}
private void Update()
{
if (Input.GetKeyDown(KeyCode.X))
{
Destroy(this);
}
OnUpdate()
}
}
然后我有这个:
public class SecondTest : Test
{
public override void OnStart()
{
}
public override void OnUpdate()
{
Writter.Log("Running");
}
}
然而,每当我按 X 时,我的作者一直在记录,似乎 "Test" 的实例被破坏但我的 "SecondTest" 没有被破坏,有什么办法可以解决这个问题吗?谢谢!
*OP 解释的目的是在 Parent 存在时导致 Children 被销毁。
- 该解决方案可能最好由“(测试)经理”或 'LevelManager' 处理。
您可以手动将 Children 或预制件分配给您的 (Test)Manager,或者让 (Test)Manager 实例化 child 预制件。
GameObject child = Instantiate(prefab); child.transform.SetParent(gameObject.transform); //set the child's parent to the Manager
然后在您的(测试)管理器中
private void Update() { if (Input.GetKeyDown(KeyCode.X)) { for(int i=0;i<gameObject.transform.childCount;i++) Destroy(gameObject.transform.GetChild(i).gameObject); } }
这只是一个粗略的建议,可能有更好的方法来做到这一点,例如在经理中保留一些对 children 的引用而不是养育。