我对 Unity c# 继承感到困惑

时间:2021-06-28 03:10:21

标签: c# unity3d

我有两个简单的脚本(ParentChild),它们都在同一个游戏对象(“敌人”)上。敌人试图找到游戏对象“英雄”, 它设法从三个地方这样做,但从第四个地方开始它只说“空”。

我做错了什么?

父脚本:

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
    }
}

1 个答案:

答案 0 :(得分:2)

您认为正在发生的是 Child 脚本正在访问 GameObject 脚本上的 "hero" Parent - 这不是继承的工作原理。

Child 脚本实际上是在自身上访问“英雄”GameObject。这意味着不只有一个“英雄”GameObject。有两种,一种用于 Parent 脚本,一种用于 Child 脚本。

Child 脚本视为 Parent 脚本加上附加功能。 通常我们不会将 ChildParent 都放在同一个 GameObject 上,因为它是多余的。您仍然可以通过 Child 获得 ParentGetComponent<Parent>()

您的脚本失败的原因是第一个 Parent 脚本从不调用 FindHero() 函数。但是第二个 Parent (Child) 脚本可以。

我建议您从游戏对象中删除 Parent 脚本,一切都会正常进行。