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


給操作物體增加一個物理碰撞,

因為是2D游戲,所以3D物體使用2D碰撞也是沒有關系的。
所以地面也想要增加一個碰撞

調整物體位置高一點,設置一下重力

調整攝像機在游戲視圖顯示成2D效果

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

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

一個是指定我們的物體 ? ?一個是設置移動速度
Stadt() ?腳本執(zhí)行調用一次

執(zhí)行的時候調用我們的這個物體
前使用我們原來學習過的方法制作一個左右位移動
定義一個局部變量 ?moveInput ? (移動輸入)

使用位移函數(shù)

這個效果制作完了,確定是可以位移了,可以會插到墻壁里面

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

rb 就是這個物體 ?velocity ?當前速度, ? ?改變這個當前速度,就可以了,
Rigidbody.velocity ? ? ? ? ? ? ? ? ? ? ? ? ?剛體速度
給我剛體一個速度:
horizontal = Input.GetAxis("Horizontal");
vertical = Input.GetAxis("Vertical");
direction = new Vector3(horizontal,0f,vertical);
rb.velocity = speed * direction;
Rigidbody.MovePosition() ? ? ? ? ? ? ?移動剛體位置
移動到新的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 ? ? ? ? ? ? ? ? ? ? ? ?給剛體一個力
rb.AddForce(transform.forward * thrust);
public float thrust;
rb.AddForce(0, 0, thrust, ForceMode.Impulse);
擴展
注意:
為什么不使用第一種方法,是因為我們如果碰到豎著的墻面會插入墻壁,使用第二種碰撞正好
設置這個物體
第二個階段 設置跳
新建一個布爾類型的變量,判斷,角色是否跳起來了,

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

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

那看一下外部屬性

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

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


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

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

指定到我們腳本的位置,設置屬性
下面的Whadt 需要創(chuàng)建一個新的層級,
在Layer里增加一個

新的層級 Ground ?把地面物體設置這個層,


表示這個人物腳點的掛點和這個物體判斷。

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

點一下空格,走這一段代碼

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


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

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