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

Unity 2D視角下模擬3D環(huán)境和地形

這篇具有很好參考價(jià)值的文章主要介紹了Unity 2D視角下模擬3D環(huán)境和地形。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問。

2D游戲若想模仿3D游戲的環(huán)境,一種很好的方案便是“2.5D”。

所謂2.5D,通常的理解是相機(jī)固定俯視的游戲視角。在此視角下,人物可以在x、y、z三個(gè)軸上移動(dòng),如此便能模仿3D游戲的環(huán)境,而美術(shù)成本要比3D低很多。

2.5D具體實(shí)現(xiàn)的方式也分多種,如2D角色+3D場(chǎng)景、3D角色+2D場(chǎng)景貼圖、2D角色+2D場(chǎng)景貼圖。此文章討論對(duì)象為最后一種,由于角色和場(chǎng)景都采用2D圖片,所以本質(zhì)仍可以歸為2D游戲。

Demo演示:

unity2d地形,unity,3d,游戲引擎,游戲程序,c#

Vector3 v3=new Vector3();
float pi=3.14159265f;
float pi_180=pi/180;
if(performer!=null)
{
    v3[0] = ((float)x);//和本體相同
    v3[1] = ((float)(Mathf.Cos(30 * pi_180)*y+Mathf.Sin(30 * pi_180)*z));//將三維坐標(biāo)映射給二維貼圖,其中30是根據(jù)2D圖片假設(shè)的相機(jī)角度,pi_180是將角度轉(zhuǎn)換成弧度進(jìn)行計(jì)算。
    v3[2] = ((float)z*0.01f);//用于控制遮擋順序,和本體成正比即可
    performer.transform.position=v3;
}

unity2d地形,unity,3d,游戲引擎,游戲程序,c#

此處采用了一種簡(jiǎn)單的方法:將人物本體(邏輯)和人物貼圖(表現(xiàn))分離,通過三角函數(shù)算出人物貼圖在2D場(chǎng)景中的位置。

假設(shè)相機(jī)角度為α,人物貼圖的位置為(x2,y2),人物邏輯的位置為(x,y,z),可知:

x2=x

y2=cos(α)*y+sin(α)*z

如此便在2D視角下模擬出了一個(gè)三維世界,而在此基礎(chǔ)上,還可以利用unity本身的物理系統(tǒng)設(shè)計(jì)出3D地形,從而實(shí)現(xiàn)斜坡、拱橋等功能。效果圖如下:

unity2d地形,unity,3d,游戲引擎,游戲程序,c#

unity2d地形,unity,3d,游戲引擎,游戲程序,c#

?由于人物本體仍處于3D空間中,因此可以直接在3D空間加入碰撞體來實(shí)現(xiàn)地形(可以看到碰撞體和貼圖之間并不貼合,之后會(huì)解釋原因)

unity2d地形,unity,3d,游戲引擎,游戲程序,c#

unity2d地形,unity,3d,游戲引擎,游戲程序,c#

那么要怎樣根據(jù)2D貼圖去制作碰撞體呢?之前有提到三維映射到二維的公式,那么反過來,從二維映射到三維也是可以的。但是二維上的一個(gè)點(diǎn)映射到三維會(huì)有無限種可能,直接套用公式并不可行,因此只能先假定y或z為一個(gè)固定值,通過另一值的變化量來計(jì)算相對(duì)坐標(biāo)。

設(shè)相機(jī)角度為α,貼圖的點(diǎn)位為(x2,y2),邏輯的點(diǎn)位為(x,y,z),一個(gè)格子為一個(gè)單位

unity2d地形,unity,3d,游戲引擎,游戲程序,c#如圖,Δz=0,Δy2≈1.92?

套公式得Δy2=cosα*Δy+sinα*0,得y=y2/cosα,此時(shí)我設(shè)置的α為30°,所以Δy≈2.217

unity2d地形,unity,3d,游戲引擎,游戲程序,c#

?同理,得Δz≈5.688

