Unity的学习笔记-2

本次Unity的学习将跟随 M_Studio 的“Unity2018教程2D入门“进行学习

1月17日已经观看了该教程的5-8

小狐狸的方向设置

我们需要将小狐狸设置成向左走面向左方,向右走面向右方,我们可以在小狐狸的Transform的Scale里调整X值,将1改为-1会发现,小狐狸朝了相反的方向

那么接下来就很简单了,只需要在执行moveMent时,顺便改一下这个Scale,

那么代码如下,GetAxisRaw会返回正负一和零。

        float facedircetion = Input.GetAxisRaw("Horizontal");
        if (facedircetion != 0)
        {
            transform.localScale = new Vector3(facedircetion, 1, 1);
        }

小狐狸跳跃

小狐狸的跳跃本质也就是y轴的变化。

在Edit的Project Setting里有一个Input Manager(输入管理器)可以看到一个Jump

那么就接着创建一个方法体,名为jump,当然需要在前面去声明一个jumpForce,也就是跳跃力。

也和void moveMent(){}一样去写一个jump(){}方法。

    void jump()
    {
        animator.SetBool("jump", Input.GetButtonDown("Jump"));
        if (Input.GetButtonDown("Jump"))
        {
            
            rb.velocity = new Vector2(rb.velocity.x, jumpForce );
        }
    }

添加到Void Update{}

moveMent(){}的优化

update{}是每一帧都在运行,但是不同设备的帧率是不同的,所以应该在void FixedUpdate()里运行Movement(){}, FixedUpdate()是固定运行,默认是每0.02s运行一次。可以在Edit的Project Settings的Time面板中的Fixed Timestep查看

同时,需要将坐标的变化量去乘以一个系统时间Time.deltaTime,因为这个时间会很小,所以去将sped设置成一个较大值。这里设置的是400。

站立 跑动 跳跃动画

这时就需要去添加动画,让画面自然一点。

先Add Compoment,添加一个Animator,接着去单独创建一个Animator Controller,

将这个Controller拖到Animation的Controller内

接着去创建动画,去Window找到Animation,里面有一个Animation,快捷键为Ctrl+6,将它放到合适的位置上,接着选中小狐狸去创建一个动画,右键crate里面的Animation,然后将它拖到小狐狸那里。

接着打开

接着将idle文件夹里的图片用shift全选之后,拖入到Animation,调整动画的时长将其变得自然

接着选择Create New Clip,创建run动画,也是将run文件夹内的图片拖入Animation

接下来打开Animator会看到类似这样的情况,当然你们run和idle并不相互连接

右键去Make Transition,将他们互相连接

同时在Parameters内去创建一个float类型的变量run。

单击白色的线条出现这个

在Conditions内点击加号去添加条件,run去idle是running小于0.1,idle去run是running大于0.1

接下来就是让running这个变量在跑动时去改变这个running的值

在前面声明变量

public Animator animator;

然后再if语句中添加改变running的语句

animator.SetFloat("running", Mathf.Abs(facedircetion));

接下来做跳跃动画

当小狐狸在空中时,应该为这样

在降落时为

那么就应该用单独一张照片作为动画 ,他在跳起时用第一,降落过程中使用第二。

那么就需要两个变量来进行动作的判断,一个是开始起跳到最高点之前,还有一个是最高点到地面的时候。

这两个变量都是bool类型,一个为jump,一个为fall,当jump为true时,就变化为跳起,当jump为false,fall为true时就变换为降落,当jump为false,fall也为false时就切换为idle。

也就是下面这个结构,idle和run可以直接到达jump,jump只能到达fall,fall只能到达idle。

现在就是要在跳起时改变jump为true,到达最高点,也就是速度为0时,改变jump为false,fall为true

,检测到与地面碰撞时,改变fall也为false。

那么就重新写一个改变变量的方法体,跳起很好检测,跳起时,在jump方法里animator.SetBool("jump", true);,然后在新的方法体内检测,当jump为true时,如果y轴速度小于等于0,那么就是最高点了,那么就改变jump为false,fall为true,当到达地面时就可以将fall也变为false,就可以回到idle,到达地面也就是两个碰撞体发生了碰撞,那么就可以新建两个新的变量

    public LayerMask ground;
    public Collider2D coll;

LayerMask可以说是碰撞图层,可以在这里修改地图为grund

先新建,再设置,然后将coll设置成小狐狸的碰撞箱。

然后就可以在代码用coll.IsTouchingLayers(ground)检测碰撞。

代码如下:

    void switchAnimation()
    {

        if (rb.velocity.y < 0)
        {
            animator.SetBool("fall", true);
            animator.SetBool("jump", false);

        }else if (coll.IsTouchingLayers(ground))
        {
            animator.SetBool("fall", false);
        }
    }

遇到的问题

跳起动画有时候不生效。

变化动画的方法的第一个条件不能加上jump为true。

走路会卡地图。

版权声明:除特殊说明,博客文章均为栋dong原创,依据CC BY-SA 4.0许可证进行授权,转载请附上出处链接及本声明。
如有需要,请在留言板留言,或者添加我的QQ或者微信
我只是一个学生,如有错误或者侵权,请联系我,谢!
暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