提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
文章目录
前言
俯视角射击游戏类似元气骑士那种,懂的都懂好吧。
本节课我们将要实现:制作地图,实现人物动画和移动脚本,制作单例模式和对象池,制作手枪pistol和子弹bullet和子弹壳bulletShell,制作散弹枪shotgun。
一、导入素材
素材链接: 、
https://o-lobster.itch.io/simple-dungeon-crawler-16x16-pixel-pack https://humanisred.itch.io/weapons-and-bullets-pixel-art-asset
二、制作流程
1.制作地图
还是要用我们的老朋友Tilemap来做这种像素地图:
可以看到,我们创建了三个层级的Grid,记得在Sorting Layer分别给它们排好选择顺序,除了Ground的那一层以外其它记得要给 tilemap Collider2D和Composite Collider2D,Rigibody2D记得设置成静态,这些后面都要用到的。
2.实现人物动画和移动脚本
绘制完简单地图后,我们就要开始导入人物素材了。公式化三件套:Sprite Renderer,Rb2D设置为Kinematic被动检测碰撞,别忘了锁Z轴旋转,Animator自己根据素材创建Idle,Walk
接下来创建PlayerController.cs给Player对象
代码如下:
using System;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class PlayerController : SingletonMono<PlayerController>
{
public float speed = 3f;
public bool enabledInput = true;
private Rigidbody2D rb2d;
private Animator anim;
private Camera mainCamera;
private Vector2 input;
private Vector2 mousePosition;
private new void Awake()
{
rb2d = GetComponent<Rigidbody2D>();
anim = GetComponent<Animator>();
mainCamera = Camera.main;
}
void Update()
{
if (enabledInput)
{
mousePosition = mainCamera.ScreenToWorldPoint(Input.mousePosition);
input.x = Input.GetAxisRaw("Horizontal");
input.y = Input.GetAxisRaw("Vertical");
rb2d.velocity = input.normalized * speed;
if(input != Vector2.zero)
{
anim.SetBool("isMoving", true);
}
else
{
anim.SetBool("isMoving", false);
}
if(mousePosition.x >= transform.position.x)
{
transform.rotation = Quaternion.Euler(new Vector3(0f, 0f, 0f));
}
else
{
transform.rotation = Quaternion.Euler(new Vector3(0f, 180f, 0f));
}
}
}
}
这些大伙都应该懂了就获取X和Y上的Input,方向化后经典给rb2d设置velocity,然后根据鼠标位置判断玩家是否要沿Y轴翻转。
顺便给camera搞个cinemachine,让相机跟随玩家移动:
至此,我们实现了实现人物动画和移动脚本,接下来该开始制作单例模式和对象池模式了。
3.实现单例模式和对象池模式
单例模式大伙肯定也懂的,但这几天重温C#知识我突然就想用泛型<T>来做个泛型单例类,让所有MONOBehaviour的类都能继承: