2016-10-16 105 views
0

总之,我注意到Unity(我使用的一个简单的游戏开发平台)中的很多预定义函数将返回一个值(如坐标),或者如果满足某些条件将返回false。我试图自己做这个,但是编译器一直在寻找一个作为返回类型的转换,并且不允许我返回布尔值(因为函数被声明为返回一个转换)。我想要一个函数返回一个特定的值,否则返回false

Transform SelectObject() { 
    RaycastHit hit; 
    Ray ray = Camera.main.ScreenPointToRay (Input.mousePosition); 
    if (Physics.Raycast (ray, out hit, unitLayer)) 
     return hit.transform; 
    else 
     return false; 
} 

当函数'失败'它的任务时,我该如何返回某个数据类型,但也有我的函数返回布尔(假)?

+0

即使预先定义的函数应该在某处记录。也许你想看看这样的行为的一些例子。我不属于Unity,但你在这里描述的听起来很奇怪。你确定没有一些**隐式**转换可以将诸如“null”之类的东西在封面下翻译为假吗? – GhostCat

+1

@GhostCat答案在我的代码中一直都是这样。我不明白“out”关键字的基本概念。某些预定义函数(如“Physics.Raycast()”)将根据是否满足某些条件返回true或false,但这些函数还会通过带有“out”关键字的另一个变量传递额外信息。有效返回布尔值和一些额外的信息。 –

回答

1

我没有用统一了一段时间,但我认为你只需要做到这一点:

Transform SelectObject() { 
    RaycastHit hit; 
    Ray ray = Camera.main.ScreenPointToRay (Input.mousePosition); 
    if (Physics.Raycast (ray, out hit, unitLayer)) 
     return hit.transform; 
    else 
     return null; 
} 

统一有一个转换是从派生到UnityEngine.Object布尔对象的实用程序:假如果对象是null,在其他情况下为true。 这是一件奇怪的事情,但它确实对我有用。

我觉得你可以隐式转换变换对象布尔这样的:

bool b = SelectObject(); 
相关问题