日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Unity学习笔记------用Unity2D制作打地鼠游戏

發布時間:2023/12/16 编程问答 42 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Unity学习笔记------用Unity2D制作打地鼠游戏 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

制作思路


  • 搭建打地鼠游戲場景
  • 新建游戲交互對象“地鼠”
  • 設置游戲規則:
  • “地鼠”被打到時(受到鼠標點擊)消失

    同時在原有“地鼠”位置出現新對象“死地鼠”并在規定時間內消失

    未受到點擊的“地鼠”在指定時間內自動消失

    “地鼠”能在相同時間間隔內隨機產生

  • 添加游戲相關的音樂和音效

  • 制作步驟


    搭建打地鼠游戲場景

  • 搭建2D場景
  • 確認相機參數Projection的選項為Orithographic
  • 新建文件夾Sprites用來存放圖片素材,并導入背景素材
    (這里導入的背景圖片可以自行在網上搜索,由一個大的背景圖片.jpg(ground)和一個有α通道的地鼠洞圖片.png(hole)組成)
  • 對兩個素材進行相關的調整:
    選中圖片,打開inspector面板,參數如下圖所示
    Texture Type:Sprite(2D and UI)
    Sprite Mode:Single
    Pixels Per Unit:100 【每個像素點個數為100】
    關掉【自動生成小地圖】的選項Generate Mip Map(一般情況下為未勾選狀態)
  • 將背景圖片ground拖拽進窗口,根據背景圖片的大小修改Game窗口分辨率為新增分辨率,并用Scale調整大小
    調整攝像機大小Size(可以使用鼠標拖拽調整或者用公式【高度除以2除以每單位像素數100調整數值修改)
  • 將hole也拖拽進屏幕,調整位置,新建空物體Map做容器放置ground和hole
    注意此處要確保他們的參數Order in layer 層級關系:hole為1層,ground為0層
    使得hole放置在ground上面而不至于被遮擋不可見

    保存場景
  • Ps:此處有一些出入。如果我們有相匹配的“地鼠”的3D模型和材質,可以使用3D模型制作。不過由于我沒有找到相關的素材,而恰巧我們此次制作為2D游戲,所以可以采取給圖片即2D對象添加碰撞器的做法,如下。

  • 將“地鼠”素材圖片.png導入,拖拽入Scene面板,重置,并給它添加一個box 2D的碰撞器。
    同理制作對象“死地鼠”,并將該對象拖拽為預制體。
    如果光線較暗的話可以添加Directional light平行光
    攝影機設置Clear Flags項選項為Solid Color,顏色改為黑色,如圖所示。
  • 創建腳本S1,代碼如下
  • void OnMouseDown() {Destroy(gameObject); //點擊銷毀對象“地鼠”}

    使對象“地鼠”在受到鼠標點擊時自動銷毀
    將腳本加到對象“地鼠”上

  • 繼續編寫S1腳本,實現點擊“地鼠”后,“地鼠”變為“死地鼠”的效果
    首先定義預制體“死地鼠”對象
  • public GameObject m_prefab2; //引用“死地鼠”對象

    然后在銷毀對象“地鼠”前實例化對象“死地鼠”

    Instantiate(m_prefab2, transform.position, Quaternion.identity); //實例化生成 “死地鼠”,位置為當前【點擊“地鼠”】的原位置,旋轉角度為任意值

    注意:要先生成,再銷毀。因為在邏輯上來講如果對象已經被銷毀而不存在,那么所在位置則有可能出現錯誤。
    注意腳本寫好以后將“死地鼠”的預制體拖拽給“地鼠”對象身上的腳本S1的m_prefab2

  • 新建S2腳本給“死地鼠”,(也可以直接Add Component腳本S2取代拖拽)
  • void Start () {Destroy(gameObject, 0.5f); }

    使對象“死地鼠”在出現0.5秒以后自動銷毀

    同理可以應用在S1腳本中,使對象“地鼠”在始終沒有受到點擊時出現3秒后自動銷毀
    保存場景

  • 新建空物體命名為GreateTarget,并給他添加腳本CreateTarget,實現對象的自動隨機生成,代碼如下
  • public GameObject m_Target; //引用對象“地鼠”

    InvokeRepeating函數可以在制定間隔調用指定函數,實現Create函數的重復調用,即實現“地鼠”對象的重復生成

    void Start() {InvokeRepeating("Create", 0, 1);//該調用函數為Create,等待時間為0(密集運行),間隔為1s//每指定間隔調用生成一次函數 }

    Create函數實現地鼠的實例化生成以及隨機出現

    首先定義位置變量pos,然后產生隨機的id值,再使用if函數根據隨機產生的id值確定pos的值即對象實例化的位置,最后Instantiate函數進行對象的實例化

    void Create() {Vector3 pos = Vector3.zero; //初始化建立位置變量int id= 0;id = Random.Range(1,10); //在1~9的9個數中隨機產生一個數值if (id== 1)pos = new Vector3(0, 0, 0);if (id== 2)pos = new Vector3(2, 0, 0);if (id== 3)pos = new Vector3(-2, 0, 0);if (id== 4)pos = new Vector3(0, 1, 0);if (id== 5)pos = new Vector3(2, 1, 0);if (id== 6)pos = new Vector3(-2, 1, 0);if (id== 7)pos = new Vector3(0, -1, 0);if (id== 8)pos = new Vector3(2, -1, 0);if (id== 9)pos = new Vector3(-2, -1, 0);Instantiate(m_Target, pos, Quaternion.identity); //實例化對象}
  • 此時功能基本實現完全,最后給兩個對象添加Audio Source組件,導入出現和擊中地鼠的音效并對應添加音效
  • 運行游戲,對時間間隔等數值進行適當的調整,并保存工程

  • 出現的問題及解決方法


  • “地鼠”對象模型問題。因為沒有現成的地鼠模型,如果直接把貼圖貼給3d cube的話形狀不匹配而且是倒著的
  • 解決過程:但我想到之前講到的3D對象和2D對象的不同在于2D對象需要手動添加碰撞器。而此次游戲剛好是一個2D游戲,所以我猜想如果給2D的圖片添加碰撞器是否可以在游戲中實現需要的對象效果。嘗試成功。

  • 但是2D的“地鼠”對象偶爾會出現“隱身”的情況,只能看到邊框而看不到圖片內容。
  • 解決過程:我搜索了2D對象看不到的原因,但是沒有找到解決辦法。無奈之下我刪除原來制作好的對象并重新導入圖片做了一遍,對象就又是可見的了。我猜想這可能是因為軟件的穩定性等等原因造成的。


    收獲


  • 學到了平面圖形可以添加碰撞器,從而在2D游戲中達到和3D對象同樣的效果
  • 學習了一個新的函數InvokeRepeating(“函數名”,等待時間,調用時間間隔),可以在每指定時間間隔調用生成一次函數。
    之前學習unity3D時有學過一個類似功能的函數叫攜程函數,不過實現的功能更加全面,可以設置多個時間間隔,從而體現出關卡的效果。
  • 第一次接觸到設置對象自動銷毀時間的方法,Destory(gameObject,銷毀時間)。
    就是不知道這些用在Unity2D游戲里的函數能不能同樣在Unity3D游戲中使用,不過理論上應該是可以的。
  • 學習到制作一個游戲的過程是把每一個想要實現的功能細化到最小的指令,然后用代碼一一對應實現。

  • 總結

    以上是生活随笔為你收集整理的Unity学习笔记------用Unity2D制作打地鼠游戏的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。