Unity C# 初級(jí)編程| 10 . 角色跳躍練習(xí)
實(shí)現(xiàn)物體跳躍
創(chuàng)建倆個(gè)物體一個(gè)角色,一個(gè)地面。


給操作物體增加一個(gè)物理碰撞,

因?yàn)槭?D游戲,所以3D物體使用2D碰撞也是沒有關(guān)系的。
所以地面也想要增加一個(gè)碰撞

調(diào)整物體位置高一點(diǎn),設(shè)置一下重力

調(diào)整攝像機(jī)在游戲視圖顯示成2D效果

創(chuàng)建一個(gè)腳本—MyJump跳

制作前思考一下,需要怎么制作。
根據(jù)我們前面學(xué)習(xí)到的知識(shí),前制作一個(gè)左右移動(dòng)
那就需要一個(gè)移動(dòng)速度
需要我們對這個(gè)物體操作
前創(chuàng)建倆個(gè)變量

一個(gè)是指定我們的物體 ? ?一個(gè)是設(shè)置移動(dòng)速度
Stadt() ?腳本執(zhí)行調(diào)用一次

執(zhí)行的時(shí)候調(diào)用我們的這個(gè)物體
前使用我們原來學(xué)習(xí)過的方法制作一個(gè)左右位移動(dòng)
定義一個(gè)局部變量 ?moveInput ? (移動(dòng)輸入)

使用位移函數(shù)

這個(gè)效果制作完了,確定是可以位移了,可以會(huì)插到墻壁里面

這不是我們想要的效果????????????????????????
準(zhǔn)備使用第二種 新的位移方式 控制碰撞體移動(dòng)
Rigidbody.velocity (剛體的速度向量)

rb 就是這個(gè)物體 ?velocity ?當(dāng)前速度, ? ?改變這個(gè)當(dāng)前速度,就可以了,
Rigidbody.velocity ? ? ? ? ? ? ? ? ? ? ? ? ?剛體速度
給我剛體一個(gè)速度:
horizontal = Input.GetAxis("Horizontal");
vertical = Input.GetAxis("Vertical");
direction = new Vector3(horizontal,0f,vertical);
rb.velocity = speed * direction;
Rigidbody.MovePosition() ? ? ? ? ? ? ?移動(dòng)剛體位置
移動(dòng)到新的position:
Vector3 movement; float h = Input.GetAxisRaw("Horizontal");
float v = Input.GetAxisRaw("Vertical");
movement.Set(h, 0f, v);
movement = movement.normalized * speed * Time.deltaTime;
playerRigidbody.MovePosition(transform.position + movement);
Rigidbody.AddForce ? ? ? ? ? ? ? ? ? ? ? ?給剛體一個(gè)力
rb.AddForce(transform.forward * thrust);
public float thrust;
rb.AddForce(0, 0, thrust, ForceMode.Impulse);
擴(kuò)展
注意:
為什么不使用第一種方法,是因?yàn)槲覀內(nèi)绻龅截Q著的墻面會(huì)插入墻壁,使用第二種碰撞正好
設(shè)置這個(gè)物體
第二個(gè)階段 設(shè)置跳
新建一個(gè)布爾類型的變量,判斷,角色是否跳起來了,

第二個(gè)步是,需要一個(gè)位置類型,判斷角色是否站到平面上。所以需要?jiǎng)?chuàng)建一個(gè)Transform類型
還需要一個(gè)判斷這個(gè)位置半徑的變量。(float類型)

還需要判斷一下和那個(gè)層級(jí)發(fā)生檢測

那看一下外部屬性

做這一步的目的是判斷是否可以按空格

定義一個(gè)新變量,控制跳起的速度
外部給角色制作一個(gè)判斷地面的Transform
編輯器打開主角———右建創(chuàng)建一個(gè)——命名feetPos


命名,為了好在場景中看到,在右邊設(shè)置一下。

這樣在場景中看到的效果就更好了。我們需要吧這個(gè)定位點(diǎn)放到角色腳下。

指定到我們腳本的位置,設(shè)置屬性
下面的Whadt 需要?jiǎng)?chuàng)建一個(gè)新的層級(jí),
在Layer里增加一個(gè)

新的層級(jí) Ground ?把地面物體設(shè)置這個(gè)層,


表示這個(gè)人物腳點(diǎn)的掛點(diǎn)和這個(gè)物體判斷。

點(diǎn)擊播放看一下效果
現(xiàn)在的效果是按空格跳起來的時(shí)候,在按一下空格還會(huì)在跳,無限高,所以需要限制一下
Check Padous 判斷值太大了, 修改0.3
增加三個(gè)變量

點(diǎn)一下空格,走這一段代碼

按住空格執(zhí)行下面這些代碼


JumpTme就是外部輸入的數(shù)值。
判斷這個(gè)數(shù)值,如果大于0 就執(zhí)行起跳數(shù)值,用設(shè)置的時(shí)間減去執(zhí)行的時(shí)間。
總結(jié)

JumpTime ? 表示空格鍵可以按多長時(shí)間,按的時(shí)間越長跳的越高。
這個(gè)效果是實(shí)現(xiàn)按不同時(shí)間實(shí)現(xiàn)跳的高度也是不一樣的
JumpTime時(shí)間越大按住的跳的越高。
正常數(shù)值0.5就差不多,