我在学习一个用C#写的Unity3D教程,尝试着用UnityScript/Javascript来做。下面的几行我没能转换成功,是关于光线投射的。
这是 C# :
if(Physics.Raycast(ray, out hit, Mathf.Abs(deltaY), collisionMask)){
....
}
这是我所拥有的相关变量:
var ray : Ray;
var hit : RaycastHit;
var collisionMask : LayerMask;
var deltaY : float = moveAmount.y; // moveAmount is a Vector2
这是 Physics.Raycast的签名:
function Raycast (origin : Vector3,
direction : Vector3,
distance : float = Mathf.Infinity,
layerMask : int = kDefaultRaycastLayers) : boolean
我知道问题在于使用UnityScript不能辨别出“out”是什么,我不知道用什么来代替它。
原问题:Raycast - convert from C# to UnityScript
答案:
crush:
根据文档 documentation:
参数 (阅读hitInfo说明)
在C#,out通过引用传递, 这样能允许函数修改它范围之外的值。在UnityScript中,你不需要定义何时用引用或值来传递。所以,你只要省略out
注意,根据LayerMask documentation,LayerMask可以从整数隐式转换
msm8bball:
out 意味着传递参数将是通过“引用”传递,和通过“值”传递相对。看看。
我不太熟悉UnityScript. 但是创建同等函数的方法之一是创建一个新的要返回的class,包含通常会返回的Boolean,以及RaycastHit对象。
Luaan:
这其实不需要out关键词
你可以参考一下UnityScript文档http://docs.unity3d.com/Documentation/ScriptReference/Physics.Raycast.html
Out和ref是有用的C#构造,允许你把引用传递到结构(或者传递引用到class引用),通常会被值传递取代。
C#方法的变体将会创建一个RaycastHit类型的新实例,并将其指定到作为out参数传递的变量。
在UnityScript, 这是不必要的,不用out关键词也可以做到你想要的东西。