游戏制作之路(19)角色实现向上跳动

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/caimouse/article/details/82456014

前面介绍了角色可以四个方向进行移动了,但是角色不能向上跳动,意味着角色还是在一个二维空间里走动,要让角色像人一样,可以跳起来,实现三维移动。我们来仔细观看一下人的跳动,当你双脚用力蹦一下时,人的身体就有一个初始速度,向天空上飞起来,但由于地球给人一个引力,所以速度会慢慢地减慢,减到0,然后又开始向地面加速落下来。在游戏世界里是一样的,我们要给角色一个y轴的初始速度,它就会向上跳起,然后模拟重力,把速度慢慢地变慢,就角色就会停下来,最后慢慢最加速掉下来。
接着下来,我们要把这些内容转换为代码,先来看一下前面的移动的代码:

        Vector3 input = new Vector3(Input.GetAxisRaw("Horizontal"), 0, Input.GetAxisRaw("Vertical"));
        gameObject.GetComponent<CharacterController>().Move(transform.TransformDirection(input * speed * Time.deltaTime));

可以发现这行代码,只有四个方向移动,也就是水平和垂直方向的移动,要在这里添加Y轴方向的移动向量,就可以了。因此,增加一个向上跳起和落下的速度变量,如下:

private float yVelocity = 0;

接着下来,定义一个初始速度的常量和一个重力加速度的常量,如下:

    public float jumpSpeed = 15.0f;
    public float gravity = 30.0f;

然后在Update函数里更新移动代码,主要增加Y轴方向的坐标改变,如下:

gameObject.GetComponent<CharacterController>().Move(transform.TransformDirection(input * speed * Time.deltaTime + yVelocity * Vector3.up * Time.deltaTime));

在这里与前面的代码对比,发现后面多了跳起的代码:

yVelocity * Vector3.up * Time.deltaTime

在这里第一个变量是角色Y轴的速度,Vector3.up是Y轴的向上的方向量,Time.deltaTime是随着每秒时间更新移动位置。

接着增加跳动的触发代码,就是增加按钮检测,如下:

if (Input.GetButtonDown("Jump"))
        {
            yVelocity = jumpSpeed;
        }

当玩家按下空格键时,角色就获得初始速度,这样就向上的方向进行飞起,如果没有增加重力作用,角色会一起飞向太空,因此需要增加重力为约束角色的向上的速度,如下:

yVelocity -= gravity * Time.deltaTime;

这里就是把向上的速度进行减少,还会慢慢地向下加速移动。这就是增加重力作用的效果,这时你可以按下play来跳动了。如下图:

到这里,就实现了角色进行跳动。

TensorFlow API攻略
http://edu.csdn.net/course/detail/4495
TensorFlow入门基本教程
http://edu.csdn.net/course/detail/4369
C++标准模板库从入门到精通 
http://edu.csdn.net/course/detail/3324

猜你喜欢

转载自blog.csdn.net/caimouse/article/details/82456014
今日推荐