在上一节的内容里,我们已经创建出了一个主角,也搭建了一个简单的场景。

传送门:https://www.cnblogs.com/zny0222/p/12653088.html

既然有了主角,要怎样才能让主角动起来呢?

这时候我们就需要写一些简单的代码,来控制我们人物的移动。

如图所示,我们新建一个文件夹,用来保存我们的脚本。

在制作游戏的过程中,我们应该分门别类的存放素材,这样才能方便管理。

创建好文件夹之后,新建一个C#脚本,并且把脚本挂到我们的主角上,只要拖拽过去就好啦!

在开始编写代码之前,我们先了解一下unity当中的Input Manager

在左上角找到编辑 -> 项目设置 -> InputManager

我们先从水平移动开始,在InputManager中找到“水平”,发现对应的名称是“Horizontal”。

并且对应的按键是方向键的左键和右键,如果你不喜欢这样,也可以更改为其他的按键。

让我们记住这些信息,然后开始编写代码吧!(如果你还没有vs,请先下载安装vs)

双击我们的脚本,unity会自动在vs当中打开脚本。

using System.Collections;
using System.Collections.Generic;
using UnityEngine; public class MyPlayer : MonoBehaviour
{
public Rigidbody2D Pl;
public float speed; void Start()
{ } void Update()
{
Move();
} void Move()
{
float horizontalmove = Input.GetAxisRaw("Horizontal"); // 从 input manager 接收“水平”输入的值。
Pl.velocity = new Vector2(horizontalmove * speed, Pl.velocity.y);
if (horizontalmove != )
{
transform.localScale = new Vector3(horizontalmove, , ); // 控制角色转身
}
} }

可以看到,我们使用了2个变量。第一个变量Pl,用来获取角色的刚体。第二个变量speed,用来控制角色行走的速度。为什么都定义为public的变量呢?

这是因为,定义为public的变量,可以直接在unity引擎中看到。我们可以直接把组件拖拽上去,或是直接在unity界面修改变量的数值。这样做可以便于我们日后的改动。当然,不是所有变量都应该定义为public哦。

写好了这些代码之后(代码在保存后才会生效,不要忘了 ctrl + s 哦),主角就可以横向移动了!

如果你的主角在走路时摔倒了,只要在刚体的设置中,将冻结旋转Z轴勾上就好啦。

还记得在上一节里,我们制作主角的碰撞时,使用的是两个碰撞器。这时候就体现出效果啦!因为瓦片地图的有些地方可能并不是那么精确,如果只用一个方形的碰撞器,方形碰撞器的直角可能会被瓦片地图上的小突起给卡住。为了避免这个问题,我们在主角的下半部分采用圆形的碰撞器,这样就不会被卡住了。

做到这里,我们的人物还没有任何动作,只能横向的平移。接下来,让我们一起给主角添加动画效果吧!

public Rigidbody2D Pl;
public float speed;
public Animator anima;

首先,我们要新增一个动画器的变量,我给它起名叫anima,你也可以取其他名字。

然后给主角添加一个动画器,并拖拽到我们的脚本上。接下来就可以开始制作了。

点击 窗口 -> 动画 -> 动画 ,并找到素材包中的动画素材。

完成了以上步骤,我们就拥有站立和跑动两个动画了。那么什么时候使用这两个动画呢?

点击 窗口 -> 动画 -> 动画器,并完成以下操作。

确保站立的动画是默认状态,在站立跑动这两个动画之间创建过渡。添加一个float参数,用来判断站立跑动之间的转换。

using System.Collections;
using System.Collections.Generic;
using UnityEngine; public class MyPlayer : MonoBehaviour
{
public Rigidbody2D Pl;
public float speed;
public Animator anima;
void Start()
{ } void Update()
{
Move();
} void Move()
{
float horizontalmove = Input.GetAxisRaw("Horizontal");
Pl.velocity = new Vector2(horizontalmove * speed, Pl.velocity.y);
if (horizontalmove != )
{
transform.localScale = new Vector3(horizontalmove, , );
}
anima.SetFloat("running", Mathf.Abs(horizontalmove));
}
}

添加了倒数第3行的代码,这样就可以让我们的float变量获取角色移动的值了。

点击过渡箭头,取消退出时间,并添加一个条件,即为我们刚才设置的那个变量。当我们的float变量running小于0.1时,我们就从跑动状态回到站立状态。

要从站立状态进入跑步状态,只要点击另一个过渡箭头,把小于0.1改为大于0就好啦,请自己试着做做看吧!

完成了这些内容,我们的人物就能够跑动并具有动画效果了。下一节将会介绍人物的跳跃和地面检测。如果觉得这篇文章对你有帮助,请点赞关注吧

