Unity C# 初级编程| 10 . 角色跳跃练习
实现物体跳跃
创建俩个物体一个角色,一个地面。


给操作物体增加一个物理碰撞,

因为是2D游戏,所以3D物体使用2D碰撞也是没有关系的。
所以地面也想要增加一个碰撞

调整物体位置高一点,设置一下重力

调整摄像机在游戏视图显示成2D效果

创建一个脚本—MyJump跳

制作前思考一下,需要怎么制作。
根据我们前面学习到的知识,前制作一个左右移动
那就需要一个移动速度
需要我们对这个物体操作
前创建俩个变量

一个是指定我们的物体 一个是设置移动速度
Stadt() 脚本执行调用一次

执行的时候调用我们的这个物体
前使用我们原来学习过的方法制作一个左右位移动
定义一个局部变量 moveInput (移动输入)

使用位移函数

这个效果制作完了,确定是可以位移了,可以会插到墙壁里面

这不是我们想要的效果
准备使用第二种 新的位移方式 控制碰撞体移动
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);
扩展
注意:
为什么不使用第一种方法,是因为我们如果碰到竖着的墙面会插入墙壁,使用第二种碰撞正好
设置这个物体
第二个阶段 设置跳
新建一个布尔类型的变量,判断,角色是否跳起来了,

第二个步是,需要一个位置类型,判断角色是否站到平面上。所以需要创建一个Transform类型
还需要一个判断这个位置半径的变量。(float类型)

还需要判断一下和那个层级发生检测

那看一下外部属性

做这一步的目的是判断是否可以按空格

定义一个新变量,控制跳起的速度
外部给角色制作一个判断地面的Transform
编辑器打开主角———右建创建一个——命名feetPos


命名,为了好在场景中看到,在右边设置一下。

这样在场景中看到的效果就更好了。我们需要吧这个定位点放到角色脚下。

指定到我们脚本的位置,设置属性
下面的Whadt 需要创建一个新的层级,
在Layer里增加一个

新的层级 Ground 把地面物体设置这个层,


表示这个人物脚点的挂点和这个物体判断。

点击播放看一下效果
现在的效果是按空格跳起来的时候,在按一下空格还会在跳,无限高,所以需要限制一下
Check Padous 判断值太大了, 修改0.3
增加三个变量

点一下空格,走这一段代码

按住空格执行下面这些代码


JumpTme就是外部输入的数值。
判断这个数值,如果大于0 就执行起跳数值,用设置的时间减去执行的时间。
总结

JumpTime 表示空格键可以按多长时间,按的时间越长跳的越高。
这个效果是实现按不同时间实现跳的高度也是不一样的
JumpTime时间越大按住的跳的越高。
正常数值0.5就差不多,