Unity游戲開發(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)單的從兩邊刷野怪,然后主角開槍打死他們
UI搭建很簡(jiǎn)單,只有一張背景圖使用Image,加上一個(gè)Text文本輸入框,然后擺放一下位置即可!
菜單界面如下
戰(zhàn)斗畫面演示
游戲代碼解析
這款橫版2D射擊小游戲,核心部分只需要 兩個(gè)腳本 就可以完成,一學(xué)就會(huì),一起來(lái)看一下代碼吧!
一個(gè)掛載到玩家身上的腳本PlayerMove,用于控制玩家的左右移動(dòng)和跳躍
還有兩種開槍的方法,分別是穿透和重?fù)簦‘?dāng)碰到怪物的時(shí)候就會(huì)掉血
當(dāng)玩家血量低于0 的時(shí)候就跳出 游戲結(jié)束 的畫面,非常簡(jiǎn)單清晰的邏輯!
代碼如下,一個(gè)沒有多少行,代碼內(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)
所見即所得,可以很快的體驗(yàn)邊做游戲邊玩游戲 的感覺!
以上就是Unity游戲開發(fā)之射擊小游戲的實(shí)現(xiàn)的詳細(xì)內(nèi)容,更多關(guān)于Unity射擊小游戲的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
基于Aforge攝像頭調(diào)用簡(jiǎn)單實(shí)例
這篇文章主要為大家詳細(xì)介紹了基于Aforge攝像頭調(diào)用的簡(jiǎn)單實(shí)例,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2018-10-10C#窗體-數(shù)據(jù)庫(kù)連接及登錄功能的實(shí)現(xiàn)案例
這篇文章主要介紹了C#窗體-數(shù)據(jù)庫(kù)連接及登錄功能的實(shí)現(xiàn)案例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2020-12-12C#實(shí)現(xiàn)簡(jiǎn)單加減乘除計(jì)算器
這篇文章主要為大家詳細(xì)介紹了C#實(shí)現(xiàn)簡(jiǎn)單加減乘除計(jì)算器,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2018-02-02Unity實(shí)現(xiàn)攻擊范圍檢測(cè)并繪制檢測(cè)區(qū)域
這篇文章主要介紹了Unity實(shí)現(xiàn)攻擊范圍檢測(cè)并繪制檢測(cè)區(qū)域,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2020-04-04C#條件語(yǔ)句、循環(huán)語(yǔ)句(if、while)
這篇文章主要介紹了C#條件語(yǔ)句、循環(huán)語(yǔ)句(if、while)的用法,學(xué)習(xí)c#的朋友可以參考下2014-03-03C#中實(shí)現(xiàn)插入、刪除Excel分頁(yè)符的方法
這篇文章主要給大家介紹了關(guān)于在C#中實(shí)現(xiàn)插入、刪除Excel分頁(yè)符的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2018-05-05C#關(guān)聯(lián)自定義文件類型到應(yīng)用程序并實(shí)現(xiàn)自動(dòng)導(dǎo)入功能
今天通過(guò)本文給大家分享C#關(guān)聯(lián)自定義文件類型到應(yīng)用程序并實(shí)現(xiàn)自動(dòng)導(dǎo)入功能,代碼中寫入了兩個(gè)注冊(cè)表,實(shí)例代碼給大家介紹的非常詳細(xì),需要的朋友可以參考下2021-09-09