Unity引擎入门——制作第一个2D游戏(2)角色移动与动画的更多相关文章

  1. Unity引擎入门——制作第一个2D游戏(1)

    Unity作为当今最流行的游戏引擎之一,受到各大厂商的喜爱. 像是炉石传说,以及最近的逃离塔克夫,都是由unity引擎开发制作. 作为初学者的我们,虽然无法直接做出完成度那么高的作品,但每一个伟大的目 ...

  2. 【使用Unity开发Windows Phone上的2D游戏】(2)初识工具

    下载工具 我们需要下载两个工具:Unity 和 2D Toolkit Unity 在我写这篇文章的时候,最新的Unity版本是4.2.1, 下载地址 Unity公司的开发效率实在是很高,我一个多月前开 ...

  3. 【使用Unity开发Windows Phone上的2D游戏】(1)千里之行始于足下

    写在前面的 其实这个名字起得不太欠当,Unity本身是很强大的工具,可以部署到很多个平台,而不仅仅是可以开发Windows Phone上的游戏. 只不过本人是Windows Phone 应用开发出身, ...

  4. Unity 2D游戏开发高速入门第1章创建一个简单的2D游戏

    Unity 2D游戏开发高速入门第1章创建一个简单的2D游戏 即使是如今,非常多初学游戏开发的同学.在谈到Unity的时候.依旧会觉得Unity仅仅能用于制作3D游戏的. 实际上.Unity在2013 ...

  5. 【2D游戏引擎】WIP反思

    WIP(Working In Progress)是我初学游戏引擎开发时候开发的一个2D游戏引擎,当时计划为它实现类似Unity一样的编辑器,具有和Unity相似的工作流,但是由于水平不够,走了很多弯路 ...

  6. 2d游戏和 3d游戏的区别

    2D游戏和3D游戏的主要区别 一.总结 一句话总结:2D中的单位就是贴图,3D中的单位还有高 1. 3D 和 2D 游戏的区别主要体现在呈现画面和文件体积上: 2. 借助 3D 引擎可以提升 2D 游 ...

  7. Unity3D系列教程--使用免费工具在Unity3D中开发2D游戏 第一节

    声明:   本博客文章翻译类别的均为个人翻译,版权全部.出处: http://blog.csdn.net/ml3947,个人博客:http://www.wjfxgame.com. 译者说明:这是一个系 ...

  8. Unity Shader入门精要学习笔记 - 第14章非真实感渲染

    转载自 冯乐乐的 <Unity Shader 入门精要> 尽管游戏渲染一般都是以照相写实主义作为主要目标,但也有许多游戏使用了非真实感渲染(NPR)的方法来渲染游戏画面.非真实感渲染的一个 ...

  9. Pygame制作微信打飞机游戏PC版

    使用Pygame制作微信打飞机游戏PC版 转至:http://www.cnblogs.com/dukeleo/p/3339780.html   前一阵子看了一篇文章:青少年如何使用Python开始游戏 ...

随机推荐

  1. Sketchup二次开发教程

    Sketchup提供了两套API: C API,主要用于读写SU文件.我们的SU文件导入功能就是用这套API做的 Ruby API,用于开发SU插件 这次我们主要关注Ruby API,因为它是实现更丰 ...

  2. AOP和spring AOP学习记录

    AOP基本概念的理解 面向切面AOP主要是在编译期或运行时,对程序进行织入,实现代理, 对原代码毫无侵入性,不破坏主要业务逻辑,减少程序的耦合度. 主要应用范围: 日志记录,性能统计,安全控制,事务处 ...

  3. React-Hooks 学习概览

     React-Hooks的函数 组件方式代替原来的类继承,简化代码风格,好处是大大的: 1.useState  用来声明状态变量.要从三方面掌握:声明.读取.使用.(注意:useStae是不能进行条件 ...

  4. 开发RTSP 直播软件 H264 AAC 编码

    上一篇对摄像头预览,拍照做了大概的介绍,现在已经可以拿到视频帧了,在加上 RTSP 实现,就是直播的雏形,当然还要加上一些 WEB 管理和手机平台的支援,就是一整套直播软件. 介绍一些基础概念:RTP ...

  5. 学习gensim

    首先要将字符串分割成词语列表.比如”hurry up”要分割成[“hurry”,”up”]. 对于中文来讲,分词就是一个很关键的问题,不过可以去找一些分词库来实现.我一般用的是jieba. 而对于英文 ...

  6. 使用Python批量获取学生期末考试成绩

    以下是我们学校对于期末考试成绩临时查询的一个网站 我突发奇想,可不可以通过爬虫的方式批量获取成绩信息 于是说干就干 首先观察网页的请求 通过查看,我们可以很明显看到网站查询是通过对https://wx ...

  7. libfastcommon总结(二)从文件中加载配置信息

    头文件为ini_file_reader.h 主要接口 IniContext iniContext;//定义配置文件信息 iniLoadFromFile();//加载文件为结构化配置信息    iniG ...

  8. 建议8:恰当选用if和switch

    相对来说下面几种情况更适合switch结构 枚举表达式的值.这种枚举是可以期望的,平行逻辑关系的 表达式的值具有离散性,不具有线性的非连续的区间值 表达式的值是固定的,不是动态变化的 表达式的值是有限 ...

  9. 【转】sublime text 2 快捷键大全

    Ctrl+L 选择整行(按住-继续选择下行) Ctrl+KK 从光标处删除至行尾 Ctrl+Shift+K 删除整行 Ctrl+Shift+D 复制光标所在整行,插入在该行之前 Ctrl+J 合并行( ...

  10. node.js中http.respone.end方法概述

    方法说明: 结束响应,告诉客户端所有消息已经发送.当所有要返回的内容发送完毕时,该函数必须被调用一次. 如果不调用该函数,客户端将永远处于等待状态. 语法: response.end([data], ...