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

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

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

發(fā)布時(shí)間:2023/12/16 编程问答 39 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Unity学习笔记------用Unity2D制作打地鼠游戏 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

制作思路


  • 搭建打地鼠游戲場(chǎng)景
  • 新建游戲交互對(duì)象“地鼠”
  • 設(shè)置游戲規(guī)則:
  • “地鼠”被打到時(shí)(受到鼠標(biāo)點(diǎn)擊)消失

    同時(shí)在原有“地鼠”位置出現(xiàn)新對(duì)象“死地鼠”并在規(guī)定時(shí)間內(nèi)消失

    未受到點(diǎn)擊的“地鼠”在指定時(shí)間內(nèi)自動(dòng)消失

    “地鼠”能在相同時(shí)間間隔內(nèi)隨機(jī)產(chǎn)生

  • 添加游戲相關(guān)的音樂(lè)和音效

  • 制作步驟


    搭建打地鼠游戲場(chǎng)景

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

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

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

    使對(duì)象“地鼠”在受到鼠標(biāo)點(diǎn)擊時(shí)自動(dòng)銷(xiāo)毀
    將腳本加到對(duì)象“地鼠”上

  • 繼續(xù)編寫(xiě)S1腳本,實(shí)現(xiàn)點(diǎn)擊“地鼠”后,“地鼠”變?yōu)椤八赖厥蟆钡男Ч?br /> 首先定義預(yù)制體“死地鼠”對(duì)象
  • public GameObject m_prefab2; //引用“死地鼠”對(duì)象

    然后在銷(xiāo)毀對(duì)象“地鼠”前實(shí)例化對(duì)象“死地鼠”

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

    注意:要先生成,再銷(xiāo)毀。因?yàn)樵谶壿嬌蟻?lái)講如果對(duì)象已經(jīng)被銷(xiāo)毀而不存在,那么所在位置則有可能出現(xiàn)錯(cuò)誤。
    注意腳本寫(xiě)好以后將“死地鼠”的預(yù)制體拖拽給“地鼠”對(duì)象身上的腳本S1的m_prefab2

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

    使對(duì)象“死地鼠”在出現(xiàn)0.5秒以后自動(dòng)銷(xiāo)毀

    同理可以應(yīng)用在S1腳本中,使對(duì)象“地鼠”在始終沒(méi)有受到點(diǎn)擊時(shí)出現(xiàn)3秒后自動(dòng)銷(xiāo)毀
    保存場(chǎng)景

  • 新建空物體命名為GreateTarget,并給他添加腳本CreateTarget,實(shí)現(xiàn)對(duì)象的自動(dòng)隨機(jī)生成,代碼如下
  • public GameObject m_Target; //引用對(duì)象“地鼠”

    InvokeRepeating函數(shù)可以在制定間隔調(diào)用指定函數(shù),實(shí)現(xiàn)Create函數(shù)的重復(fù)調(diào)用,即實(shí)現(xiàn)“地鼠”對(duì)象的重復(fù)生成

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

    Create函數(shù)實(shí)現(xiàn)地鼠的實(shí)例化生成以及隨機(jī)出現(xiàn)

    首先定義位置變量pos,然后產(chǎn)生隨機(jī)的id值,再使用if函數(shù)根據(jù)隨機(jī)產(chǎn)生的id值確定pos的值即對(duì)象實(shí)例化的位置,最后Instantiate函數(shù)進(jìn)行對(duì)象的實(shí)例化

    void Create() {Vector3 pos = Vector3.zero; //初始化建立位置變量int id= 0;id = Random.Range(1,10); //在1~9的9個(gè)數(shù)中隨機(jī)產(chǎn)生一個(gè)數(shù)值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); //實(shí)例化對(duì)象}
  • 此時(shí)功能基本實(shí)現(xiàn)完全,最后給兩個(gè)對(duì)象添加Audio Source組件,導(dǎo)入出現(xiàn)和擊中地鼠的音效并對(duì)應(yīng)添加音效
  • 運(yùn)行游戲,對(duì)時(shí)間間隔等數(shù)值進(jìn)行適當(dāng)?shù)恼{(diào)整,并保存工程

  • 出現(xiàn)的問(wèn)題及解決方法


  • “地鼠”對(duì)象模型問(wèn)題。因?yàn)闆](méi)有現(xiàn)成的地鼠模型,如果直接把貼圖貼給3d cube的話形狀不匹配而且是倒著的
  • 解決過(guò)程:但我想到之前講到的3D對(duì)象和2D對(duì)象的不同在于2D對(duì)象需要手動(dòng)添加碰撞器。而此次游戲剛好是一個(gè)2D游戲,所以我猜想如果給2D的圖片添加碰撞器是否可以在游戲中實(shí)現(xiàn)需要的對(duì)象效果。嘗試成功。

  • 但是2D的“地鼠”對(duì)象偶爾會(huì)出現(xiàn)“隱身”的情況,只能看到邊框而看不到圖片內(nèi)容。
  • 解決過(guò)程:我搜索了2D對(duì)象看不到的原因,但是沒(méi)有找到解決辦法。無(wú)奈之下我刪除原來(lái)制作好的對(duì)象并重新導(dǎo)入圖片做了一遍,對(duì)象就又是可見(jiàn)的了。我猜想這可能是因?yàn)檐浖姆€(wěn)定性等等原因造成的。


    收獲


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

  • 總結(jié)

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

    如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。