Unity坑之 传递默认枚举类型参数

今天在编写一个通用模块的时候,遇到一个奇怪的问题,vs编译时没有任何问题,但是轮到unity编译时,却报错:

 error CS0103: The name `PrintInt' does not exist in the current context

出问题的代码片段如下:

 1   public void MovePoker(Vector3 startPos, Vector3 endPos, float moveTime, Ease ease = Ease.Flash)
 2   {
 3       view.MoveSelf(startPos, endPos, moveTime, ease);
 4 
 5       PrintInt(FUNC.One);
 6   }
 7 
 8    public void PrintInt(FUNC fUNC)
 9    {
10        view.PrintInt(fUNC);
11    }

报错提示在代码的第 5行,提示说在当前上下文中不存在PrintInt这个签名,但是一看代码,不对啊,PrintInt不就是在第8行定义的么?

但是仔细观察却会发现一个问题,那就是说 报错提示不存在PrintInt这个签名,如果是方法找不到的话,应该是报错找不到方法,这里却

报找不到名字?那么很有可能是其它莫名其妙的问题引起的。

 

经过排查,最终发现问题出在代码第1 行的参数上,MovePoker共有3个参数,第三个参数为DoTween的枚举类型,并且指定了默认值。经过试验

当将枚举值传入到其他方法时,如果该方法指定了默认值,那么unity就会报错,因此只需要将枚举值的默认值取消掉即可。因此将代码改为:

public void MovePoker(Vector3 startPos, Vector3 endPos, float moveTime, Ease ease )
{
     view.MoveSelf(startPos, endPos, moveTime, ease);

     PrintInt(FUNC.One);
}

public void PrintInt(FUNC fUNC)
{
     view.PrintInt(fUNC);
}

问题就解决了。unity版本为 5.3.6f1 64位

 

posted @ 2018-04-24 10:32  gameDesigner  阅读(546)  评论(0编辑  收藏  举报