【问题标题】:Unity C# variable not assigned未分配 Unity C# 变量
【发布时间】:2019-05-11 09:00:32
【问题描述】:

其实挺有趣的。我的项目中有两个文本 UI。都在画布上。它们被称为 text1 和 text 2。我在脚本中对两者做了同样的事情。 text1 很好,但 text 2 似乎没有被分配,因为统一错误说:'UnassignedReferenceExeption:larrytalk 的变量 text2 尚未分配。'

这是我的代码:

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityStandardAssets.Characters.FirstPerson;

public class larrytalk : MonoBehaviour
{
[SerializeField] private GameObject FPS;
[SerializeField] public GameObject text1;
[SerializeField] public GameObject text2;
[SerializeField] private GameObject Larry;
[SerializeField] private GameObject Turm;
[SerializeField] private GameObject sockel;
CharacterController cc;

bool hold;



// Use this for initialization
void Start()
{
    cc = GetComponent<CharacterController>();
    GameObject Larry = GameObject.Find("larry1");
    GameObject Text1 = GameObject.Find("Text1");
    GameObject Text2 = GameObject.Find("Text2");
    GameObject charactercontroller = GameObject.Find("FPSController");
    GameObject Turm = GameObject.Find("mpp u3");
    GameObject sockel = GameObject.Find("beton");

    text1.SetActive(false);
    text2.SetActive(false);


}

// Update is called once per frame
void Update()
{

    if (Input.GetMouseButtonDown(0) && Input.GetMouseButton(0) && cc.height < 20 && Vector3.Distance(Larry.transform.position, this.transform.position) < 10)
    {
            text1.SetActive(true);
    }

   if( Vector3.Distance(Larry.transform.position, this.transform.position) > 20)
    {
        text1.SetActive(false);
    }
   if (Input.GetMouseButtonDown(0) && Input.GetMouseButton(0) && cc.height < 20 && Vector3.Distance(sockel.transform.position, Turm.transform.position) <10)
    {
        text2.SetActive(true);
    }
    else
    {
        text2.SetActive(false);
    }
}
}

与 text1 相关的所有内容都可以正常工作。为什么 text2 也没有?

【问题讨论】:

  • 它告诉你在启动函数发生的时候,“Text2”是找不到的。这并不意味着它接下来要做的就是制造一个……但当时它不存在。
  • 你是在序列化还是反序列化?我认为错误发生在反序列化时。当您在反序列化过程中出现错误时,这意味着您序列化时的类定义已更改。反序列化方法必须使用与序列化相同的对象。如果在序列化后添加属性,则会出现错误。
  • 如果我使用 text1 和 text2 的方式有什么不同,我会同意。那是我不明白的。
  • 错误出现在哪一行?
  • 大约一小时前修复了它,忘记了确切的错误,但这只是我的菜鸟状态,团结和基本的东西

标签: c# user-interface unity3d canvas text


【解决方案1】:

您的问题是您在 start 方法中声明了新变量,而您没有分配您在脚本顶部声明的变量。 改变

GameObject Text2 = GameObject.Find("Text2");

text2 = GameObject.Find("Text2");

对其他字段执行相同操作。

至于为什么text1不报错,大概是inspector中赋值了,text2没有。

【讨论】:

    猜你喜欢
    • 2016-03-15
    • 2015-09-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-04-05
    • 1970-01-01
    • 1970-01-01
    • 2010-11-17
    相关资源
    最近更新 更多