国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

「Unity入門(mén)」Step by step的太空清理垃圾游戲Part 4: 觸碰收集垃圾

這篇具有很好參考價(jià)值的文章主要介紹了「Unity入門(mén)」Step by step的太空清理垃圾游戲Part 4: 觸碰收集垃圾。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問(wèn)。

配合視頻食用效果更好哦~

Step by step的太空垃圾清理游戲教程-Part 4

作為太空環(huán)境保護(hù)者,除了控制飛船移動(dòng)外,我們還可以切換前視鏡和后視鏡。在前視鏡狀態(tài)下,駕駛員需要駕駛飛船碰撞垃圾來(lái)收集它;在后視鏡的狀態(tài)下,駕駛員只需要點(diǎn)擊垃圾,垃圾就會(huì)自動(dòng)被收集。在本節(jié)中,我們將用trigger,camera,screen和tag來(lái)完成這兩個(gè)狀態(tài)。

切換前后鏡頭 – enabled & SetActive

首先,讓我們實(shí)現(xiàn)切換前后鏡頭的功能。我們已經(jīng)有了一個(gè)主鏡頭“Main Camera”在飛船前側(cè)作為主視角。接下來(lái),需要另一個(gè)鏡頭放到飛船后側(cè)。

  • GameObject - Camera 新建一個(gè)鏡頭。更改名為“Back Camera”

  • 將Back Camera移動(dòng)到Spacecraft的下方,成為Spacecraft的子物體(child)

    • 開(kāi)始運(yùn)行后,Back Camera也會(huì)跟著Spacecraft一起移動(dòng)了

  • 將鏡頭的位置移動(dòng)到飛船的后側(cè),調(diào)整角度到合適的視角。

    • 單擊鏡頭,在場(chǎng)景右下角能夠看到鏡頭的視角

添加后視鏡頭后,我們來(lái)完成前后鏡頭的切換。我選擇的交互方式是添加一個(gè)“前/后”的按鈕,用來(lái)轉(zhuǎn)換前后鏡頭。當(dāng)然,也有其他同樣合適的方式,其中邏輯都是類(lèi)似的。

建一個(gè)按鈕(Button):

  • 右擊“Canvas” – UI – Button-TextMeshPro

    • TextMeshPro指的是按鈕上的文字,可以用TextMeshPro而不僅僅是簡(jiǎn)單的Text。如果是第一次用到Button,在彈出的對(duì)話框中選擇“import TMP Essentials”

    • Button的初始結(jié)構(gòu)是Button - Text。在Button的“Image”中調(diào)整按鈕的背景,Text中修改文字和字體...

  • 重命名為“Back Camera Button”。選擇合適的背景顏色。將按鈕的文字改成“Back Camera”。調(diào)整按鈕的大小和位置。

  • 復(fù)制整個(gè)按鈕,用作前鏡頭切換。只需要修改名稱(chēng)和文字為“Front Camera”。

    • 兩個(gè)按鈕是為了能夠切換。

添加按鈕后,我們可以用它來(lái)控制兩個(gè)鏡頭的“開(kāi)/關(guān)“。這里要用到一個(gè)常用的功能——SetActive。通過(guò)把后面的參數(shù)設(shè)置為T(mén)rue或False,它能夠把某個(gè)GameObject設(shè)置為Active(開(kāi))或inactive(關(guān))。

  • 新建一個(gè)Script,命名為“CameraManager”。

  • 新建兩個(gè)公開(kāi)的變量frontCam和backCam,用來(lái)代表兩個(gè)鏡頭。

public Camera frontCam;

public Camera backCam;
  • 在Start中,用enabled來(lái)設(shè)置兩個(gè)鏡頭的初始狀態(tài)

frontCam.enabled = true;

backCam.enabled = false;
  • 新建兩個(gè)公開(kāi)的按鈕變量frontButton和backButton

public Button frontButton;

public Button backButton;
  • 記得先在script的頂端導(dǎo)入U(xiǎn)nityEngine.UI,這條指令使我們能夠運(yùn)用Button

