千家信息网

Unity如何实现射击小游戏

发表于:2024-11-16 作者:千家信息网编辑
千家信息网最后更新 2024年11月16日,这篇文章主要为大家展示了"Unity如何实现射击小游戏",内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下"Unity如何实现射击小游戏"这篇文章吧。游戏画面展示
千家信息网最后更新 2024年11月16日Unity如何实现射击小游戏

这篇文章主要为大家展示了"Unity如何实现射击小游戏",内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下"Unity如何实现射击小游戏"这篇文章吧。

游戏画面展示

这款小游戏只用了两个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 {    ///     /// 生命值    ///     public int HP;    public Slider hpUI;    ///     /// 动画组建    ///     public Animator _animator;    ///     /// 击杀    ///     public static int jisha;    public Text jishaUI;    public Text jishaUIEnd;    ///     /// 是否跳跃    ///     public bool isJump;    ///     /// 游戏结束UI    ///     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().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 {    ///     /// 生命    ///     public int HP;    ///     /// 速度    ///     public float speed;    ///     /// 攻击力    ///     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();        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().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文件就可以直接在电脑上玩了!

以上是"Unity如何实现射击小游戏"这篇文章的所有内容,感谢各位的阅读!相信大家都有了一定的了解,希望分享的内容对大家有所帮助,如果还想学习更多知识,欢迎关注行业资讯频道!

0