Unity游戲開(kāi)發(fā)之射擊小游戲的實(shí)現(xiàn)
前言
人們一直都說(shuō)學(xué)習(xí)和玩游戲不能兼顧,那我們就來(lái)邊學(xué)習(xí)怎樣制作游戲,邊玩游戲 不就兼得了嘛~ 我可真是一個(gè)小天才呢~
所以本篇文章為大家?guī)?lái)一個(gè) 橫版2D射擊小游戲,游戲制作超級(jí)簡(jiǎn)單,玩法一學(xué)就會(huì), 一起來(lái)看看吧!

游戲畫面展示
這款小游戲只用了兩個(gè)UI界面,一個(gè)是菜單界面,另一個(gè)是戰(zhàn)斗界面
菜單界面有三種模式,分別是一般、困難和地獄
戰(zhàn)斗界面就是很簡(jiǎn)單的從兩邊刷野怪,然后主角開(kāi)槍打死他們
UI搭建很簡(jiǎn)單,只有一張背景圖使用Image,加上一個(gè)Text文本輸入框,然后擺放一下位置即可!
菜單界面如下

戰(zhàn)斗畫面演示

游戲代碼解析
這款橫版2D射擊小游戲,核心部分只需要 兩個(gè)腳本 就可以完成,一學(xué)就會(huì),一起來(lái)看一下代碼吧!
一個(gè)掛載到玩家身上的腳本PlayerMove,用于控制玩家的左右移動(dòng)和跳躍
還有兩種開(kāi)槍的方法,分別是穿透和重?fù)簦‘?dāng)碰到怪物的時(shí)候就會(huì)掉血
當(dāng)玩家血量低于0 的時(shí)候就跳出 游戲結(jié)束 的畫面,非常簡(jiǎn)單清晰的邏輯!
代碼如下,一個(gè)沒(méi)有多少行,代碼內(nèi)容也是Unity最基礎(chǔ)的知識(shí)點(diǎn),相信稍微懂一點(diǎn)的人也都能看懂
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>
/// 動(dòng)畫組建
/// </summary>
public Animator _animator;
/// <summary>
/// 擊殺
/// </summary>
public static int jisha;
public Text jishaUI;
public Text jishaUIEnd;
/// <summary>
/// 是否跳躍
/// </summary>
public bool isJump;
/// <summary>
/// 游戲結(jié)束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");
}
}還有一個(gè)Monster腳本,用于顯示怪物的生命、速度和攻擊力等
還有受到玩家打出的子彈就會(huì)掉血,很簡(jiǎn)單的方法就可以實(shí)現(xiàn)!
完整代碼如下:
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);
}
//紅色子彈傷害低,能夠連續(xù)穿透射擊多個(gè)目標(biāo)
if (collision.name == "a1")
{
HP -= Random.RandomRange(8, 15);
}
//紅色子彈傷害高,只能擊中一個(gè)目標(biāo)
if (collision.name == "a2")
{
HP -= Random.RandomRange(20, 40);
Destroy(collision.gameObject);
}
}
private void OnDestroy()
{
Destroy(hpUI.gameObject);
}
}游戲打包
這個(gè)小游戲只需要上面兩個(gè)腳本差不多就算是完成了,然后還可以打包出來(lái)到電腦上面玩!
打包這個(gè)游戲也很簡(jiǎn)單,只需要在Build下將下面幾個(gè)場(chǎng)景添加進(jìn)去直接Build就好啦!

打包出來(lái)的文件夾是這個(gè)樣子的,然后點(diǎn)擊.exe文件就可以直接在電腦上玩了!

總結(jié)
本篇文章分享了一個(gè)超級(jí)簡(jiǎn)單的橫版2D射擊小游戲,非常適合新手學(xué)習(xí)體驗(yàn)
所見(jiàn)即所得,可以很快的體驗(yàn)邊做游戲邊玩游戲 的感覺(jué)!
以上就是Unity游戲開(kāi)發(fā)之射擊小游戲的實(shí)現(xiàn)的詳細(xì)內(nèi)容,更多關(guān)于Unity射擊小游戲的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
c#中SqlHelper封裝SqlDataReader的方法
這篇文章主要介紹了c#中SqlHelper封裝SqlDataReader的方法,涉及C#針對(duì)數(shù)據(jù)庫(kù)相關(guān)操作封裝與使用的技巧,需要的朋友可以參考下2015-05-05
詳解C# WebApi 接口測(cè)試工具:WebApiTestClient
這篇文章主要介紹了詳解C# WebApi 接口測(cè)試工具:WebApiTestClient,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2018-07-07
C# 如何使用OpcUaHelper讀寫OPC服務(wù)器
這篇文章給大家介紹C# 如何使用OpcUaHelper讀寫OPC服務(wù)器,本文通過(guò)圖文實(shí)例代碼相結(jié)合給大家介紹的非常詳細(xì),需要的朋友參考下吧2023-12-12
C#實(shí)現(xiàn)將Doc文檔轉(zhuǎn)換成rtf格式的方法示例
這篇文章主要介紹了C#實(shí)現(xiàn)將Doc文檔轉(zhuǎn)換成rtf格式的方法,結(jié)合實(shí)例形式分析了C#針對(duì)word文件的讀取及文檔格式轉(zhuǎn)換相關(guān)操作技巧,需要的朋友可以參考下2017-07-07