using UnityEngine.UI;
  • 在Start中,用AddListener設(shè)置兩個(gè)按鈕在被按時(shí)的要執(zhí)行的操作

backButton.onClick.AddListener(BackClick);

frontButton.onClick.AddListener(FrontClick);
  • AddListener是一個(gè)常用的監(jiān)聽(tīng)方法。前面加上onClick,Listener會(huì)在按鈕被按到的時(shí)候執(zhí)行后面參數(shù)中的方法。因此AddListener在設(shè)定按鈕時(shí)很常用。

  • 來(lái)定義BackClick和FrontClick兩個(gè)方法。

void BackClick()

{

frontCam.enabled = false;

backCam.enabled = true;

backButton.gameObject.SetActive(false);

frontButton.gameObject.SetActive(true);

}



void FrontClick()

{

backCam.enabled = false;

frontCam.enabled = true;

frontButton.gameObject.SetActive(false);

backButton.gameObject.SetActive(true);

}
  • 在被點(diǎn)到后,它們要做的是:控制相應(yīng)鏡頭的開(kāi)關(guān)、關(guān)掉另一個(gè)鏡頭、關(guān)掉此按鈕、打開(kāi)另一個(gè)按鈕

「Unity入門(mén)」Step by step的太空清理垃圾游戲Part 4: 觸碰收集垃圾,開(kāi)發(fā)語(yǔ)言,游戲引擎,unity,用戶界面,3d,c#

按鈕邏輯圖

  • 保存并回到編輯器,新建一個(gè)空的GameObject,命名為“Camera Manager”。

  • 將CameraSwitch拖拽到Camera Controller中。并將公開(kāi)變量賦值。

獲取和轉(zhuǎn)換屏幕點(diǎn)擊位置 – Touch & Raycast

后視鏡狀態(tài)中,如果玩家點(diǎn)擊太空中的垃圾,垃圾將會(huì)消失(被收集)。Unity用Touch這種類(lèi)型來(lái)代替觸碰屏幕的動(dòng)作。Touch有很多自帶的屬性方便運(yùn)用,比如phase代表觸碰的階段,position代表屏幕上被觸碰的像素點(diǎn)位置等??梢杂肐nput.touchCount> 0這個(gè)條件來(lái)判斷屏幕是否被觸碰,如果觸碰的個(gè)數(shù)touchCount大于0,就說(shuō)明有觸碰存在,就是時(shí)候進(jìn)行下一步了。

前面提到,可以用touch.position獲取被觸碰的像素點(diǎn)位置,就能得到玩家想要點(diǎn)擊的地方。但問(wèn)題是,屏幕是一個(gè)2D的平面,但我們的游戲是3D的世界,將得到的(x,y)直接當(dāng)成(x,y,z)使用顯然行不通。所以,我們需要將2D位置轉(zhuǎn)換成3D鏡頭中的Ray。Ray的本意是“射線”,有著方向和起點(diǎn)。它與touch.position的最大不同在于,前者是相對(duì)于鏡頭,而后者是相對(duì)于屏幕。最后,將射線轉(zhuǎn)換為RaycastHit,指的是射線碰到的物體。注意,只有帶有collider的物體才能夠被射線觸碰到。點(diǎn)開(kāi)兩種垃圾的prefab,它們都應(yīng)該有collider。

「Unity入門(mén)」Step by step的太空清理垃圾游戲Part 4: 觸碰收集垃圾,開(kāi)發(fā)語(yǔ)言,游戲引擎,unity,用戶界面,3d,c#

position → Ray → RaycastHit

  • 雙擊打開(kāi)spacecraft代碼文件,

    • 在update中,首先判斷是否在后視鏡頭的狀態(tài)下。如果是,進(jìn)行后續(xù)。如果不是,則不需要做任何事。

  • 創(chuàng)建公開(kāi)的鏡頭變量backCam

  • 在update中,判斷backCam是否為enabled的狀態(tài)