?unity2d地形,unity,3d,游戲引擎,游戲程序,c#套用在碰撞體上即可

?可以發(fā)現(xiàn)映射后的y已經(jīng)比二維上的y更大了,所以在二維視角下碰撞體和貼圖并不貼合

unity2d地形,unity,3d,游戲引擎,游戲程序,c#

↑寬度測(cè)試,符合預(yù)期結(jié)果

unity2d地形,unity,3d,游戲引擎,游戲程序,c#

對(duì)于坡道的角度也要以同樣的方式處理,三維坡角=二維坡角/cosα,此處相機(jī)角度為30°,坡道貼圖的角度為15°,碰撞體的坡角即是17.32°。

拱橋則套用橢圓公式,x^2/a^2+ (y/cosα)^2/b^2?= 1

搭建好場(chǎng)景后,還需設(shè)置角色上坡和投射影子的邏輯,詳情可看此篇文章:

Unity 對(duì)角色上坡的研究__獨(dú)孤星夜_的博客-CSDN博客文章來源地址http://www.zghlxwxcb.cn/news/detail-735906.html

到了這里,關(guān)于Unity 2D視角下模擬3D環(huán)境和地形的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(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)文章

  • Unity2D繪制游戲地圖

    Unity2D繪制游戲地圖

    首先,我們選擇我們的地圖素材(由于筆者在前段時(shí)間已經(jīng)進(jìn)行切割,最近才開始整理這一段,所以這個(gè)是用的老素材,可能有朋友就會(huì)覺得切割前后不一致,但是思路是一樣的,大家學(xué)習(xí)思路即可) ?接著,我們找到右上角的Slice進(jìn)行圖片切割,我這邊簡(jiǎn)單介紹一下這個(gè)切

    2024年02月08日
    瀏覽(30)
  • Unity2D小狐貍教程筆記

    Unity2D小狐貍教程筆記

    下載 https://unity.cn/releases 默認(rèn)顯示方式 window - layout - default SampleScene : Project - 文件目錄 Scene -游戲畫面 asset store - 素材商店 在asset store下載素材 sunnyland shift + sapace 放大窗口 1.背景導(dǎo)入 每個(gè)格子16像素: Pixels Per Unit 16px 2.繪制瓷磚式地圖 新建瓦片圖層:左上角/右鍵 2D object

    2024年01月24日
    瀏覽(32)
  • 【Unity2D】角色動(dòng)畫的切換

    【Unity2D】角色動(dòng)畫的切換

    第一種方法是設(shè)置一個(gè)中間狀態(tài),從中間狀態(tài)向其余各種狀態(tài)切換,且各狀態(tài)向其他狀態(tài)需要設(shè)置參數(shù) 實(shí)現(xiàn)動(dòng)作轉(zhuǎn)移時(shí)右鍵點(diǎn)擊Make Transition即可? 實(shí)現(xiàn)動(dòng)畫轉(zhuǎn)移需要設(shè)置條件 點(diǎn)擊一種動(dòng)畫到另一種動(dòng)畫的線 ,然后點(diǎn)擊加號(hào)添加Condition 比如機(jī)器人從向左走切換到向右走的條件

    2024年02月15日
    瀏覽(21)
  • Unity2D-使人物翻轉(zhuǎn)的方法

    方法①:使用組件: SpriteRenderer 使用 GetAxis() 和 GetAxisRaw() 沒有區(qū)別 方法②:使用組件: Transform 情況1:使用 GetAxisRaw() ;沒有剎車效果,及翻轉(zhuǎn)過程沒有過渡, m o v e F a c t o r moveFactor m o v e F a c t or 取-1,1,0 情況1:使用 GetAxis() ;有剎車效果,及翻轉(zhuǎn)過程有過渡, m o v e F a c t

    2024年02月12日
    瀏覽(23)
  • Unity2D子彈朝向鼠標(biāo)位置發(fā)射

    Unity2D子彈朝向鼠標(biāo)位置發(fā)射

    廢話不多說,先說明一下我使用的變量 float attack_time 用于表示每次攻擊的間隙時(shí)間 float current_time 攻擊時(shí)間的冷卻 Rigidbody2D body 2D剛體組件 Object bomb 需要發(fā)射的物體對(duì)象 創(chuàng)建一枚子彈,unity的Instantiate()函數(shù)就可以實(shí)現(xiàn),這里需要的三個(gè)參數(shù)是物體對(duì)象(Object),生成位置(Vecto

    2024年02月10日
    瀏覽(48)
  • Unity學(xué)習(xí)筆記(7) Unity2D骨骼動(dòng)畫制作流程

    Unity學(xué)習(xí)筆記(7) Unity2D骨骼動(dòng)畫制作流程

    用骨骼動(dòng)畫最大的好處就是方便之后做換裝系統(tǒng)。 無論對(duì)3Dor2D游戲都是這樣的。 這篇博文記錄一下2D骨骼動(dòng)畫的制作流程,參考b站麥扣的系列教程: https://space.bilibili.com/370283072/channel/seriesdetail?sid=211996 用PS做一個(gè)將人物各個(gè)部件(骨骼)都分解開來的人物模型。 導(dǎo)出時(shí)注意

    2023年04月09日
    瀏覽(31)
  • 【Unity2D】相機(jī)移動(dòng)以及設(shè)置相機(jī)邊界

    【Unity2D】相機(jī)移動(dòng)以及設(shè)置相機(jī)邊界

    添加相機(jī)時(shí),首先需要在unity中添加 Cinemachine 包 第一次使用這個(gè)包時(shí),需要在Package Manager中搜索并安裝 ?安裝Camera Mechine包后,添加2D Camera 設(shè)置跟隨對(duì)象為Ruby (從Hierarchy中將Ruby拖動(dòng)到Follow中) ? 同時(shí),由于世界是有邊界的,要為相機(jī)設(shè)置邊界 通過添加Extension為相機(jī)添加

    2024年02月16日
    瀏覽(28)
  • Unity2D中讓角色旋轉(zhuǎn)朝向鼠標(biāo)

    ? ?實(shí)現(xiàn)該功能,你需要關(guān)注以下的幾個(gè)步驟 1.獲取角色的世界坐標(biāo) 2.獲取鼠標(biāo)所在位置的世界坐標(biāo) 3.獲取角色朝向鼠標(biāo)時(shí)候的向量 4.獲取上一步驟的向量的反正切的弧度值 5.將弧度值轉(zhuǎn)化為角度 6.將該角度應(yīng)用于角色 ——————————分割線—————————— ?

    2023年04月08日
    瀏覽(22)
  • unity2D橫版游戲教程8-音效

    unity2D橫版游戲教程8-音效

    簡(jiǎn)單介紹一下unity audio,auido包括三個(gè)東西,分別是Aduio Listener,Audio Source,Audio Clips。Audio Listener就相當(dāng)于耳朵,是用來聽聲音的,Audio Source就相當(dāng)于播放器,一個(gè)音源,可以播放聲音,具體播放什么聲音就靠Audio Clips 通常Audio Listener只有一個(gè),默認(rèn)情況下Audio Listener就在Main

    2024年02月08日
    瀏覽(29)
  • 【Unity2d】Sprite Renderer精靈渲染器

    【Unity2d】Sprite Renderer精靈渲染器

    ? ? ? ?我們把游戲開發(fā)中的Sprite叫做精靈對(duì)象,簡(jiǎn)稱精靈,就是游戲中的一個(gè)具有行為的元素。 ? ? ? ?創(chuàng)建精靈 (GameObject 2D Object Sprite) 時(shí),Unity 會(huì)自動(dòng)創(chuàng)建一個(gè)附加了?Sprite Renderer?組件的游戲?qū)ο?。還可以通過?Components?菜單 (Component Rendering Sprite Renderer) 將該組件添加到

    2024年02月05日
    瀏覽(19)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

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

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

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包