2013-12-21 3 views
3
namespace FsharpUnity 
open UnityEngine 

type DebugTest() = 
    inherit MonoBehaviour() 
    member this.Update() = 
     let m = Input.mousePosition 
     let look = Camera.main.ScreenPointToRay(m) 
     let mutable r = new RaycastHit() 
     if Physics.Raycast(look, ref r,1000.0f) then 
      Debug.Log("I hit: " + r.point.ToString()) 
     () 

현재 Unity3d에서 F #을 사용하려고하고 있는데 개체에 ref 키워드를 사용하는 방법을 모르겠습니다.개체 참조

나는

let mutable r = new RaycastHit() // Is this incorrect? 
      if Physics.Raycast(..., ref r,....) then 

와 그것을 시도하지만 r 조금 이상한 보인다 항상 비어 있습니다. 객체에 ref 키워드를 사용하는 방법에 대한 예제가 없습니다 http://msdn.microsoft.com/en-us/library/dd233186.aspx

실수를 했습니까?

내 질문을 명확히하기 위해 : 올바른 구문입니까?

let mutable r = new RaycastHit() 
... ref r .... 
+0

. 인스턴스를 포함하는 참조 셀에 불변 포인터를 생성하는'let r = ref (new RayCastHit())'를 할 수 있습니다. 그것이'ref'를 사용하는 올바른 방법입니다 만, Unity 호출과 호환 될지 확실하지 않습니다. –

답변

4

당신은 당신의 R 변수의 시작 부분에 & 문자를 추가 할 수 등 .... 그

let mutable r = new RaycastHit() 

Physics.Raycast(look, &r,1000.0f) 

see here

OR ....

"functiona로 간주되는 것을 사용할 수 있습니다.

let (result, result_of_b_param) = function 3 
let (result, int_value) = Int32.TryParse "3" 

match Int32.TryParse "23" with 
| (true, x) -> ... 
| _ -> ... 
 

: "(가변")

source 당신과 같이 귀하의 예제를 사용할 수 있도록 밖으로 매개 변수
함수가 리턴 타입과 튜플 형식으로 처리됩니다 리터의 방법으로 어떤 변수없이 일 " 당신이 사용할 수있는 속성 함수 매개 변수에 System.Runtime.InteropServices.OutAttribute : 당신은`mutable` 또는`ref` 중 하나만을 사용하는 대부분의 시간

open System.Runtime.InteropServices 

type foo() = 
member x.Foo ([] y : int32 ref) = 
y := 0