創作內容

0 GP

3/11(記錄選項修正完畢),Unity動態產生物件與刪除(主要是想應用在遊戲選項上)

作者:李兒諳│2015-03-11 17:36:43│巴幣:0│人氣:2361
這次比較複雜,可以參考DB_TEST.zip檔
(本來是用來測連資料庫範例的,但後來測其它的也寫在那就是了)
https://onedrive.live.com/redir?resid=B90617D056EA2F32!184&authkey=!AFCnMULCyD45X30&ithint=folder%2czip

昨天睡前突然想到
要移植HTML5文字型冒險遊戲還有兩件事被我忽略了
第一件事情就是Unity的滑鼠點擊事件要靠碰撞器
也就是說似乎沒有按滑鼠就觸發Click事件
關於這件事情我是採取建個透明物件蓋住主攝影機
實作方式可參考↓(對岸Unity相關網站-遊戲蠻牛)
http://www.unitymanual.com/thread-4591-1-1.html
主要靠縮放物件(快速鍵R)跟調透明度達成

第二件事就是,遊戲選項的處理
遊戲選項是由遊戲選項圖跟遊戲選項文字組成的
這在Unity中可透過Prefab來處理
具體實作方式可參考Unity 官方網頁
http://docs.unity3d.com/Manual/InstantiatingPrefabs.html
的Now we only need to create the Prefab, which we do in the Editor. Here’s how:
之下有六步驟(由於範例有要處理碰撞所以有設剛體,那步在我檔案中就沒做了)

我是把遊戲選項Cube跟遊戲選項文字3D Text拉在一塊設Prefab
我的Prefab放在Resources資料夾內(為了使用Resources.Load()方法)
然後還有給個標籤名是brick(磚塊)
給標籤名是為了在選取遊戲選項後統一刪除用的


那這次用來測遊戲選項功能的程式有三部分:

第一部分是每次滑鼠點擊都去觸動的(因此我把這程式檔掛在很大的隱形Cube1上)
在Start()內產生四個遊戲選項用來測試
option_flag是用來在選選項時
不去觸動滑鼠點擊的程式
預設值在Start()內給的原因是
在宣告時給會出現編譯錯誤
(具體原因不清楚,我是想說能在其它程式片段改值,影響應該不大就不特別理會了)

using UnityEngine;
using System.Collections;
public class game_main : MonoBehaviour {
    public static string[] text1;
    public static int text1_line_no=0;
    public static bool option_flag;
    WWW request;

    IEnumerator Start () {
        option_flag = true;
        //request = new WWW ("file:///"+Application.dataPath + @"/game0.txt");  //Unity preview
        request = new WWW (Application.dataPath + @"/game0.txt"); //build Web Player use
        yield return request;

        text1 = request.text.Split('\n');

        Instantiate(Resources.Load("Brick") as GameObject, new Vector3(0, 4, -10), Quaternion.identity);
        //注意預設單位,1是100pixel
        Instantiate(Resources.Load("Brick") as GameObject, new Vector3(0, 2, -10), Quaternion.identity);
        Instantiate(Resources.Load("Brick") as GameObject, new Vector3(0, 0, -10), Quaternion.identity);
        Instantiate(Resources.Load("Brick") as GameObject, new Vector3(0, -2, -10), Quaternion.identity);
    }

    void OnMouseDown() {
        if (!option_flag) {
            //something to do
        }
    }
}
--------------------------------------------------------------
第二部分是滑鼠選項的部分(也就是掛在Prefab中Cube的部分)
一次刪掉同標籤物件的做法可參考此程式
然後有Resources.UnloadUnusedAssets ();的原因是
Destroy似乎只會刪掉物件本身
至於使用的Material等是不會刪的
在多次使用後,那些累積占用的記憶體可能會大到足以影響遊戲速度
那就要靠這方法解決
只是以目前的程式可能看不出效果
所以我也不清楚這麼寫有沒有用就是了
(話說我Prefab中Cube部分根本沒套用Material嘛)

using UnityEngine;
using System.Collections;

