C#Unity Script无法工作

时间:2015-08-11 15:43:06

标签: c# variables unity3d compiler-errors

我是C#和Unity的新手,我正在通过视频了解它,制作了一个脚本,可以不断登录到控制台,每个日志都会自动加倍

using UnityEngine;
using System.Collections;

public class Example : MonoBehaviour {


    // Use this for initialization
    void Start () {
    int Example;
    Example = 1;
    }

    // Update is called once per frame
    void Update () {
    Example = Example * 2;
    Debug.Log(Example);
    }
}

我从逻辑上思考,因为

// Use this for initialization
void Start ()

是开始,它只运行一次,所以我在那里创建并设置了一个变量

int Example;
Example = 1;

然后使用更新每一帧的那个

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

加倍数

Example = Example * 2;
Debug.Log(Example);

但是当我将它应用到一个对象并单击播放时它会显示"所有编译器错误必须先修复才能进入播放模式"并且在错误日志中它有1个警告和2个错误:

警告:Assets / Example.cs(9,13):警告CS0219:变量`Example'已分配,但其值从未使用

错误:Assets / Example.cs(15,19):错误CS0119:表达式表示type', where a变量',value' or方法组'预计

错误:Assets / Example.cs(16,19):错误CS0119:表达式表示type', where a变量',value' or方法组'预计

我觉得这与系统无法识别"示例" 作为一个存在的变量,我从未在

之前定义它之前得到这个变量

这可能是一个非常不正常的错误,但我仍然需要从错误中吸取教训。

5 个答案:

答案 0 :(得分:2)

我的猜测是你的变量Example的范围不正确,所以你的更新方法不知道它存在。试试这个:

public class Example : MonoBehaviour {

 int example; //We declare it outside of the method so it is in the correct scope
// Use this for initialization
void Start () {
example = 1;
}

// Update is called once per frame
void Update () {
example = example * 2;
Debug.Log(example);
}
}

编辑:正如@Jon指出的那样,你的变量名与你的类名相同,这对编译器来说很困惑。使用其他名称。对于此示例,我只是将其设为小写example

答案 1 :(得分:1)

您需要阅读一些基本的C#书籍并调查变量范围。 另外C#关心case,所以你调用int就像类一样,编译器不知道该怎么做。

using UnityEngine;
using System.Collections;

public class Example : MonoBehaviour {
    public int example;

    // Use this for initialization
    void Start()
    {        
        example = 1;
    }

    // Update is called once per frame
    void Update()
    {
        example = example * 2;
        Debug.Log(example);
    }
}

Unity网页有很多教程,速度非常快,但暂停和快退以及代码和它们应该可以帮到你。 https://unity3d.com/learn/tutorials/projects/roll-ball-tutorial

答案 2 :(得分:0)

错误是因为您有一个与您的类同名的变量。改变" int示例"别的什么。

答案 3 :(得分:0)

以下是一些提示(查看注释行)

using UnityEngine;
using System.Collections;

public class Example : MonoBehaviour { // <---- Class name is capitalized so dont use same capitalization for "example" inside of class

    int example;  // <----- Put example here so it exists throughout the whole class

    // Use this for initialization
    void Start () {
        example = 1; // <---- initialization
    }

    // Update is called once per frame
    void Update () {
        Debug.Log(example *= 2); // <------- Code shortening FTW
    }
}

答案 4 :(得分:-1)

您的“示例”成员超出了范围。正如Will指出的那样,该成员与您的班级同名。 见下文

using UnityEngine;
using System.Collections;

public class Example : MonoBehaviour {

    int myExample;

    // Use this for initialization
    void Start () {
        myExample = 1;
    }

    // Update is called once per frame
    void Update () {
        myExample = myExample * 2;
        Debug.Log(myExample);
    }
}