简介

最近开始学习unity3D建模,在Unity 3D脚本应用实例演示(三个实例)上学习了一个案例设计,C# 程序如下:

using UnityEngine;
using System.Collections;
public class MyScript:MonoBehaviour
{
    //声明4个变量
    public GameObject myCube;
    public int transSpeed=100;
    public float rotaSpeed=10.5f;
    public float scale=3;
    void OnGUI(){
        if(GUILayout.Button("移动立方体")){
            myCube.transform.Translate(Vector3.forward*transSpeed*Time.deltaTime, Space.World);
        }
        if(GUILayout.Button("旋转立方体")){
            myCube.transform.Rotate(Vector3.up*rotaSpeed, Space.World);
        }
        if(GUILayout.Button("缩放立方体")){
            myCube.transform.localScale=new Vector3(scale, scale, scale);
        }
    }
}

该脚本中声明了4个变量,且都是public修饰。

public 修饰的变量可以作为属性出现在组件下。
比如说,C# 中出现的四个变量:myCube,transSpeed,rotaSpeed,scale;都在Inspector中出现了。

在这里插入图片描述

问题

点击运行,会在Game中显示游戏窗口及GUI交互界面。但是点击移动立方体或者任何一个选项时,console都都提示出错。
在这里插入图片描述

报错:UnassignedReferenceException: The variable myCube of MyScript has not been assigned. You probably need to assign the myCube variable of the MyScript script in the inspector. MyScript.OnGUI ()

解决办法

从网上搜索了报错的意思:尚未分配MyScript的变量myCube。您可能需要在检查器中为MyScript脚本分配myCube变量。

介个,作为unity小白,一开始搜索了很多解决办法,但是都没有成功的。

然后我就重新理解了一下字面意思,意思是,在Inspector中没有给mycube分配对象。

然后我将My Cube变量与Trans Speed这个public变量做对比,发现确实是,Trans Speed变量有赋值100,但是My Cube并没有定义对象。所以只需要在My Cube选项的右侧选择对应的目标即可。

操作为:

  1. 点击My Cube右侧这个按键

在这里插入图片描述
2. 选项对象

在这里插入图片描述
然后My Script脚本就变成了这样:

在这里插入图片描述
好了,再点击运行→移动立方体,就能正常运行了。

Logo

旨在为数千万中国开发者提供一个无缝且高效的云端环境,以支持学习、使用和贡献开源项目。

更多推荐