📢前言
- 最近快要到国庆假期了,给大家整理出来一些个 小游戏 用来学习和娱乐
- 人们一直都说学习和玩游戏不能兼顾,那我们就来边学习怎样制作游戏,边玩游戏 不就兼得了嘛~ 我可真是一个小天才呢~
- 所以本篇文章为大家带来一个 横版2D射击小游戏,游戏制作超级简单,玩法一学就会, 一起来看看吧!
🎬横版2D射击小游戏
🎥游戏画面展示
这款小游戏只用了两个UI界面,一个是菜单界面
,另一个是战斗界面
菜单界面有三种模式,分别是一般
、困难
和地狱
战斗界面就是很简单的从两边刷野怪,然后主角开枪打死他们
UI搭建
很简单,只有一张背景图使用Image
,加上一个Text
文本输入框,然后摆放一下位置即可!
菜单界面如下
战斗画面演示
🔔游戏代码解析
这款横版2D射击小游戏,核心部分只需要 两个脚本 就可以完成,一学就会,一起来看一下代码吧!
一个挂载到玩家身上的脚本PlayerMove,用于控制玩家的左右移动和跳跃
还有两种开枪的方法,分别是穿透和重击!当碰到怪物的时候就会掉血
当玩家血量低于0 的时候就跳出 游戏结束 的画面,非常简单清晰的逻辑!
代码如下,一个没有多少行,代码内容也是Unity最基础的知识点,相信稍微懂一点的人也都能看懂
PlayerMove代码如下
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
public class PlayerMove : MonoBehaviour {
/// <summary>
/// 生命值
/// </summary>
public int HP;
public Slider hpUI;
/// <summary>
/// 动画组建
/// </summary>
public Animator _animator;
/// <summary>
/// 击杀
/// </summary>
public static int jisha;
public Text jishaUI;
public Text jishaUIEnd;
/// <summary>
/// 是否跳跃
/// </summary>
public bool isJump;
/// <summary>
/// 游戏结束UI
/// </summary>
public GameObject ui;
// Use this for initialization
void Start ()
{
Time.timeScale = 1;
jisha = 0;
hpUI.maxValue = HP;
hpUI.value = HP;
}
// Update is called once per frame
void Update ()
{
if (Input.GetKeyDown (KeyCode.Escape))
{
UnityEngine.SceneManagement.SceneManager.LoadScene("Menu");
}
if (HP <= 0)
{
HP = 0;
}
jishaUI.text = "击杀:" + jisha;
jishaUIEnd.text = "击杀:" + jisha;
if (HP == 0)
{
ui.SetActive(true);
Time.timeScale = 0;
}
hpUI.transform.position = Camera.main.WorldToScreenPoint(transform.position + new Vector3(0, 3, 0));
hpUI.value = HP;
if (Input.GetKey (KeyCode.D))
{
transform.localEulerAngles = new Vector3(0, 0, 0);
transform.Translate(Vector3.right * Time.deltaTime * 7);
_animator.SetBool("run", true);
}
else if (Input.GetKey(KeyCode.A))
{
transform.localEulerAngles = new Vector3(0, 180, 0);
transform.Translate(Vector3.right * Time.deltaTime * 7);
_animator.SetBool("run", true);
}
else
{
_animator.SetBool("run", false);
}
if (Input.GetKeyDown (KeyCode.Space) && !isJump)
{
GetComponent<Rigidbody2D>().velocity = new Vector2(0, 30);
}
if (isJump)
{
_animator.SetBool("Jump", true);
}
else
{
_animator.SetBool("Jump", false);
}
if (Input.GetKeyDown (KeyCode.J))
{
GameObject n = Instantiate(Resources.Load("a1"), transform.GetChild(0).position, transform.GetChild(0).rotation) as GameObject;
n.name = "a1";
Destroy(n, 2);
}
if (Input.GetKeyDown(KeyCode.K))
{
GameObject n = Instantiate(Resources.Load("a2"), transform.GetChild(0).position, transform.GetChild(0).rotation) as GameObject;
n.name = "a2";
Destroy(n, 2);
}
}
private void OnTriggerStay2D(Collider2D collision)
{
if (collision.name == "0")
{
isJump = false;
}
}
private void OnTriggerExit2D(Collider2D collision)
{
if (collision.name == "0")
{
isJump = true;
}
}
public void ReturnMenu()
{
UnityEngine.SceneManagement.SceneManager.LoadScene("Menu");
}
}
还有一个Monster脚本,用于显示怪物的生命、速度和攻击力等
还有受到玩家打出的子弹就会掉血,很简单的方法就可以实现!
完整代码如下:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
public class Monster : MonoBehaviour {
/// <summary>
/// 生命
/// </summary>
public int HP;
/// <summary>
/// 速度
/// </summary>
public float speed;
/// <summary>
/// 攻击力
/// </summary>
public int att;
public Slider hpUI;
// Use this for initialization
void Start ()
{
speed = Random.RandomRange(speed - 2, speed + 2);
Destroy(gameObject, 10);
GameObject n = Instantiate(Resources.Load("HP")) as GameObject;
n.transform.SetParent(GameObject.Find("HPShow").transform);
n.transform.localScale = Vector3.one;
hpUI = n.GetComponent<Slider>();
hpUI.maxValue = HP;
hpUI.value = HP;
}
// Update is called once per frame
void Update ()
{
if (HP <= 0)
{
HP = 0;
PlayerMove.jisha++;
Destroy(gameObject);
}
hpUI.transform.position = Camera.main.WorldToScreenPoint(transform.position + new Vector3 (0, 6, 0));
hpUI.value = HP;
transform.Translate(Vector3.right * Time.deltaTime * speed);
}
private void OnTriggerEnter2D(Collider2D collision)
{
//撞到玩家生命值
if (collision.name == "Player")
{
collision.GetComponent<PlayerMove>().HP -= Random.RandomRange(att - 2, att + 2);
Destroy(gameObject);
}
//红色子弹伤害低,能够连续穿透射击多个目标
if (collision.name == "a1")
{
HP -= Random.RandomRange(8, 15);
}
//红色子弹伤害高,只能击中一个目标
if (collision.name == "a2")
{
HP -= Random.RandomRange(20, 40);
Destroy(collision.gameObject);
}
}
private void OnDestroy()
{
Destroy(hpUI.gameObject);
}
}
🎄游戏打包
这个小游戏只需要上面两个脚本差不多就算是完成了,然后还可以打包出来到电脑上面玩!
打包这个游戏也很简单,只需要在Build下将下面几个场景添加进去直接Build就好啦!
打包出来的文件夹是这个样子的,然后点击.exe文件就可以直接在电脑上玩了!
🎁游戏源码下载
文中这个 横版2D射击小游戏的源码工程下载链接就在这里啦!
横版2D射击小游戏的源码工程下载链接
CSDN有积分的小伙伴可以下载体验,积分不够的直接关注文章最下面的公众号回复:游戏资源
就可以领取几十款游戏源码和素材啦,看看有没有你想要的那一款!
💬总结
本篇文章分享了一个超级简单的横版2D射击小游戏,非常适合新手学习体验
所见即所得,可以很快的体验边做游戏边玩游戏 的感觉!
后面还会继续分享许多游戏,有跟本篇文章类似很简单的小游戏
也会分享一些 中大型游戏的源码等等 ,给大家提供学习参考!
那本篇文章就到这里啦!点一波三连 咱们下次再见
🚀往期优质文章分享
- ❤️Unity零基础到入门 | 游戏引擎 Unity 从0到1的 系统学习 路线【全面总结-建议收藏】!
- 🧡花一天时间做一个高质量飞机大战游戏,过万字Unity完整教程!漂亮学妹看了直呼666!
- 💛重回童年的经典系列☀️|【炸弹人小游戏】制作过程+解析 | 收藏起来跟曾经的小伙伴一起梦回童年!
- 💚通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难
- 🤍爆肝整整一个周末写一款类似 皇室战争 的 即时战斗类 游戏Demo!两万多字游戏制作过程+解析!
- 💙一款类似“恐龙快打”的 横版街机格斗游戏 该如何制作?| 一起来学习 顺便送源码【码文不易,建议收藏学习】
- 💜重回童年的经典系列☀️|【贪吃蛇小游戏】近两万字完整制作过程+解析+源码 【建议收藏学习】
🚀 优质专栏分享 🚀 |
- 🎄如果感觉文章看完了不过瘾,可以来我的其他 专栏 看一下哦~
- 🎄比如以下几个专栏:Unity基础知识学习专栏、Unity游戏制作专栏、Unity实战类项目 和 算法学习专栏
- 🎄可以学习更多的关于Unity引擎的相关内容哦!直接点击下面颜色字体就可以跳转啦!