《游戏-03_2D-开发》

基于《游戏-02_2D-开发》,

继续制作游戏:

首先要做的时切割人物Idle空闲状态下的动画,

《游戏-03_2D-开发》_第1张图片

在切割之前我们需要创建一个文件夹,用来存放动画控制器AnimatorContoller,

《游戏-03_2D-开发》_第2张图片

再创建一个人物控制器文件夹用来存放人物控制器,

《游戏-03_2D-开发》_第3张图片

创建人物动画控制器PlayerAC(PlayerAnimatorController)

《游戏-03_2D-开发》_第4张图片

为Player添加人物组件Animator

《游戏-03_2D-开发》_第5张图片

将新建动画器PlayerAC拖拽至组件Animator中,

《游戏-03_2D-开发》_第6张图片

双击PlayerAC(自定义人物动画控制器)即可打开进行设置,

《游戏-03_2D-开发》_第7张图片

注意:鼠标中键可以移动 动画框,鼠标滚轮可以放大或缩小,

打开动画时间轴调整 动画时间轴 与 动画控制器的位置,

《游戏-03_2D-开发》_第8张图片

在动画时间轴中我们可以创建 动画单元Animation Clip

《游戏-03_2D-开发》_第9张图片

选择存放位置创建文件夹,命名为BlueIdle

《游戏-03_2D-开发》_第10张图片

将Idle 1-5动画拖拽至 动画时间轴中,

《游戏-03_2D-开发》_第11张图片

点击开始播放动画可以看到Player抽动,

《游戏-03_2D-开发》_第12张图片

接下来设置 动画时间轴的时间帧率显示,

《游戏-03_2D-开发》_第13张图片

将帧率设置为10,运行或者播放动画,人物在Idle就有了动画效果,

《游戏-03_2D-开发》_第14张图片

接下来创建人物的跑动动画,

《游戏-03_2D-开发》_第15张图片

存放位置与命名,

《游戏-03_2D-开发》_第16张图片

可以看到人物跑动是第三排,

《游戏-03_2D-开发》_第17张图片 将人物跑动动画拖拽至 动画时间轴 中,

《游戏-03_2D-开发》_第18张图片

设置跑动的动画帧率,

《游戏-03_2D-开发》_第19张图片

此时在动画控制器中也会增加了一个人物跑动的动画方框,

创建连线,

《游戏-03_2D-开发》_第20张图片

点击线会变成蓝色,

《游戏-03_2D-开发》_第21张图片

注意:在退出时间 为 0.58 代表 动画在播放了百分之58就切换到下一个动画中

我们在这里把退出时间改为1 代表 动画在播放了一次百分之百就切换到下一个动画,

《游戏-03_2D-开发》_第22张图片

接下来我们创建 转换(连线)变量,

《游戏-03_2D-开发》_第23张图片

《游戏-03_2D-开发》_第24张图片

设置线,

《游戏-03_2D-开发》_第25张图片

创建脚本,

《游戏-03_2D-开发》_第26张图片

编写代码:

using UnityEngine;
public class PlayerAnimation : MonoBehaviour{
    Animator anim;
    Rigidbody2D rb;
    void Awake(){
        anim = GetComponent();        
        rb = GetComponent();
    }
    void Update(){
        SetAnimation();
    }
    public void SetAnimation() {
        anim.SetFloat("velocityX", Mathf.Abs(rb.velocity.x));
    }
}

注意velocityX是我们在unity动画控制器 转换变量自定义设置的变量,

《游戏-03_2D-开发》_第27张图片

同样手法做返回Idle空闲的连线,

《游戏-03_2D-开发》_第28张图片

此时运行项目停止跑动后即停止,

《游戏-03_2D-开发》_第29张图片

接下来在做走路的动画,

首先创建一个走路动画文件夹,

《游戏-03_2D-开发》_第30张图片

《游戏-03_2D-开发》_第31张图片

走路动画在第二张图片,

《游戏-03_2D-开发》_第32张图片

对第二张图片进行切割设置,

《游戏-03_2D-开发》_第33张图片

