Unity无法访问另一个类的实例c#

时间:2017-08-18 22:08:54

标签: c# oop unity3d

第一堂课

public class ArmyManMovement : MonoBehaviour {
    public Animator anim;
    TextInput check;


    // Use this for initialization
    void Start () {
        anim = GetComponent<Animator> ();

    }

第二课

public class TextInput : MonoBehaviour 
{

    ArmyManMovement check;
    void Awake()
    {
        check = GetComponent<ArmyManMovement> ();
        //check.anim.SetBool ("Right", false);
    }
    //public  IEnumerable<string> RemoveWhitespace(string input)
    //{
        //return new string(input.ToCharArray().Where(c => !Char.IsWhiteSpace(c)).ToArray());
    //}

    void AcceptStringInput(string userInput)
    {
        userInput = userInput.ToLower ();
        if (userInput == "Open door") {
            check.anim.SetBool("Right",true);

        }

}

我不知道出了什么问题。我把军人的剧本附在文字输入的同一个检查员身上。我不知道出了什么问题,但价值没有改变,我不能在军人的脚本中访问动画师。它会在控制台中保持错误的原因(对象参考不设置为对象的实例)

1 个答案:

答案 0 :(得分:2)

如果ArmyManMovement附加到TextInput脚本附加到的相同GameObject上,当您从null执行GetComponent<ArmyManMovement> ();时,它应该从不 TextInput TextInput脚本。

这里确实存在两个问题:

1 ArmyManMovement脚本也附加到另一个GameObject。查看你的场景,确保它不是。如果它错误地附加到另一个没有附加GetComponent<ArmyManMovement> ();的GameObject,null将返回check,这意味着null变量将是{{} 1}}。请参阅this了解如何找到并修复它。

2 。未在编辑器中分配anim变量。

首次测试:Debug.Log(check);

如果不是null则测试:Debug.Log(check.anim);

如果是null,则将动画师拖动到ArmyManMovement脚本中的动画插槽。

请注意,如果Debug.Log(check);null,您需要返回#1 并先修复此问题。希望您现在知道如何解决未来的Unity null问题。