if (backCam.enabled) // Only enable touch-collecting when back camera is active

{



}
  • 判斷是否有點(diǎn)擊存在。如果發(fā)生了點(diǎn)擊,對(duì)于每個(gè)點(diǎn)擊我們都需要執(zhí)行相同的步驟:

if (Input.touchCount> 0)

{

    foreach (Touch touch in Input.touches)

    {
        ...


    }

}
  • 先獲取touch的位置,用ScreenPointToRay轉(zhuǎn)換為Ray。再將ray轉(zhuǎn)換為RaycastHit。通過(guò)RaycastHit的屬性得到點(diǎn)擊到的gameObject

Ray ray = backCam.ScreenPointToRay(touch.position); // Convert ray to camera view pos

RaycastHit hit;



if (Physics.Raycast(ray, out hit))

{

    ...

}
  • 最后,我們用hit.transform.gameObject來(lái)獲取點(diǎn)擊到的物體,并使之消失

GameObject obj_hit = hit.transform.gameObject;

obj_hit.SetActive(false);
  • 保存代碼,回到編輯器。別忘了拖拽給backCam賦值

分類(lèi)好幫手 – Tag

現(xiàn)在,在后視鏡中,被點(diǎn)擊到的物體都會(huì)消失。但問(wèn)題是,垃圾之外的物體,比如星球、人造衛(wèi)星等任何有collider的物體,都會(huì)消失。因此,需要一個(gè)條件來(lái)判斷碰到的物體是不是垃圾。Unity中,常用的分類(lèi)物體方法是加“標(biāo)簽”tag。可以自己創(chuàng)造標(biāo)簽,比如Moon Trash,Space Trash。多個(gè)物體可以用同一個(gè)標(biāo)簽。Unity還貼心的準(zhǔn)備了很多好用的方法,比如FindWithTag,CompareTag等,非常方便。

給場(chǎng)景中的垃圾加上標(biāo)簽。

  • 在Inspector中,選擇tag的下拉鍵,點(diǎn)擊“Add tag…“

「Unity入門(mén)」Step by step的太空清理垃圾游戲Part 4: 觸碰收集垃圾,開(kāi)發(fā)語(yǔ)言,游戲引擎,unity,用戶界面,3d,c#

