2013-12-08 44 views
3

據我所見,我的問題以前沒有得到答覆。我使用Unity爲Windows Phone 8創建應用程序,並且我想獲取用戶的輸入並將其作爲代碼執行。現在通常使用JavaScript,可以使用eval(「代碼在這裏」),但Unity不喜歡這樣,並且說我的目標(WP8)不允許使用eval()。使用Unity的UnityScript或C#中的Eval()替換

所以我的問題是 - 我怎麼能在沒有使用eval()的情況下,在沒有依賴窗口或附加腳本的情況下,在C#或UnityScript中執行代碼 - 基本上它可以與Unity一起工作。例如,如果我可以使用eval,我會這樣做:eval(「createCuboid(0,1,2)」);

感謝您的幫助。

編輯: 因此,我正在製作一個應用程序,允許用戶在GUI.TextField中輸入一行代碼。當用戶點擊一個按鈕時,它將獲得他們的代碼並運行它。在我的例子createCuboid(0,1,2)中,我有自己的函數,根據用戶的規範創建一個長方體(如參數中所示)。

我想要這個的原因是因爲我希望用戶能夠自由操作3D環境而不必進行更多的縮小操作 - 例如,必須點擊一個帶有createCuboid的按鈕,然後輸入參數在多個領域。我有多個功能用戶可以調用來操縱環境。

這有幫助嗎?

+0

你能否多發一點你想解決的問題?因爲你不應該這樣做,這聽起來像你正在以完全錯誤的方式去做某件事。 –

+0

據我所知,C#不提供這樣的東西。你可以編寫你自己的解釋器來解析參數並使用反射來設置所有東西,但是這將是很多工作(並且可能非常危險)。 –

+0

適用於JavaScript的所有內容?我有點得出這樣的結論:在C#中這樣做是不可能的。 – user1785715

回答

1

爲什麼你需要讓用戶編寫代碼? 這是非常危險的。如果您想允許用戶在運行時創建對象(如多維數據集),讓用戶選擇他們想要創建的對象,然後使用字段獲取函數參數(此處檢查是否正確)並創建對象。

也許是這樣的:

List<Cubes> cubes = new List<Cubes>(); 
int create = /* read */; 
switch (create) 
{ 
    case 0: { 
     int x = /* ask for x */ 
     int y = /* ask for y */ 

     cubes.Add(createCuboid(x, y, 0)); 
     break; 
    } 

    /* etc */ 
} 

如果你想讓用戶刪除的立方體,從列表中獲取並將其刪除。 而且..是的,這段代碼只是爲了澄清我想說的話。

+0

謝謝!這是一個更好的主意。 – user1785715

+0

儘管如此,人們還是希望用mod-packs來製作遊戲,因此代碼入侵/代碼注入是首選!怎麼樣 ? –