进行切割,

《游戏-03_2D-开发》_第34张图片

《游戏-03_2D-开发》_第35张图片

切割好之后留意第二张图0-9就是走路动画,

《游戏-03_2D-开发》_第36张图片

拖拽至 新建的走路 动画时间轴中,设置帧率为14,

《游戏-03_2D-开发》_第37张图片

设置线,

《游戏-03_2D-开发》_第38张图片

《游戏-03_2D-开发》_第39张图片

《游戏-03_2D-开发》_第40张图片

《游戏-03_2D-开发》_第41张图片

以上是通过摇杆 控制人物走路 以及跑步的操作,

接下来稍微改动 动画器 以及 脚本 就可以换成键盘输入控制人物移动以及跑步动画的操作,

首先修改人物动画控制器,

新增bool变量isRun

《游戏-03_2D-开发》_第42张图片

设置连线,这样设置停止方向键的移动控制没有了速度,人物就会停止,

《游戏-03_2D-开发》_第43张图片

《游戏-03_2D-开发》_第44张图片

速度大于0.1 也就是对键盘方向键有水平的操作就会移动让人物进入行走状态,

《游戏-03_2D-开发》_第45张图片

通过人物由行走到跑步的状态 设置 isRun = true

《游戏-03_2D-开发》_第46张图片

反之,

《游戏-03_2D-开发》_第47张图片

修改代码:

《游戏-03_2D-开发》_第48张图片

using UnityEngine;
public class PlayerAnimation : MonoBehaviour{
    Animator anim;
    Rigidbody2D rb;
    void Awake(){
        anim = GetComponent();        
        rb = GetComponent();
    }
    void Update(){
        SetAnimation();
    }
    public void SetAnimation(){
        anim.SetFloat("velocityX", Mathf.Abs(rb.velocity.x));
        if (Input.GetKeyDown(KeyCode.Q))
            anim.SetBool("isRun", !anim.GetBool("isRun"));
    }
}
即可实现按方向键左/右 进行移动并由Idle动画切换为Walk动画,

按一下Q键,即可切换成跑步准备动画,再按方向键可以实现跑步的移动,

再按一下Q键,即可取消跑步准备动画,

《游戏-03_2D-开发》_第49张图片

接下来创建人物跳跃动画,

在下图中跳跃分为五个阶段,

《游戏-03_2D-开发》_第50张图片

《游戏-03_2D-开发》_第51张图片

我们需要对其修改名字进行区分是哪个阶段,

对前两个进行重命名,

《游戏-03_2D-开发》_第52张图片

《游戏-03_2D-开发》_第53张图片

《游戏-03_2D-开发》_第54张图片

《游戏-03_2D-开发》_第55张图片

《游戏-03_2D-开发》_第56张图片

《游戏-03_2D-开发》_第57张图片

《游戏-03_2D-开发》_第58张图片

《游戏-03_2D-开发》_第59张图片

《游戏-03_2D-开发》_第60张图片

《游戏-03_2D-开发》_第61张图片

《游戏-03_2D-开发》_第62张图片

《游戏-03_2D-开发》_第63张图片

《游戏-03_2D-开发》_第64张图片

《游戏-03_2D-开发》_第65张图片

《游戏-03_2D-开发》_第66张图片

《游戏-03_2D-开发》_第67张图片

重命名之后保存,

《游戏-03_2D-开发》_第68张图片

接下来创建这五个阶段跳跃的动画,

《游戏-03_2D-开发》_第69张图片

《游戏-03_2D-开发》_第70张图片

以此类推,

《游戏-03_2D-开发》_第71张图片

《游戏-03_2D-开发》_第72张图片

《游戏-03_2D-开发》_第73张图片

《游戏-03_2D-开发》_第74张图片

五个跳跃阶段分别代表:

《游戏-03_2D-开发》_第75张图片

《游戏-03_2D-开发》_第76张图片

《游戏-03_2D-开发》_第77张图片

《游戏-03_2D-开发》_第78张图片

《游戏-03_2D-开发》_第79张图片

《游戏-03_2D-开发》_第80张图片

