Unity2D游戏制作入门 | 07

上期链接:Unity2D游戏制作入门 | 06-CSDN博客

上期我们实现了人物的左右移动和人物的正常翻转(算是正常吧)。这期我们看看如何让人物能够跳跃。本期用到的代码先放下面:

c# 复制代码
public class Player_control : MonoBehaviour
{
    public PlayerInputControl inputControl;
    public Vector2 inputDirection;//public变量表示一个公开的方法,它代表我在Unity窗口中可以查看得到。
    private Rigidbody2D rb;
    private SpriteRenderer rbSprite;
    [Header("基本参数")]
    public float speed;
    public float jumpForce;


    private void Awake()
    {
        rb= GetComponent<Rigidbody2D>();
        inputControl = new PlayerInputControl();
        inputControl.GamePlayer.Jump.started += Jump;

        rbSprite = GetComponent<SpriteRenderer>();

    }
    
    private void OnEnable()
    {
        inputControl.Enable();
    }

    private void OnDisable()
    {
        inputControl.Disable();
    }

    private void Update()
    {
        inputDirection = inputControl.GamePlayer.Move.ReadValue<Vector2>();
    }



    private void FixedUpdate()//固定频率运行,即0.02秒执行一次。跟物理有关的放在这执行
    {
        Move();
    }

    public void Move()
    {
        rb.velocity = new Vector2(inputDirection.x*speed*Time.deltaTime,rb.velocity.y);

        int faceDir = (int)transform.localScale.x;//人物面朝的真实方向
        if (inputDirection.x > 0)
            faceDir = 1;
        if (inputDirection.x < 0)
            faceDir =-1;
        //人物翻转
        transform.localScale = new Vector3(faceDir,1,1);

    }

    private void Jump(InputAction.CallbackContext obj)
    {

        rb.AddForce(jumpForce*transform.up,ForceMode2D.Impulse);//第一个参数表示给哪个方向施加力
    }

}

正文:

我们先解决第一个问题,按什么按钮让人物跳起来?电脑一般选择空格键,所以我们先编辑一下按键。先进入我们之前创建的inputsystem中:

我们创建新的Actions起名叫jump(跳跃),然后用Path绑定空格键即可,使用控制计划(Use in control scheme)我们勾选键盘和鼠标。

手柄的跳跃绑定也弄一下(因为我是没有手柄的,所以直接搜索关键词south就可以):

首先我们要知道,人物能够左右走靠的是摩檫力(这个人物的材质以后会用到,现在可以先不管),人物跳跃也是靠一个力,它可以是一个瞬时的力。我们进入之前人物控制的代码,我们创建新的变量来表示这个推或是拉的力:

c# 复制代码
public float jumpForce;//给物体施加的力

一个技巧:我们会在代码中创建许多的变量,当然我们希望能分类进行更好的管理,所以我们可以如下创建分栏

c# 复制代码
[Header("基本参数")]
 public float speed;
 public float jumpForce;

回归正题,我们得用jumpForce作用到我们的Rigbody上,而且是y轴即纵轴上施加这个力。人物被施加力会跳起来,但是因为加了rigbody组件,重力成了物体的固有属性所以最终还是会下落的。

c# 复制代码
private void Awake()
    {
        rb= GetComponent<Rigidbody2D>();
        inputControl = new PlayerInputControl();
        inputControl.GamePlayer.Jump.started += Jump;//新加的
		//inputControl.GamePlayer.Jump.started += xxx;可以有多个注册函数,到时按下的那一刻一起执行
        rbSprite = GetComponent<SpriteRenderer>();

    }
....
private void Jump(InputAction.CallbackContext obj)//新加函数
    {
        rb.AddForce(jumpForce*transform.up,ForceMode2D.Impulse);
    }

我们先在之前的Awake函数中加入inputControl.GamePlayer.Jump.started += Jump;

解读一下:Jump的可选方法有很多,我们选择started(还有一些比如cancel表示按键按下抬起的那一瞬间进行执行,或performed表示按键如果一直按下不抬起就会一直执行),表示在空格按键按下的那一刻(因为要快速且能精准的执行)就立刻执行,所以针对跳跃这种单次执行的函数,我们放在start里执行。而start是一个事件函数,我们要添加一个事件注册的函数,注册内容用+=进行事件的注册,+=的意思是把后面的函数方法添加到你按下按键的那一刻进行执行,而注册的函数叫Jump(目前是Jump)。

接下来我们测试,先将rigbody中的gravity scale的重力规模改成4,然后给跳跃施加的力改为16.5(经UP测试的舒服的起跳方式,你也可以自己摸索),运行游戏进行跳跃吧!

但是会有一些问题(下期解决),比如:

①可以一直跳,应该是判断人物是不是在地面上,在的话才可以跳。(针对一段跳,二段跳的话我们需要允许人物可以在空中在跳跃一次)

②如果跳到墙上,然后你的水平方向键又没有松开,你会一直粘在墙上,松开才会掉下去。

总结:

本节也是触摸到了事件的门槛,然后更多组件的使用方法还是要去看看代码手册的实例。还是要多多看例子和手册哦,手册十分地好用好吧。

补充:

1、新技巧,windows电脑按下alt+方向键可以调整当前代码的行数向上或向下移动换位。

2、如果想知道组件的内容更改方法,你可以去代码手册看看,手册是给你在面板看到的东西的解释,而右边的API,如果你想更改面板上显示的东西,就要用到API,如果你搜索rigidbody2D就会有它对应的一些方法。

未尽事宜以后可能会补充。

---------------------结束线

相关推荐
奋发向前wcx7 小时前
y1,y2总复习笔记10 2026.7.24
笔记·哈希算法·散列表
MuMuMu12238 小时前
智慧监测的“火眼金睛”:当AIoT重构环保监管体系
笔记
一只小菜鸡..9 小时前
南京大学 操作系统 (JYY) 学习笔记:进程地址空间与内存“外挂”魔法
笔记·学习
一只小菜鸡..10 小时前
南京大学 操作系统 (JYY) 学习笔记:访问操作系统的对象与“一切皆文件”
笔记·学习
派葛穆12 小时前
Unity-UI 按钮点击弹窗功能
unity·游戏引擎
摇滚侠16 小时前
《RocketMQ 官网》阅读笔记 RocketMQ 消息队列 MessageQueue 消息 Messagege
笔记·rocketmq
Ztt66666666616 小时前
【无标题】
经验分享·笔记·其他·百度·微信公众平台
toponad16 小时前
Unity Ads Bidding 现已正式加入TopOn 聚合平台
unity·topon
依然范特东17 小时前
强化学习笔记4--TD算法
笔记
AOwhisky17 小时前
Linux(CentOS)系统管理入门笔记(第十五期)——文件系统与存储管理(上篇):设备识别、挂载与文件查找
linux·运维·笔记·centos·文件系统