Unity2D_神奇宝贝#1

5/15/2022 Unity

# 大纲

目前策划是这个游戏主要分两个部分

  • 大世界移动窗口
  • 遇怪战斗窗口

首先大世界部分

# 下载资源

https://github.com/GameDevExperiments/Pokemon-Tutorial-Art-Assets

里面有一些图片资源

# 创建项目

打开unity-新建项目-2d

将下载的资源放在Assets下面

img

图片资源需要调整一下。

选择所有图片

1-2

按着下图修改

1_3

方便后面在整张图片中取得某些元素

# 绘制地图

首先处理图片资源。

1-4

选择tileset,案图片修改,点击Spirite Editor

1-5

选择按区域大小分割,16*16。

在下图区域

1-6

右键--2D Object--TileMap 瓦片地图上面paint我们切割的tile 制作地图

c菜单栏---window--2d--tilepaltte 打开瓦片调色板

创建一个新的调色板,保存在Assert > Tiles

把分割好的tileset图片拖进去,导入。保存在 Assert > Tiles

选择一个tile,在scene上paint 注意当前paint的Tilemap哪一个,不要涂错了

1-7

# 创建角色

用同样的流程处理chacater图片

1-8

选择一个chacater0 拖到scene上

1-9

自动生成一个gameobject,改名叫Player

1-10

但是此时界面上看不到,因为layer 层级关系,被 background覆盖了

选择Layer > Edit Layer

1-11

1-12

新建 排序层,显示顺序 由下到上的 player显示在最上层

分别设置每个gameobject的sortlayer

1-13

正常显示。

1-14

# 角色移动脚本

1-15

新建 PlayerController.cs文件

用visual studio打开

  using System;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class PlayerController : MonoBehaviour
{
	// public的变量会在unity中显示 或者[SerializeField] float moveSpeed;也是一样的
    public float moveSpeed = 5.0f;
    private bool isMoving;
    private Vector2 input;
	
	void Update()
	{
	    if (!isMoving)
        {
            input.x = Input.GetAxisRaw("Horizontal");
            input.y = Input.GetAxisRaw("Vertical");
            // 确保不能斜着移动
            if (input.x != 0)
            {
                input.y = 0;
            }

            if (input != Vector2.zero)
            {
                animator.SetFloat("moveX", input.x);
                animator.SetFloat("moveY", input.y);
                Vector3 targetPos = transform.position;
                targetPos.x += input.x;
                targetPos.y += input.y;
                // 开启协程,暂时不懂
                StartCoroutine(Move(targetPos));
            }
        }
	}
	
	    IEnumerator Move(Vector3 targetPos)
    {
        isMoving = true;
        // 这里,感觉是如果移动的距离大于一个定值,才会移动,否则继续累积这个移动距离
        while((targetPos - transform.position).sqrMagnitude > Mathf.Epsilon) {
            transform.position = Vector3.MoveTowards(transform.position, targetPos, moveSpeed * Time.deltaTime);
            yield return null;
        }
        transform.position = targetPos;
        isMoving = false;
    }
}

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50

1-16

把脚本拖到Player的这个位置,或者点击add Component搜索脚本名字都可以

1-17

修改数值

点击屏幕中间最上面运行游戏按钮测试,ok

写文档是真累啊 淦

!!!