public class after_click : MonoBehaviour {
    GameObject[] brick;

    void OnMouseDown(){
        brick=GameObject.FindGameObjectsWithTag ("brick");
        foreach (GameObject g_o in brick) {
            Destroy (g_o);
        }
        Resources.UnloadUnusedAssets ();
        game_main.option_flag = false;
    }
}
---------------------------------------------------------------
第三部分是掛在Prefab中3D Text
所以要看的話可能要從Project視窗把Brick拖出來
再展開Brick點3D Text才會看到上面有掛text_linenumber.cs檔
由於遊戲主程式還沒寫好
文字就顯示文字檔頭四行
game_main.text1_line_no++;這行為什麼不寫在game_main.cs中呢?
因為我寫在那邊的話
執行出來的效果是四個選項文字內容都是文字檔第四行
原因不清楚,可能是程式執行順序的問題
由於改成這樣結果就符合預期
就沒怎麼去研究為什麼會這樣了

using UnityEngine;
using System.Collections;

public class text_linenumber : MonoBehaviour {
    void Start () {
        GetComponent<TextMesh> ().text =game_main.text1[game_main.text1_line_no];
        game_main.text1_line_no++;
    }
}
---------------------------------------------
話說現在才注意到
我還沒有記錄哪個選項被選
嗯...我再想想看要怎麼改
改好後再重傳檔案,跟改下這篇文章內容
不清楚會改多久!!
那就先這樣

---------------3/11  22:18修改完畢----------
DB_TEST.zip重傳了
思考了下,話說這類選項好像用OnGUI效果就蠻不錯的
不用寫OnMouseOver,應該也不用Destroy顯示用的物件
不過用OnGUI要怎麼記錄哪個選項被點還沒研究

稍微研究了下怎麼記錄是哪個選項被點後
感覺好像Unity官方範例就有約略提了下
http://docs.unity3d.com/ScriptReference/Object.Instantiate.html
改了兩個檔game.main.cs(掛在Cube1上)
跟after_click.cs(掛在Prefab的Brick上,Resources資料夾內)
主要就是動態產生物件時用個Object存下
再更改它的屬性值

使用起來像:
Object g_o1;
g_o1=Instantiate(Resources.Load("Brick") as GameObject, new Vector3(0, 4, -10), Quaternion.identity);
g_o1.name="1";

然後在選選項時,也就是after_click的OnMouseOver()內
game_main.a = int.Parse(this.name);
//Debug.Log(this.name);
簡單來說就是用this.name就可以知道是哪個選項被點
引用網址:https://home.gamer.com.tw/TrackBack.php?sn=2774134
All rights reserved. 版權所有,保留一切權利

相關創作

留言共 0 篇留言

我要留言提醒:您尚未登入,請先登入再留言

喜歡★y541258 可決定是否刪除您的留言,請勿發表違反站規文字。

前一篇:思考-沒創作慾的原因... 後一篇:接下來一星期遊戲設計相關...

追蹤私訊切換新版閱覽

作品資料夾

sakima55詐騙季來囉?
晚上公司老闆說帳號被限額5萬,這麼晚了沒打電話傳訊息感覺詐騙,在知道對方限額是10萬下直接無視。看更多我要大聲說昨天22:42


face基於日前微軟官方表示 Internet Explorer 不再支援新的網路標準,可能無法使用新的應用程式來呈現網站內容,在瀏覽器支援度及網站安全性的雙重考量下,為了讓巴友們有更好的使用體驗,巴哈姆特即將於 2019年9月2日 停止支援 Internet Explorer 瀏覽器的頁面呈現和功能。
屆時建議您使用下述瀏覽器來瀏覽巴哈姆特:
。Google Chrome(推薦)
。Mozilla Firefox
。Microsoft Edge(Windows10以上的作業系統版本才可使用)

face我們了解您不想看到廣告的心情⋯ 若您願意支持巴哈姆特永續經營,請將 gamer.com.tw 加入廣告阻擋工具的白名單中,謝謝 !【教學】