Unity2D RPG游戏制作学习【TopDown类型】
教程参考:Nine叔的【Unity2D RGP】教学系列https://www.bilibili.com/video/BV1gN4y1F77G/?spm_id_from=333.1007.top_right_bar_window_history.content.click
Player的创建
- 首先创建一个Empty Object,然后重置一下Transform组件的初始值(养成好习惯)
接着把Sprite素材拖到资源层级中,拖拽给刚才的空物体,作为它的子物体部件
2.为这个父物体添加一些基础必用的组件——RigidBody2D、BoxCollider 2D等,然后完成一些相关的初始设置(比如在我们这个TopDown类型的游戏中,我们不希望角色有重力而掉出屏幕,所以把Rb2D的Gravity Scale属性设置为0, 冻结z轴防止角色产生不必要的旋转Freeze Rotation;同时调整一下碰撞体的范围,在俯视角游戏中,通常不需要包含到整个角色身体,只需要腰部甚至腿部更低以下)
3. 为角色添加脚本组件,首先我们需要一个控制角色移动的脚本,通常命名为PlayerController(对于这些基础通用的部分来说,尽量保持一个统一的规范,这样既方便交流也可以为后面学习各种游戏制作培养好的习惯)
代码中有一些习惯可以尽量注意一下,方便后续的阅读和使用:
- 变量声明放在类的最开始部分,通常把public变量放置于较前面;
- 函数声明和定义放在变量声明的后面,其中Start()、Update()、FixedUpdate()函数通常我们不会在里面进行各种定义,而是作为一个盒子来调用我们后面写的大部分自定义的函数
- Update()反应更灵敏,适合进行玩家按键输入的检测;FixedUpdate()稳定性更好,适合进行物理方面的检测;
- GetAxisRaw()获取到的值为-1、 0 、 1;而GetAxis()获取到的值是[-1, 1]
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class PlayerController : MonoBehaviour
{
/*变量声明部分*/
public float moveSpeed;
private Rigidbody2D rb;
private float moveX, moveY;
private Vector2 moveDirection;
/*函数部分*/
void Start()
{
rb = GetComponent<Rigidbody2D>();
}
void Update() //输入类的操作
{
InputSection();
}
void FixedUpdate() { //物理类的操作
playerMove();
}
private void InputSection() //输入部分
{
moveX = Input.GetAxisRaw("Horizontal"); //水平方向上的输入
moveY = Input.GetAxisRaw("Vertical"); //竖直方向上的输入
moveDirection = new Vector2(moveX, moveY).normalized;
}
private void playerMove() //物理部分
{
rb.velocity = new Vector2(moveDirection.x * moveSpeed, moveDirection.y * moveSpeed);
}
}
在2D RPG类型的游戏中,我们通常都会使用到的一些变量有:
移动速度——moveSpeed(public变量,方便面板调节)
移动方向——moveX, moveY, moveDirection(moveDirection作为Vector2的变量,因为当角色的移动方向不止有水平和竖直两种时,那就需要引入一个向量类型来表示移动方向了)
``
注意 !角色在斜向上移动时,由于Vector2的长度变成了根号2,所以斜向上的速度会变快,这时候用一个归一化操作.normalized就可以解决了,数学原理是这样的: