最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Unity游戲開發(fā)之射擊小游戲的實(shí)現(xiàn)

 更新時(shí)間:2022年03月18日 10:15:42   作者:呆呆敲代碼的小Y  
本篇文章為大家?guī)硪粋€(gè)橫版2D射擊小游戲,游戲制作超級簡單,玩法一學(xué)就會(huì)。文中的示例代碼講解詳細(xì),快跟隨小編一起動(dòng)手試一試

前言

人們一直都說學(xué)習(xí)和玩游戲不能兼顧,那我們就來邊學(xué)習(xí)怎樣制作游戲,邊玩游戲 不就兼得了嘛~ 我可真是一個(gè)小天才呢~

所以本篇文章為大家?guī)硪粋€(gè) 橫版2D射擊小游戲,游戲制作超級簡單,玩法一學(xué)就會(huì), 一起來看看吧!

游戲畫面展示

這款小游戲只用了兩個(gè)UI界面,一個(gè)是菜單界面,另一個(gè)是戰(zhàn)斗界面

菜單界面有三種模式,分別是一般、困難和地獄

戰(zhàn)斗界面就是很簡單的從兩邊刷野怪,然后主角開槍打死他們

UI搭建很簡單,只有一張背景圖使用Image,加上一個(gè)Text文本輸入框,然后擺放一下位置即可!

菜單界面如下

戰(zhàn)斗畫面演示

游戲代碼解析

這款橫版2D射擊小游戲,核心部分只需要 兩個(gè)腳本 就可以完成,一學(xué)就會(huì),一起來看一下代碼吧!

一個(gè)掛載到玩家身上的腳本PlayerMove,用于控制玩家的左右移動(dòng)和跳躍

還有兩種開槍的方法,分別是穿透和重?fù)?!?dāng)碰到怪物的時(shí)候就會(huì)掉血

當(dāng)玩家血量低于0 的時(shí)候就跳出 游戲結(jié)束 的畫面,非常簡單清晰的邏輯!

代碼如下,一個(gè)沒有多少行,代碼內(nèi)容也是Unity最基礎(chǔ)的知識點(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ì)掉血,很簡單的方法就可以實(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è)腳本差不多就算是完成了,然后還可以打包出來到電腦上面玩!

打包這個(gè)游戲也很簡單,只需要在Build下將下面幾個(gè)場景添加進(jìn)去直接Build就好啦!

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

總結(jié)

本篇文章分享了一個(gè)超級簡單的橫版2D射擊小游戲,非常適合新手學(xué)習(xí)體驗(yàn)

所見即所得,可以很快的體驗(yàn)邊做游戲邊玩游戲 的感覺!

以上就是Unity游戲開發(fā)之射擊小游戲的實(shí)現(xiàn)的詳細(xì)內(nèi)容,更多關(guān)于Unity射擊小游戲的資料請關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • c#中SqlHelper封裝SqlDataReader的方法

    c#中SqlHelper封裝SqlDataReader的方法

    這篇文章主要介紹了c#中SqlHelper封裝SqlDataReader的方法,涉及C#針對數(shù)據(jù)庫相關(guān)操作封裝與使用的技巧,需要的朋友可以參考下
    2015-05-05
  • 詳解C# WebApi 接口測試工具:WebApiTestClient

    詳解C# WebApi 接口測試工具:WebApiTestClient

    這篇文章主要介紹了詳解C# WebApi 接口測試工具:WebApiTestClient,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2018-07-07
  • c#中task與thread區(qū)別及其使用的方法示例

    c#中task與thread區(qū)別及其使用的方法示例

    本文主要介紹了c#中task與thread區(qū)別及其使用的方法示例,文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-02-02
  • C#實(shí)現(xiàn)數(shù)字華容道游戲

    C#實(shí)現(xiàn)數(shù)字華容道游戲

    這篇文章主要為大家詳細(xì)介紹了C#實(shí)現(xiàn)數(shù)字華容道游戲,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-02-02
  • 詳解TreeView綁定數(shù)據(jù)庫

    詳解TreeView綁定數(shù)據(jù)庫

    這篇文章主要演示了TreeView如何與數(shù)據(jù)庫進(jìn)行綁定
    2015-07-07
  • C#中async/await之線程上下文工作原理

    C#中async/await之線程上下文工作原理

    這篇文章主要為大家介紹了C#中async/await之線程上下文工作原理解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪<BR>
    2023-05-05
  • C# 如何使用OpcUaHelper讀寫OPC服務(wù)器

    C# 如何使用OpcUaHelper讀寫OPC服務(wù)器

    這篇文章給大家介紹C# 如何使用OpcUaHelper讀寫OPC服務(wù)器,本文通過圖文實(shí)例代碼相結(jié)合給大家介紹的非常詳細(xì),需要的朋友參考下吧
    2023-12-12
  • C#中的Task使用方式

    C#中的Task使用方式

    本文介紹了C#中的Task,這是一種異步編程模型,允許你在不阻塞主線程的情況下執(zhí)行耗時(shí)的操作,文章詳細(xì)介紹了如何創(chuàng)建、等待、處理異常、延續(xù)以及并行執(zhí)行Task
    2024-12-12
  • C#實(shí)現(xiàn)將Doc文檔轉(zhuǎn)換成rtf格式的方法示例

    C#實(shí)現(xiàn)將Doc文檔轉(zhuǎn)換成rtf格式的方法示例

    這篇文章主要介紹了C#實(shí)現(xiàn)將Doc文檔轉(zhuǎn)換成rtf格式的方法,結(jié)合實(shí)例形式分析了C#針對word文件的讀取及文檔格式轉(zhuǎn)換相關(guān)操作技巧,需要的朋友可以參考下
    2017-07-07
  • 詳解C#中委托的概念與使用

    詳解C#中委托的概念與使用

    委托這個(gè)名字取的神乎其神的,但實(shí)質(zhì)是函數(shù)式編程,把函數(shù)作為參數(shù)傳遞給另一個(gè)參數(shù)。這篇文章主要為大家介紹一下C#中委托的概念與使用,需要的可以參考一下
    2023-02-02

最新評論

麟游县| 龙游县| 扶绥县| 疏勒县| 洛浦县| 连南| 治县。| 灵宝市| 界首市| 敦煌市| 江阴市| 鹿邑县| 琼结县| 龙山县| 云南省| 青川县| 焦作市| 正宁县| 绥阳县| 建始县| 井冈山市| 平江县| 洪江市| 岢岚县| 连平县| 巩义市| 南城县| 长阳| 乐清市| 横峰县| 尉氏县| 江津市| 碌曲县| 南木林县| 洪洞县| 团风县| 博客| 秦安县| 安宁市| 五华县| 达州市|