2d 材質(zhì)
里面可以設(shè)置
摩擦力 和 彈力
Simulated:是否在當(dāng)前的物理環(huán)境中模擬,取消勾選該框類似于Disable Rigidbody,但使用這個(gè)參數(shù)更加高效,因?yàn)镈isable會(huì)銷毀內(nèi)部產(chǎn)生的GameObject,而取消勾選Simulated只是禁用。
Kinematic 動(dòng)力學(xué)剛體
動(dòng)力學(xué)剛體不受重力和力的影響,而受用戶的控制,需要使用類似Rigidbody2D.MovePosition、Rigidbody2D.MoveRotation的方法。它于靜態(tài)剛體一樣,只與動(dòng)態(tài)剛體會(huì)發(fā)生碰撞。
嗯,而且質(zhì)量應(yīng)該算是無(wú)限大,所以它在運(yùn)動(dòng)的時(shí)候會(huì)撞開(kāi)所有的動(dòng)態(tài)剛體。
使物體移動(dòng)可以用 AddForce 和 velocity
AddForce 分兩種 Force 和 Impulse
如何判斷是否在地上?
判斷velocity的y是否等于0 是不行的 因?yàn)樵诳罩械哪骋粫r(shí)刻速度也會(huì)是0
所以需要 Physics2D.OverlapCircle
做像素游戲
需要設(shè)置一些內(nèi)容
Sprite Mode: 選擇"Multipe"
Single: 整張貼圖文件就是一個(gè)精靈
Multipe: 貼圖文件包含多個(gè)精靈,需要進(jìn)一步切割。
Polygon: 類似Single,但允許自定義精靈的網(wǎng)格輪廓。
PPU(Pixels Pre Unit):
這個(gè)屬性表示貼圖中多少個(gè)像素對(duì)應(yīng)Unity中的1個(gè)單位。
Filter Mode:
這個(gè)屬性用于處理貼圖時(shí)采用的抗鋸齒算法。我們做的是像素游戲,每一個(gè)像素都是寶貴的,一定要把抗鋸齒關(guān)閉,否則畫(huà)面就糊了。所以選擇"Point(no filter)“。
Compression:
這個(gè)選項(xiàng)是對(duì)貼圖進(jìn)行壓縮,同樣為了我們寶貴的像素,一定要關(guān)閉它。選擇"None”。
Collision Decection
由于游戲中的移動(dòng)時(shí)并不是完全連續(xù)的,而時(shí)根據(jù)移動(dòng)時(shí)間來(lái)判斷當(dāng)前應(yīng)該的位置。這樣會(huì)導(dǎo)致游戲卡頓時(shí)畫(huà)面的跳躍,或這當(dāng)速度過(guò)快時(shí)在兩幀之間會(huì)移動(dòng)很大距離導(dǎo)致跨越了某個(gè)碰撞體,導(dǎo)致的穿?,F(xiàn)象。這個(gè)屬性用來(lái)設(shè)置是否用額外的計(jì)算來(lái)避免卡頓時(shí)的穿模。
Discrete: 離散方式,不管穿模的問(wèn)題。
Coutinuous: 連續(xù)方式,當(dāng)移動(dòng)的方向上有碰撞體則不會(huì)在兩幀之間跨越穿模,需要額外的計(jì)算量。
Constraints: 約束,禁止在某一個(gè)或幾個(gè)軸方向上旋轉(zhuǎn)。在2D剛體的物理模型中,由于受力位置的影響,對(duì)象會(huì)沿著Z軸
旋轉(zhuǎn),我們的角色走著走著就摔倒了。勾選Freeze Rotation Z
就可以避免。
Gravity Scale 重力倍數(shù)
如果想用鍵盤(pán)上下左右移動(dòng) 不需要監(jiān)聽(tīng) awsd 按鍵 和 上下左右按鍵
只需要
float axisX = Input.GetAxis(“Horizontal”);
float axisY = Input.GetAxis(“Vertical”);
float ax1 = Input.GetAxisRaw(“Horizontal”);
float ay1 = Input.GetAxisRaw(“Vertical”);
他自動(dòng)包括上面兩組按鍵
GetAxisRaw 是只有1 0 -1
GetAxis 是慢慢改變的 中間數(shù)值有過(guò)度
其實(shí)是可以設(shè)置的
可以看這里
Gravity
: 當(dāng)按鍵松開(kāi)時(shí),"軸(Axis)值"回到"中性(neutral)值"的速度。這句話翻譯自官方文檔。簡(jiǎn)單講就是松開(kāi)按鍵時(shí),返回值落回0
的速度。Sensitivity
: 靈敏度,就是按下按鍵時(shí)返回值從0
到1
的速度。Snap
: 截?cái)?br> 如果此項(xiàng)不勾選。那么當(dāng)按下反向的按鍵時(shí),返回值會(huì)根據(jù)Gravity
屬性逐漸從1
變?yōu)?code>0,然后根據(jù)Sensitivity
屬性從0
逐漸變?yōu)?code>-1,有個(gè)剎車(chē)滑動(dòng)的效果。
如果勾選此項(xiàng),則返回值會(huì)立即從1
變?yōu)?code>0,然后根據(jù)Sensitivity
屬性,逐漸從0
變?yōu)?code>-1。Dead
: 這個(gè)屬性表示敏感度,在多大的范圍內(nèi),返回值始終為0
。主要用于搖桿設(shè)備,防止搖桿過(guò)于靈敏導(dǎo)致的晃動(dòng)。
Update 和 FixedUpdate
FixedUpdate 默認(rèn)是0.02 秒執(zhí)行一次
可以在下面修改
Update 會(huì)因?yàn)榭D 調(diào)用變少
FixedUpdate 則沒(méi)有這個(gè)問(wèn)題
所以原則就是
在update里 監(jiān)聽(tīng)玩家控制 FixedUpdate 里進(jìn)行動(dòng)作
在Update
函數(shù)中保留接收按鍵數(shù)據(jù)的代碼,因?yàn)閁nity在Update
函數(shù)調(diào)用前會(huì)讀取輸入設(shè)備。
如果在FixedUpdate
中接受按鍵數(shù)據(jù),則可能出現(xiàn)雖然按下按鍵,但Input
返回值是0
的情況。
將速度計(jì)算和修改剛體屬性的代碼放到FixedUpdate
函數(shù)。
當(dāng)比爾轉(zhuǎn)身的時(shí)候,不會(huì)立刻向反方向移動(dòng),而有一個(gè)逐漸減速的剎車(chē)效果。這樣與原版不一致。
處理方法是,菜單"Edit->Project Settings->Input Manager->Axes(展開(kāi))->Horizontal(展開(kāi))"
,將Snap
屬性勾選。這樣轉(zhuǎn)身時(shí)就沒(méi)有剎車(chē)效果了。
檢測(cè)是否站在地上
onGround=Physics2D.Raycast(transform.position, Vector3.down, 0.1f, 1 << LayerMask.NameToLayer(“跳臺(tái)”));
精靈圖
隨便拿一張
放到unity里
設(shè)置成這個(gè)
sprite editor里
點(diǎn)擊 slice
就分割了
再看資源 就被分割成了小圖
可以在 sprite editor 里點(diǎn)擊子圖 設(shè)置一些參數(shù) 比如pivot
這個(gè)是干啥的?
假如你希望 你的對(duì)象是一格子一格子的移動(dòng)的話 也就是一個(gè)步進(jìn)移動(dòng) 咋辦?
按住ctrl 再拖動(dòng)三根線 就可以了
他會(huì)按照你設(shè)定的值 移動(dòng)
寫(xiě)著一半死機(jī)了。。暈了 草稿都丟了
整一張圖
放游戲里顯示是這樣的
模模糊糊 沒(méi)有像素的顆粒感
你需要設(shè)置紋理的這個(gè)
看到?jīng)] 一下子清晰了
現(xiàn)在旋轉(zhuǎn)一下
和右邊相比 有沒(méi)有覺(jué)得 又不那么像素了?缺少了鋸齒
可以設(shè)置下鏡頭里的這個(gè)
現(xiàn)在感覺(jué)差不多了!
如果讓他連續(xù)轉(zhuǎn)起來(lái)會(huì)發(fā)現(xiàn)奇奇怪怪的。
設(shè)計(jì)窗口和game窗口顯示的效果是不一樣的
不填充 用不到
豎向填充
橫向填充
窗口模式 固定大小
回想一下 h5 你是怎么做動(dòng)畫(huà)的
是不是把動(dòng)畫(huà) 像 image label 一樣 直接托到stage上
unity不是 因?yàn)閡nity是組件形式的
所以他沒(méi)有專門(mén)的動(dòng)畫(huà)
他的邏輯是
任何一個(gè)sprite 都可以通過(guò)添加 Animator 組件 變成動(dòng)畫(huà)
那如何做動(dòng)畫(huà)
選中動(dòng)畫(huà)的幾個(gè)圖
直接拖拽到場(chǎng)景里就可以了
unity會(huì)提示你創(chuàng)建New Animation.anim 文件
這個(gè)就是動(dòng)畫(huà)文件
這一點(diǎn)和h5不一樣 h5是一個(gè)動(dòng)作文件里面有好多動(dòng)作
unity不是 一個(gè)動(dòng)畫(huà)就是一個(gè)單獨(dú)的文件
比如跑 跳 都是單獨(dú)的文件
unity還會(huì)自動(dòng)幫你創(chuàng)建好 controller文件
單獨(dú)的anim 是不能用的
你需要在sprite上掛一個(gè) Animator 組件
然后掛上創(chuàng)建的那個(gè)controller文件。
3d也是一樣的邏輯。
如果希望光源產(chǎn)生陰影 那么一定要打開(kāi)燈光的這個(gè)
然后給需要產(chǎn)生陰影的加
Shadow Caster 2D 組件
接受陰影
你會(huì)發(fā)現(xiàn)
看 有陰影和光源了!
燈光可以開(kāi)啟 normal maps 這個(gè)會(huì)開(kāi)啟法線貼圖
可以設(shè)置法線貼圖 我瞎畫(huà)的
最后變成這樣了
創(chuàng)建地圖
他長(zhǎng)這樣
在tile palette視圖里 創(chuàng)建新的調(diào)色板
然后把你的資源托進(jìn)去就可以了 可以是單獨(dú)的圖 也可以是圖集 都行
你需要設(shè)置一下grid的大小
不然你會(huì)發(fā)現(xiàn) 拖進(jìn)去的格子 太大或者太小了
比如 我拖進(jìn)去的地面 大小是30像素 進(jìn)去結(jié)果是這樣的
改成0.3 0.3
就ok了
可以用這個(gè)操作
移動(dòng)啊 刪除啊 選中 都是這里
我刷了一個(gè)超級(jí)瑪麗的 非常方便
任意選中一個(gè)格子
可以進(jìn)行一些操作 比如
插入一行 插入一列等
你會(huì)發(fā)現(xiàn)變這樣了
這樣就不用自己挨個(gè)移動(dòng)了
選中裁切出來(lái)的資源
長(zhǎng)這樣
可以選擇 碰撞體
Tilemap Collider 2D 組件不會(huì)為此瓦片生成任何碰撞體形狀。
Tilemap Collider 2D 組件基于分配給瓦片的精靈生成碰撞體形狀。碰撞體形狀基于為精靈設(shè)置的 Custom Physics Shape。
Tilemap Collider 2D 組件基于網(wǎng)格單元格的形狀(由 Grid 組件的選定單元格布局確定)生成碰撞體形狀。
還可以設(shè)置一下調(diào)色盤(pán)參數(shù)哦
接下來(lái) 如何給tile map 放碰撞呢?
只需要在tilemap上掛上
tilemap collider 2d 組件 就可以了
就會(huì)這樣子
想創(chuàng)建簡(jiǎn)單的tile 動(dòng)畫(huà)咋辦呢
創(chuàng)建 Animated Tile
他長(zhǎng)這樣子
里面可以設(shè)置現(xiàn)實(shí)哪些圖
然后把這個(gè)文件拖拽到你的調(diào)色盤(pán)里
就可以了
到了游戲里 他會(huì)自動(dòng)切換顯示的
這個(gè)適合做一些海洋啊 草地啊 什么的
RuleTile
https://docs.unity3d.com/Packages/com.unity.2d.tilemap.extras@4.0/manual/RuleTile.html
老規(guī)矩 先new一個(gè)
直接拖拽到 調(diào)色盤(pán)里
就可以用了
他是一個(gè)類似九宮格的
先設(shè)置默認(rèn)顯示的
然后就是設(shè)置這個(gè)了
這個(gè)是啥意思呢
x 就是不是這個(gè)的意思 比如 空的 或者 別的tile
舉個(gè)例子
比如這樣的
顯示出來(lái)就是這樣的
他判斷 上面如果不是這個(gè) 就會(huì)顯示
如果是綠色箭頭呢
這個(gè)意思是說(shuō) 如果是這個(gè) 就顯示
如果這樣呢
就會(huì)如此
因?yàn)橹虚g是旋轉(zhuǎn)
Tilemap Collider 2D Composite Collider 2D
只添加 Tilemap Collider 2D
那么 每個(gè)格子都是單獨(dú)計(jì)算碰撞的
性能低下
如果想合并 就需要勾選 composite
但是需要添加 Composite Collider 2D組件
這時(shí)候你會(huì)發(fā)現(xiàn) 碰撞線 變化了
變成一整個(gè)的
大家都玩過(guò)魂斗羅吧
從下面的平臺(tái)跳到上面的平臺(tái) 不會(huì)被阻擋 并且 會(huì)承載住玩家
這個(gè)要用
Platform Effector 2D
并且勾選這個(gè)
如果調(diào)成360
那么任何角度都不能穿過(guò)去
如果是180 那么從下到上 可以跳上去
如果你讓主角 跳起來(lái) 會(huì)發(fā)現(xiàn) 他穿到地里去了
速度太快 穿模了
主角的改成這樣就可以了文章來(lái)源:http://www.zghlxwxcb.cn/news/detail-423331.html
如果你想 按照y軸 排序
找到這個(gè)
改 Transparency Sort Mode 就可以了文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-423331.html
到了這里,關(guān)于Unity Physics2D 2d物理引擎游戲 筆記的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!