服务器之家:专注于VPS、云服务器配置技术及软件下载分享
分类导航

PHP教程|ASP.NET教程|Java教程|ASP教程|编程技术|正则表达式|C/C++|IOS|C#|Swift|Android|VB|R语言|JavaScript|易语言|vb.net|

服务器之家 - 编程语言 - C# - Unity游戏开发之射击小游戏的实现

Unity游戏开发之射击小游戏的实现

2023-02-21 16:08呆呆敲代码的小Y C#

本篇文章为大家带来一个横版2D射击小游戏,游戏制作超级简单,玩法一学就会。文中的示例代码讲解详细,快跟随小编一起动手试一试

前言

人们一直都说学习和玩游戏不能兼顾,那我们就来边学习怎样制作游戏,边玩游戏 不就兼得了嘛~ 我可真是一个小天才呢~

所以本篇文章为大家带来一个 横版2D射击小游戏,游戏制作超级简单,玩法一学就会, 一起来看看吧!

Unity游戏开发之射击小游戏的实现

 

游戏画面展示

这款小游戏只用了两个UI界面,一个是菜单界面,另一个是战斗界面

菜单界面有三种模式,分别是一般、困难和地狱

战斗界面就是很简单的从两边刷野怪,然后主角开枪打死他们

UI搭建很简单,只有一张背景图使用Image,加上一个Text文本输入框,然后摆放一下位置即可!

菜单界面如下

Unity游戏开发之射击小游戏的实现

战斗画面演示

Unity游戏开发之射击小游戏的实现

 

游戏代码解析

这款横版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就好啦!

Unity游戏开发之射击小游戏的实现

打包出来的文件夹是这个样子的,然后点击.exe文件就可以直接在电脑上玩了!

Unity游戏开发之射击小游戏的实现

 

总结

本篇文章分享了一个超级简单的横版2D射击小游戏,非常适合新手学习体验

所见即所得,可以很快的体验边做游戏边玩游戏 的感觉!

以上就是Unity游戏开发之射击小游戏的实现的详细内容,更多关于Unity射击小游戏的资料请关注服务器之家其它相关文章!

原文链接:https://juejin.cn/post/7044334881832173576

延伸 · 阅读

精彩推荐
  • C#C#中应用程序集的装载过程详解

    C#中应用程序集的装载过程详解

    这篇文章主要介绍了C#中应用程序集的装载过程的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的...

    michaelscode10192022-10-20
  • C#C#获取任务栏显示进程的方法

    C#获取任务栏显示进程的方法

    这篇文章主要介绍了C#获取任务栏显示进程的方法,涉及C#针对进程操作的相关技巧,具有一定参考借鉴价值,需要的朋友可以参考下...

    我心依旧7962021-10-22
  • C#C# 清除cookies的代码

    C# 清除cookies的代码

    不同的浏览器会把cookie文件保存在不同的地方.这篇文章主要介绍了C# 清除cookies的代码,需要的朋友可以参考下...

    堕落天才8312021-12-09
  • C#C#使用Aspose.Cells创建和读取Excel文件

    C#使用Aspose.Cells创建和读取Excel文件

    这篇文章主要为大家详细介绍了C#使用Aspose.Cells创建和读取Excel文件,具有一定的参考价值,感兴趣的小伙伴们可以参考一下...

    在代码的世界里游走11022022-03-02
  • C#c#实现获取字符串阵列中元素最长或最短的长度

    c#实现获取字符串阵列中元素最长或最短的长度

    下面小编就为大家分享一篇c#实现获取字符串阵列中元素最长或最短的长度方法,具有很好的参考价值,希望对大家有所帮助...

    杨明波(Leo Yang)3882022-02-15
  • C#详解ObjectARX开发环境的创建与开发实例Hello World(VS2005+AutoCad2008+ObjectArx2008)

    详解ObjectARX开发环境的创建与开发实例Hello World(VS2005+AutoCad2008

    这篇文章主要介绍了ObjectARX开发环境的创建与开发实例Hello World(VS2005+AutoCad2008+ObjectArx2008),本文通过图文实例相结合给大家介绍的非常详细,对大家的学习或...

    大气象8802022-09-05
  • C#C# Process调用外部程序的实现

    C# Process调用外部程序的实现

    这篇文章主要介绍了C# Process调用外部程序的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面...

    _程序兔12062022-10-31
  • C#解析C#设计模式编程中外观模式Facade Pattern的应用

    解析C#设计模式编程中外观模式Facade Pattern的应用

    这篇文章主要介绍了C#设计模式编程中外观模式Facade Pattern的应用,外观模式中分为门面(Facade)和子系统(subsystem)两个角色来进行实现,需要的朋友可以参...

    田志良6112021-11-12