我有两个简单的脚本(Parent
和 Child
),它们都在同一个游戏对象(“敌人”)上。敌人试图找到游戏对象“英雄”,
它设法从三个地方这样做,但从第四个地方开始它只说“空”。
我做错了什么?
父脚本:
using UnityEngine;
public class Parent : MonoBehaviour
{
private GameObject hero;
protected GameObject FindHero()
{
hero = GameObject.Find("Hero");
Debug.Log(hero); //Hero
return hero;
}
private void Update()
{
Debug.Log(hero); //Null
}
}
子脚本:
using UnityEngine;
public class Child : Parent
{
private void Update()
{
Debug.Log(FindHero()); //Hero
Debug.Log(GameObject.Find("Hero")); //Hero
}
}
答案 0 :(得分:2)
您认为正在发生的是 Child
脚本正在访问 GameObject
脚本上的 "hero" Parent
- 这不是继承的工作原理。
Child
脚本实际上是在自身上访问“英雄”GameObject
。这意味着不只有一个“英雄”GameObject
。有两种,一种用于 Parent
脚本,一种用于 Child
脚本。
将 Child
脚本视为 Parent
脚本加上附加功能。
通常我们不会将 Child
和 Parent
都放在同一个 GameObject 上,因为它是多余的。您仍然可以通过 Child
获得 Parent
和 GetComponent<Parent>()
。
您的脚本失败的原因是第一个 Parent
脚本从不调用 FindHero()
函数。但是第二个 Parent (Child)
脚本可以。
我建议您从游戏对象中删除 Parent
脚本,一切都会正常进行。