为什么调用方法会生成CS0019错误?

时间:2017-11-04 19:30:34

标签: c# unity3d

我通过创建一个简单的程序来练习C#,只要我在Unity中单击,就会在控制台中输出一些消息。

主题是滚动。单击时,它将使用Random.Range();模拟滚动。如果滚动6,它会向控制台输出一条消息,否则它只会告诉您通过控制台的结果。

我收到错误代码CS0019。

the error from the Unity console

我的代码:

    void Start () {

        rollingDice ();
    }

    //This Function handles the rolling of the die. When called, it will generate a random number from; Random.Range between the number of 1 to 6, just like a die.
    int rollingDice ()
    {
        int Dice = Random.Range (0,6);
        return Dice;
    }
//This Function executes the Function rollingDice (); upon click
    void OnMouseDown()
    {
        rollingDice ();
    }


    // Update is called once per frame
    void Update () 
    {       
        if (rollingDice == 6) {               //I've put the if statements here in update to check whether I've 
                                                               //rolled a 6 or not every frame.
            Debug.Log ("You've hit the highest number!!");
        } else {
            Debug.Log ("Your last roll was: " + rollingDice);
    }
}

2 个答案:

答案 0 :(得分:2)

正如 Pikoh的 answer中所述,您需要在函数名称前面添加()来调用它。

这只能解决您的编译问题。有许多未讨论的问题我决定留下这个答案。

1 。每次if (rollingDice() == 6),您都会收到一个新的随机数。当您执行Debug.Log ("Your last roll was: " + rollingDice());时,您将获得另一个新的随机数。

来自if (rollingDice() == 6)OnMouseDown()函数和Debug.Log("Your last roll was: " + rollingDice());的随机数不会相同。

2 .Unity' Random.Range第二个参数是独占的,这意味着Unity不包含它。它包括max-1。

如果要在06之间生成随机数,则必须将7传递给第二个参数。那应该是Random.Range(0, 7)

使用您当前的代码,if (rolledDice == 6)永远不会成真。

此外,骰子数量介于16 之间 06之间,因此应使用Random.Range(1, 7)。< / p>

您必须先调用rollingDice(),然后将其存储在临时变量中并重复使用。

int rolledDice = -1;

void Start()
{
    rolledDice = rollingDice();
}

//This Function handles the rolling of the die. When called, it will generate a random number from; Random.Range between the number of 1 to 6, just like a die.
int rollingDice()
{
    int Dice = UnityEngine.Random.Range(1, 7);
    return Dice;
}

//This Function executes the Function rollingDice (); upon click
void OnMouseDown()
{
    rolledDice = rollingDice();
}


// Update is called once per frame
void Update()
{
    if (rolledDice == 6)
    {               //I've put the if statements here in update to check whether I've 
                    //rolled a 6 or not every frame.
        Debug.Log("You've hit the highest number!!");
    }
    else
    {
        Debug.Log("Your last roll was: " + rolledDice);
    }

}

最后,请注意OnMouseDown()用于检测对象上的鼠标单击。你没有提到这一点。你只是说你想在点击鼠标时生成随机数,而不是在游戏对象上点击鼠标时。 Input.GetMouseButtonDown函数用于检测鼠标单击,因此您的实际代码应如下所示:

int rolledDice = -1;

void Start()
{
    rolledDice = rollingDice();
}

//This Function handles the rolling of the die. When called, it will generate a random number from; Random.Range between the number of 1 to 6, just like a die.
int rollingDice()
{
    int Dice = UnityEngine.Random.Range(1, 7);
    return Dice;
}

// Update is called once per frame
void Update()
{
    if (Input.GetMouseButtonDown(0))
    {
        rolledDice = rollingDice();

        if (rolledDice == 6)
        {               //I've put the if statements here in update to check whether I've 
                        //rolled a 6 or not every frame.
            Debug.Log("You've hit the highest number!!");
        }
        else
        {
            Debug.Log("Your last roll was: " + rolledDice);
        }
    }
}

答案 1 :(得分:1)

调用方法时,需要在名称后添加parethesis。所以:

if (rollingDice == 6) 

应该是:

if (rollingDice() == 6) 

并且

Debug.Log ("Your last roll was: " + rollingDice);

应该是

Debug.Log ("Your last roll was: " + rollingDice());

顺便说一下,我想它一定是个拼写错误,但是如果它是一个常见的约定,那么括号是方法名称的旁边,所以在某些情况下删除你拥有的空间。例如:

void Start () 
{ 
   rollingDice (); 
}

应该是:

void Start() 
{ 
   rollingDice(); 
}