unity3d表格模擬繪製

xy849288321發表於2012-10-31
前段時間收到網友來信,該網友希望能夠在Unity3d中實現表格的繪製並且能夠動態地修改與獲取表格中的資訊。由於前段時間相對較忙,因此該問題一直未能解決,在這裡先向該網友致歉,下面我將介紹一種使用TextField元件模擬表格繪製的方法。

更多內容請關注新浪微博@築夢天下文化科技 http://weibo.com/mongtx

請同時關注團隊新微博@築夢創想 http://weibo.com/mongcc

聯絡方式:
E-mail:gsh0913@qq.com
QQ:264965161


      我將通過一個簡單的例程實現表格功能的模擬(執行效果如圖所示),在本例項中我將通過使用TextField元件模擬表格的繪製,並使用一個一位陣列存放表格中的資料,當然我們同樣可以通過這個陣列動態地獲取到表格中的資料。
      在指令碼中我們需要先定義表格的行列設定rows和columns,在 Start () 方法中對陣列進行初始化,根據表格的行列數初始化陣列並設定單元格的初始值。在OnGUI()方法中我們需要實現對錶格的繪製,控制單元格繪製位置的邏輯十分簡單,詳細的大家可以參看程式碼。
      接著,我們需要寫一個getValue(row:int, column:int)方法用於更具索引獲取表格中的內容,最後在 Update ()方法中呼叫getValue()方法就可以實現動態地獲取表格某單元格的內容了。

例項具體的程式碼如下:


  1. #pragma strict
  2. // 建立一個陣列用於存放表格內容
  3. var list = new Array();
  4. // 設定表格的行列數
  5. private var rows:int    = 5;
  6. private var columns:int = 5;
  7. function Start ()
  8. {
  9. // 計算陣列長度
  10. var total = rows * columns;

  11. // 初始化陣列
  12. for(var r:int = 0; r < total; r++)
  13. {
  14.   // 初始化單元格的值
  15.   list.push("0");
  16. }
  17. }
  18. function Update ()
  19. {
  20. // 當按下數字鍵1時輸出指定單元格的內容
  21. if(Input.GetKey(KeyCode.Alpha1))
  22. {
  23.   getValue(2, 3);
  24. }
  25. }
  26. function OnGUI()
  27. {
  28. var tx:int = 10;    // 初始偏移量
  29. var ty:int = 10;
  30. var width:int  = 500;   // 表格寬度
  31. var height:int = 100;   // 表格高度

  32. var tw:int = width / rows;  // 單元格寬度
  33. var th:int = height / columns; // 單元格高度

  34. var dx:int = 0;     // 單元格偏移量
  35. var dy:int = 0;

  36. for(var j:int = 0; j < rows; j++)
  37. {
  38.   dy = ty + (j * th);
  39.   
  40.   for(var t:int = 0; t < columns; t++)
  41.   {
  42.    dx = tx + (t * tw);
  43.    
  44.    // 計算當前索引
  45.    var index:int = columns * j + t;
  46.   
  47.    // 繪製單元格
  48.    list[index] = GUI.TextField(Rect(dx, dy, tw, th), list[index]);
  49.   }
  50.   
  51.   dx = tx;
  52. }
  53. }
  54. // 根據索引獲取表格中的資訊
  55. function getValue(row:int, column:int)
  56. {
  57. var index:int = columns * column + row;
  58. // 現實單元格中的資訊
  59. print(list[index]);
  60. }

本文來自:http://bbs.9ria.com/thread-134400-1-1.html

相關文章