2013-12-21 93 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()) 
     () 

我目前正在嘗試使用F#與Unity3d,我不知道如何使用ref關鍵字與對象。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

大多數您使用'mutable'或'ref'但不能同時的時間。你可以做'let r = ref(new RayCastHit())',它創建一個不可變的指向包含實例的引用單元格的指針。這是使用'ref'的正確方法,但我不確定它會與Unity調用兼容。 –

回答

4

你可以只添加&字符到你的R參數的開頭 這樣....

let mutable r = new RaycastHit() 

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

see here

OR ....

你可以使用被認爲是「functiona升路」,並沒有任何變量(‘可變’)

source
與out參數函數被看作元組類型的返回類型,所以你可以使用像這樣的例子:

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

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

您可以使用該屬性的功能參數 System.Runtime.InteropServices.OutAttribute

open System.Runtime.InteropServices 

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