但SendMessage系列有個缺陷是只能接收單一參數,除非自己將多重參數包成struct、class使用,這樣在使用上也變得無法統一不太便利。
如何改善呢?
試了幾種方法後發現用Hashtable較為合適,且C#或JavaScript皆可使用。按Key來得知所接收的變數該塞在哪?不用像用Array時還要確定變數的位子。
C#
void Start () { Hashtable args = new Hashtable();//想塞什麼型態都可以void TestMessage (Hashtable args) { //可以直接使用或新建變數接收,個人覺得新建變數接收使用上較為直覺 //接收時須轉型為正確型態 string stringVar = (args.Contains("string")) ? args["string"].ToString() : ""; int intVar = (args.Contains("int")) ? (int)args["int"] : 0; float floatVar = (args.Contains("float")) ? (float)args["float"] : 0.0f; Vector3 vectorVar = (args.Contains("Vector3")) ? (Vecotr3)args["Vector3"] : Vector.zero; }
args.Add("string", "i am string");args.Add("int", 123);args.Add("float", 567.89f);args.Add("Vector3", new Vector3(1, 2, 3));SendMessage("TestMessage", args);
}
========================================
JavaScript
function Start () { var args : Hashtable = new Hashtable(); //想塞什麼型態都可以args.Add("string", "i am string");args.Add("int", 123);args.Add("float", 567.89f);args.Add("Vector3", new Vector3(1, 2, 3));SendMessage("TestMessage", args);
}
function TestMessage (args : Hashtable) {
string stringVar = (args.Contains("string")) ? args["string"] : "";
int intVar = (args.Contains("int")) ? args["int"] : 0;
float floatVar = (args.Contains("float")) ? args["float"] : 0.0f;
Vector3 vectorVar = (args.Contains("Vector3")) ? args["Vector3"] : Vector.zero;
}
沒有留言:
張貼留言