(給物體加上標(biāo)簽

「Unity入門(mén)」Step by step的太空清理垃圾游戲Part 4: 觸碰收集垃圾,開(kāi)發(fā)語(yǔ)言,游戲引擎,unity,用戶界面,3d,c#

創(chuàng)建新標(biāo)簽

  • 在新窗口中點(diǎn)擊加號(hào),輸入標(biāo)簽的名稱(chēng)。分別創(chuàng)建”Moon Trash“和”Space Trash“兩個(gè)標(biāo)簽。

  • 點(diǎn)擊每一個(gè)垃圾物體,下拉tag,剛剛創(chuàng)建的標(biāo)簽中選擇相應(yīng)的。

加上標(biāo)簽后,還需要在script中加入判斷標(biāo)簽的條件。

  • 雙擊打開(kāi)spacecraft代碼文件,在obj_hit.SetActive(false);之前加上判斷條件

if (obj_hit.CompareTag("Moon Trash"))

{

    obj_hit.SetActive(false);

}



if (obj_hit.CompareTag("Space Trash"))

{

    obj_hit.SetActive(false);

}
  • 保存

注意,CompareTag后的標(biāo)簽內(nèi)容一定要和創(chuàng)建的 一 模 一 樣!不然的話,CompareTag會(huì)返回false值,也就無(wú)法進(jìn)行后面的步驟了。

在Unity中運(yùn)行時(shí),你可能會(huì)發(fā)現(xiàn)點(diǎn)擊垃圾沒(méi)有反應(yīng)。這不是你的錯(cuò),只是鼠標(biāo)的點(diǎn)擊無(wú)法被算作“Touch”。也就是說(shuō),只有在手機(jī)上測(cè)試才會(huì)有效果。后面的章節(jié)會(huì)介紹在手機(jī)上測(cè)試的簡(jiǎn)便方法。

如果有任何疑問(wèn)或者建議,也歡迎在下方留言評(píng)論喲~文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-822699.html

到了這里,關(guān)于「Unity入門(mén)」Step by step的太空清理垃圾游戲Part 4: 觸碰收集垃圾的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來(lái)自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場(chǎng)。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • 微信小程序通知,微信小程序長(zhǎng)期訂閱消息添加硬件設(shè)備能力的設(shè)備訂閱消息step-by-step

    微信小程序通知,微信小程序長(zhǎng)期訂閱消息添加硬件設(shè)備能力的設(shè)備訂閱消息step-by-step

    本文目的,分享一個(gè)實(shí)際案例: 開(kāi)發(fā)微信小程序的報(bào)警器的微信訂閱消息, 設(shè)備報(bào)警后觸發(fā)微信報(bào)警 前提: 有一個(gè)微信小程序并且微信認(rèn)證過(guò)。 1: 添加設(shè)備申請(qǐng)權(quán)限 2:按照實(shí)際情況填寫(xiě)設(shè)備信息, 一般等兩天到三天能審核過(guò) ?3: 申請(qǐng)?jiān)O(shè)備消息能力 , 這個(gè)一部不做的

    2024年04月16日
    瀏覽(28)
  • 數(shù)字邏輯Fundamentals of Digital Logic with Verilog Design | 3rd Edition Solutins Chapter 4(step by step)

    數(shù)字邏輯Fundamentals of Digital Logic with Verilog Design | 3rd Edition Solutins Chapter 4(step by step)

    第四章 重要內(nèi)容:1、多路選擇器? 2、采用香農(nóng)展開(kāi)的多路選擇器綜合?3、譯碼器? 4、多路分配器? 5、優(yōu)先級(jí)編碼器? 6、代碼轉(zhuǎn)換器? 7、算數(shù)比較電路? 8、Verilog語(yǔ)法 糾錯(cuò):4-11香農(nóng)展開(kāi)式最后結(jié)果應(yīng)該是同或門(mén)。 Chapter 4 Chapter 4, Problem 1P Chapter 4, Problem 2P Chapter 4, Problem 3P

    2024年02月05日
    瀏覽(22)
  • Sitecore10 Demo演示環(huán)境Azure一鍵部署(Step By Step Guide to installing Sitecore10 in Azure Paas)

    Sitecore10 Demo演示環(huán)境Azure一鍵部署(Step By Step Guide to installing Sitecore10 in Azure Paas)

    本文演示Sitecore XP Single(XP0)在Azure上的一鍵部署,即“30分鐘生成Sitecore演示環(huán)境”的一環(huán)。 關(guān)于XP(即Sitecore Experience Platform) roles的相關(guān)介紹移步 XP Single配置主要用來(lái)開(kāi)發(fā)和測(cè)試: Four Sitecore roles: Content Delivery, Content Management, Processing, and Reporting as a single WebApp instance.(cd,

    2023年04月25日
    瀏覽(34)
  • torch之optimizer.step() 與 scheduler.step() 的用法

    ??首先需要明確optimzier優(yōu)化器的作用, 形象地來(lái)說(shuō),優(yōu)化器就是需要根據(jù)網(wǎng)絡(luò)反向傳播的梯度信息來(lái)更新網(wǎng)絡(luò)的參數(shù),以起到降低loss函數(shù)計(jì)算值的作用,這也是機(jī)器學(xué)習(xí)里面最一般的方法論。 ??optimizer.step()通常用在每個(gè)mini-batch之中,可以根據(jù)具體的需求來(lái)做。只有用了

    2024年02月16日
    瀏覽(24)
  • 【博客692】grafana如何解決step動(dòng)態(tài)變化時(shí)可能出現(xiàn)range duration小于step

    【博客692】grafana如何解決step動(dòng)態(tài)變化時(shí)可能出現(xiàn)range duration小于step

    grafana本身是沒(méi)有提供step參數(shù)的,因?yàn)閮x表盤(pán)根據(jù)查詢(xún)數(shù)據(jù)區(qū)間以及儀表盤(pán)線條寬度等,對(duì)于不同查詢(xún),相同的step并不能很好的發(fā)揮作用,所以step是動(dòng)態(tài)計(jì)算的 所以在Grafana中并沒(méi)有直接提供step參數(shù),而是這兩個(gè)參數(shù):min step和resolution min step: min step故名思義設(shè)定的是step的

    2024年02月13日
    瀏覽(23)
  • [COCI2010-2011#6]STEP

    [COCI2010-2011#6]STEP

    目錄 1.題目: 題目描述 輸入格式 輸出格式 2.思路 1.ans數(shù)組的維護(hù) 2.L and R 的維護(hù) 3.ne數(shù)組與pr數(shù)組的維護(hù) 4.len數(shù)組: ?3.代碼: 1.有注釋版: 2.copy版: 給定一個(gè)長(zhǎng)度為N的字符序列? ,初始時(shí)序列中全部都是字符L。 有 q次修改,每次給定一個(gè) x,若為L(zhǎng),則將?修改成R,否則將

    2024年02月15日
    瀏覽(16)
  • 關(guān)于STEP文件格式的介紹

    關(guān)于STEP文件格式的介紹

    Step文件(也稱(chēng)為STandard for the Exchange of Product data,或簡(jiǎn)稱(chēng)STEP或 ISO 10303 )是一種用于表示三維CAD數(shù)據(jù)的標(biāo)準(zhǔn)文件格式。它是一種 中立的格式 ,可以在不同的CAD軟件之間進(jìn)行交換和共享,因?yàn)樗灰蕾?lài)于任何特定的CAD軟件。 Step文件的格式 基于一系列的實(shí)體(entity)和屬性(

    2024年02月01日
    瀏覽(20)
  • MATLAB中step函數(shù)的用法

    MATLAB中step函數(shù)的用法 step函數(shù)是MATLAB中的一個(gè)重要函數(shù),用于繪制系統(tǒng)的階躍響應(yīng)圖。它可以幫助工程師和科學(xué)家分析和設(shè)計(jì)控制系統(tǒng)。本文將詳細(xì)介紹step函數(shù)的用法,并提供相應(yīng)的源代碼示例。 step函數(shù)的基本用法如下: 其中,sys是一個(gè)線性系統(tǒng)模型對(duì)象,可以是連續(xù)時(shí)間

    2024年02月03日
    瀏覽(21)
  • 西門(mén)子_Step7軟件仿真方法

    西門(mén)子_Step7軟件仿真方法 現(xiàn)在的PLC廠商提供的開(kāi)發(fā)環(huán)境都具備仿真能力。無(wú)論是西門(mén)子、三菱、羅克韋爾還是ABB 或是其他一些廠商提供的產(chǎn)品都具有仿真功能。 仿真就是在沒(méi)有硬件的情況下來(lái)測(cè)試程序功能,同時(shí)也為初學(xué)者提供了方便,即便沒(méi)有硬件 我們也能進(jìn)行試驗(yàn),可

    2024年02月06日
    瀏覽(23)
  • RK3588環(huán)境配置過(guò)程全記錄 step 1

    RK3588環(huán)境配置過(guò)程全記錄 step 1

    最近在做畢設(shè),由于是第一次接觸NPU,所以踩了不少坑,順便將它記錄下來(lái),防止后來(lái)者繼續(xù)踩(doge)hh。 許多人都和我一樣,剛到手拿到一塊NPU算力版的時(shí)候都不知道從何下手,是先在PC端操作呢還是直接在板子上操作? 本人雖然熟悉一些類(lèi)似于STM32 ,esp等板子,但是也是

    2024年02月09日
    瀏覽(54)

覺(jué)得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包