首页 > 解决方案 > 统一从同一命名空间中的另一个类(在克隆对象上)获取函数,c#

问题描述

我不太清楚什么是正确的解决方案,所以我希望有人可以帮助我/解释我做错了什么:

我在同一个命名空间中有两个类farmWhichAnimal.csPig.cs。我尝试从 to获取EatFood()功能。附有脚本 的对象仅在场景启动时生成,并且是 assets/prefabs 文件夹中预制件的克隆。Pig.csWhichAnimal.csPig.cs

我在做什么错/如何让EatFood()函数在WhichAnimal脚本中工作?

猪类:

using System.Collections;
using UnityEngine;
using UnityEngine.UI;

namespace Farm {
class Pig : MonoBehaviour
{

    public GameObject Balloon;
    public Text text;
    public string name;

    public void EatFood()
    {
        Balloon.SetActive(true);
        text.text = "";
    }
}

哪个动物类:

using System;
using UnityEngine;
using UnityEngine.UI;
using System.Collections.Generic;

namespace Farm {
public class WhichAnimal : MonoBehaviour {

    public Pig pig;

     public void Start() {
         pig = GetComponent<Pig>().EatFood();
     }

     public void GiveFood() {
        pig.EatFood();
     }
}

标签: c#functionclassunity3dnamespaces

解决方案


我认为问题来自:

public void Start() {
     pig = GetComponent<Pig>().EatFood();
}

GetComponent<Pig>()将尝试找到PiggameObject调用GetComponent. 这意味着您需要Pig并且WhichAnimal在相同的情况下工作gameObject

因此,第一个解决方案是获取使用此脚本Pig实例化的实例。gameObject

其他解决方案,如果有多个^^ ,则Object.FindObjectOfType<Pig>()用于查找PigFindObjectsOfType<Pig>()拥有一个数组。Pig

但要小心使用它,而不是每一帧,只用一次。它可能会消耗资源。


推荐阅读