我们不希望这五个动画都在Base Layer层级中,将新建的五个动画在Base Layer层级中删除,

《游戏-03_2D-开发》_第81张图片

接下来创建一个混合树,

《游戏-03_2D-开发》_第82张图片

重命名为Jump,

《游戏-03_2D-开发》_第83张图片

双击Jump进入Jump层级,

《游戏-03_2D-开发》_第84张图片

因为跳跃是对纵向的位移,所以我们需要创建一个float类型的转换变量velocityY

《游戏-03_2D-开发》_第85张图片

点击velocityY在motion运动下添加动画,

《游戏-03_2D-开发》_第86张图片

《游戏-03_2D-开发》_第87张图片

将Jump1-4添加进来,因为Jump5阶段已经着陆,所以在y轴不进行移动,

《游戏-03_2D-开发》_第88张图片

混合树的velocity变量可以在0-1之间通过数值的转变来切换动画,拖动velocity即可发现,

《游戏-03_2D-开发》_第89张图片

接下来需要设置这个值来进行切换,我们可以取消勾选进行自己设定值,

《游戏-03_2D-开发》_第90张图片

如何设定可以在游戏中自行进行跳跃查看其中的变化数值,

《游戏-03_2D-开发》_第91张图片

可以看出范围大致为-14~14之间,其中最高点大致为0,

即跳跃这个过程的数值变化 (14 减小 0 减小 -14),

即我们可以这样设置数值,

《游戏-03_2D-开发》_第92张图片

修改代码:

 《游戏-03_2D-开发》_第93张图片

using UnityEngine;
public class PlayerAnimation : MonoBehaviour{
    Animator anim;
    Rigidbody2D rb;
    void Awake(){
        anim = GetComponent();        
        rb = GetComponent();
    }
    void Update(){
        SetAnimation();
    }
    public void SetAnimation(){
        anim.SetFloat("velocityX", Mathf.Abs(rb.velocity.x));
        anim.SetFloat("velocityY", rb.velocity.y);
        if (Input.GetKeyDown(KeyCode.Q))
            anim.SetBool("isRun", !anim.GetBool("isRun"));
    }
}
保存代码后,回到Base Layer层级中,

《游戏-03_2D-开发》_第94张图片

新增bool类型的转换变量,

《游戏-03_2D-开发》_第95张图片

设置线,

由于我们从 Any State进行连线,在任何状态下有一些额外的选项,

我们在设置时,Can Transition To 这个选项一定要取消勾选,不然进到这里的动画会出不来,

   《游戏-03_2D-开发》_第96张图片

《游戏-03_2D-开发》_第97张图片

我们需要添加Jump5的落地动画与 Idle状态做连接,

《游戏-03_2D-开发》_第98张图片

设置线,

《游戏-03_2D-开发》_第99张图片

设置线,这里我们想跳跃动作播放完执行着陆动画,所以设置退出时间为1,

《游戏-03_2D-开发》_第100张图片

一旦跑步就可以打断跳跃,

《游戏-03_2D-开发》_第101张图片

修改代码:将实时的true / false 传递给动画控制器的isGround转换变量中,

《游戏-03_2D-开发》_第102张图片

using UnityEngine;
public class PlayerAnimation : MonoBehaviour{
    Animator anim;
    Rigidbody2D rb;
    PhysicsCheck physicsCheck;
    void Awake(){
        anim = GetComponent();        
        rb = GetComponent();
        physicsCheck = GetComponent();
    }
    void Update(){
        SetAnimation();
    }
    public void SetAnimation(){
        anim.SetFloat("velocityX", Mathf.Abs(rb.velocity.x));
        anim.SetFloat("velocityY", rb.velocity.y);
        anim.SetBool("isGround",physicsCheck.isGround);
        if (Input.GetKeyDown(KeyCode.Q))
            anim.SetBool("isRun", !anim.GetBool("isRun"));
    }
}
运行即可完成跳跃,

《游戏-03_2D-开发》_第103张图片

End.

你可能感兴趣的:(2D游戏,1024程序员节,c#)