最近比较摸鱼,感觉忙着肝游戏和搞这些去了,算法竞赛除了打CF俄服和练一点小专题以外没太碰。贴一下自己从0学习Unity的过程。这里以实战尽量做一个完成度较高的策略RPG为过程学习。咱也不知道啥时候能做好,估计是断断续续……
游戏的预设,选择了《JOJO的奇妙冒险》作为背景,类魔塔式的游戏模式,希望穿插剧情。
如果真的能做到完成度比较高的话,会放在Github上面。
目录
- 准备工作
- 构建新Project
- 角色创建
- Tilemap的使用
准备工作
Unity的脚本依靠C# Script. 所以首先花三天左右过了一遍C#的基本语法,反正也没怎么用过框架,啥语言来对我都差不多吧。用的时候还是得查文档查博客。语言基础方面,其实只要学过一个语言(个人觉得起步用C/C++/Java要优于Python),学其他的主流语言看起来都差不多。
C#和Java一样都是高级面向对象语言,得靠Visual Studio这种IDE和.NET这种框架。直接在VS官网下载,安装C#和Unity工作环境即可。Unity也在官网下载安装。(其实可以用Unity安装VS,里面提供了直接安装的渠道)
构建新Project
过一遍C#语法,弄好开发环境,然后就去创建Unity Project. 先不急着直接开始做,先随便开了个Project弄清楚了Unity的用法。毕竟以前从没正儿八经接触过游戏引擎(说起来之前玩过UE4,不过啥也没玩懂)。
创建新Project之后,随便弄了个方体在Scene中. 在右侧栏调整属性,改了下颜色,然后对这个新建的Cube增加一个Component,选择Rigidbody.
之后就玩不懂了,去找网上的教程做了个类似的东西。
这里贴上教程链接:
博主讲的很详细,基本是傻瓜式一步一步的,比较适合我这种,当然没有语言基础的几乎也能看懂。
到这里之后意识到,各种Unity接口还得自己靠自己的需求一个一个去查去学,不带需求地查果然是太费力了,因此也就更加坚定了在实战中学习的想法。
角色创建
首先用PS画了个Q版像素Jo太郎:
画了4个,打算做走路的动作(虽然还并不会动画)
注意,图片比例必须得是长:宽=4:1,然后每个动作之间等距。虽然目前还不知道动画怎么实现,但是这点我觉得直接想到这个还是很基本的吧。
新建一个C#脚本,用于控制角色行走。接口就是在网上现学……代码拿着调试,自己修改,大概就懂意思了。
提一下脚本中Start是在绑定的实体生成时执行的函数,而Update和FixedUpdate是实时更新,可以理解为每帧都执行一次,用于刷新状态。
这里把行走控制写入FixedUpdate里。
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class BaseMove : MonoBehaviour
{
// Start is called before the first frame update
public float MoveSpeed = 15.0f;
void Start()
{
}
// Update is called once per frame
void Update()
{
}
void FixedUpdate()
{
if (Input.GetKey(KeyCode.W) || Input.GetKey(KeyCode.UpArrow))
{
transform.Translate(0, 1 * MoveSpeed * Time.deltaTime, 0, Space.Self);
}
if (Input.GetKey(KeyCode.S) || Input.GetKey(KeyCode.DownArrow))
{
transform.Translate(0, -1 * MoveSpeed * Time.deltaTime, 0, Space.Self);
}
if (Input.GetKey(KeyCode.A) || Input.GetKey(KeyCode.LeftArrow))
{
transform.Translate(-1 * MoveSpeed * Time.deltaTime, 0, 0, Space.Self);
}
if (Input.GetKey(KeyCode.D) || Input.GetKey(KeyCode.RightArrow))
{
transform.Translate(1 * MoveSpeed * Time.deltaTime, 0, 0, Space.Self);
}
}
}
移动一直是单帧,没有动画……暂时还不会。
添加2D碰撞系统的时候有以下几点:
- 像我这种上帝视角的要把重力X掉,不然加了Rigidbody2D的东西都会往下掉……
- 参与碰撞的东西都需要Collider这个Component,Collider有各种各样的,按需求取,记得选2D就行了。
- 主动方,也就是角色必须再多一个Rigidbody2D控件。而墙壁之类的可以不用这个控件。只有这样才会发生有效碰撞
- 别开isTrigger那栏。开了之后就没有物理碰撞了,而是在接触之后触发某个事件(需要自己写脚本),无视物理效果。
Tilemap的使用
使用Tilemap之后就可以做2D背景了。这个东西把背景切分成小方块批量处理,很方便。要学会使用的话,建议B站找视频教程,跟着做就行。上图GIF中随便用PS画了个像素背景,然后用Tilemap批量填充形成地板,也就是背景。
要使用Tilemap,先在左侧栏创建一个2D Object Tilemap,然后工具栏选Window,打开Tile Palette。在Tile Palette中导入素材图,然后用吸色工具选择一个方块作为笔刷,就可以在Scene里的Tilemap上填涂背景了。
(今天先做了这么多)