最近比较摸鱼,感觉忙着肝游戏和搞这些去了,算法竞赛除了打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 崩溃监听_Time


之后就玩不懂了,去找网上的教程做了个类似的东西。

这里贴上教程链接:

博主讲的很详细,基本是傻瓜式一步一步的,比较适合我这种,当然没有语言基础的几乎也能看懂。

到这里之后意识到,各种Unity接口还得自己靠自己的需求一个一个去查去学,不带需求地查果然是太费力了,因此也就更加坚定了在实战中学习的想法。

角色创建

首先用PS画了个Q版像素Jo太郎:

unity 崩溃监听_Time_02


画了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);
        }
    }
}

移动一直是单帧,没有动画……暂时还不会。

unity 崩溃监听_Self_03


添加2D碰撞系统的时候有以下几点:

  1. 像我这种上帝视角的要把重力X掉,不然加了Rigidbody2D的东西都会往下掉……
  2. 参与碰撞的东西都需要Collider这个Component,Collider有各种各样的,按需求取,记得选2D就行了。
  3. 主动方,也就是角色必须再多一个Rigidbody2D控件。而墙壁之类的可以不用这个控件。只有这样才会发生有效碰撞
  4. 别开isTrigger那栏。开了之后就没有物理碰撞了,而是在接触之后触发某个事件(需要自己写脚本),无视物理效果。

Tilemap的使用

unity 崩溃监听_Self_04


使用Tilemap之后就可以做2D背景了。这个东西把背景切分成小方块批量处理,很方便。要学会使用的话,建议B站找视频教程,跟着做就行。上图GIF中随便用PS画了个像素背景,然后用Tilemap批量填充形成地板,也就是背景。

要使用Tilemap,先在左侧栏创建一个2D Object Tilemap,然后工具栏选Window,打开Tile Palette。在Tile Palette中导入素材图,然后用吸色工具选择一个方块作为笔刷,就可以在Scene里的Tilemap上填涂背景了。

(今天先做了这么多)