2014-09-20 72 views
0

我试图定义功能类似于如何实现一个返回布尔值并更改其参数的函数?

Physics.Raycast(
    origin: Vector3, 
    direction: Vector3, 
    hitInfo: RaycastHit, 
    distance: float = Mathf.Infinity, 
    layerMask: int = DefaultRaycastLayers 
): bool; 

在哪里,如果它返回true,它也将信息存储到一个能够通过访问其参数,则“hitInfo”参数的一个函数什么称为函数,那么如何定义这样做的函数?

回答

0

看起来你正在寻找在C#中一个类似于ref。 UnityScript不支持这样的事情。 Physics.Raycast恰好这样做,因为它实际上调用了最初在C#中定义的函数。

的选项有:

  1. 执行相同的:C#编写一个函数,请确保它是你的UnityScript之前编译,并从那里调用它。

  2. 写一个替代的解决方案,如:

    class OperationResultWrapper 
    { 
         successful : bool; 
         actualData: int; 
    } 
    
    //Note: YourOperation returns an instance of OperationResultWrapper 
    var result = yourOperation(some parameters); 
    if (result.successful) 
    { 
        //Do something with result.actualData 
    } 
    
+0

非常感谢的人:)这有助于了很多,并通过js和C#我想我会迟早要被切换到C#之间的差异来看,听起来像一个巨大的选项,我可以高度受益于哈,再次感谢 – Chapi 2014-09-21 01:39:14

+1

其实际使用“出”而不是“参考”:) – Tom 2014-09-22 01:57:20

0

Alex的解决方案是好的,但你应该知道有在UnityScript一个本地方法:你可以像使用Hashtable的列表/集合对象,列表,字典...

所以,如果你把一些值的集合对象,并将其发送到操纵一些列表记录功能外也使用该功能后,这些条目仍更改此功能。

例子:

var list: List.<boolean> = new List.<boolean>(); 
list.Add(true);//0 
list.Add(false);//1 
list.Add(true);//2 

if(isChanged(list)) { 
    print('new list - 0:'+list[0]+' - 1:'+list[1]+' 2:'+list[2]); 
    //-> new list - 0:false - 1:true 2:false 
} 

function isChanged(boolList: List.<boolean>) : boolean 
{ 
    if(boolList!=null && boolList.Count==3) { 
     boolList[0] = false; 
     boolList[1] = true; 
     boolList[2] = false; 
     return true; 
    } 
    return false; 
}