Unity编写冰球对战游戏 2D版

Unity是一款非常方便、简洁、低成本的一款游戏引擎。在这里,向大家介绍这样用Unity这个引擎编写冰球对战游戏

因为Unity这个引擎可以编写3D游戏 ,同样的也可以编写2D游戏,这里先给大家介绍2D版的编写过程

首先,先创建项目,创建项目的具体过程在上一篇文章中有详细介绍,这里就不多赘述了。

这里可以看到,选择2D版与3D版的编写界面有些不同,摄像机是一个平面视角,而Game视窗显示出二维的游戏场景。
而在2D版的编写中,大多用到Sprite(精灵)组件来构成场景、添加主角人物等等等等。可以说,Sprite在2D游戏开发中相当于基石或者祖师爷的存在。

在进行总体的编写之前,对冰球对战这个游戏进行简单的需求分析
1. 游戏基本要素: 需要游戏背景、游戏中的冰球所对应的圆形、游戏中由玩家控制的长方形反弹壁、限制冰球活动和反弹壁活动的虚拟墙壁。
2. 游戏规则: 游戏开始时小球在随机方向上进行移动,玩家控制反弹壁将小球反弹到对方区域,碰到上、下两侧墙壁时,小球按照相应角度进行反弹。当遇到反弹壁后的墙壁时,游戏结束,对方积分加一。
3. 特殊要求: 对虚拟的碰撞墙壁可进行自适应操作(即可以在分辨率改变的情况下,虚拟墙壁的位置,大小也可以发生改变)。
4. UI:计分板,每次得出胜负后,计分板会出现相应的变化。

对冰球对战这个游戏进行简单的需求分析后开始进行项目的编写。

由上图可以看到,最开始时是一个空的场景,里面的任何东西都需要我们自己去添加。在Hierarchy中右键添加Sprite来创建游戏背景,游戏反弹壁和游戏球(这里要注意,Sprite的外观颜色是不能单独更改的,必须要通过添加材质的方式来对Sprite的外观等进行修改)。并在Project下添加已制作好的Sprite的材质。创建后的界面效果如下:

向Sprite中添加材质的方法: 点击要添加材质的Sprite,这时属性栏会出现这个Sprite的各项参数,将所确定的材质拖入到众多属性中的Sprite中即可。

创建完基本元素后,接下来要编写脚本实现对2个反弹壁的控制,在Project的Script中创建一个C#脚本文件,文件名随意。

在上图的左边显示的是你所创建的脚本的代码内容,当然,现在只包含最基本的主函数,头文件等等,要让反弹壁进行移动还要自己添加代码。双击这个脚本文件,这是系统会启动VS,在VS下进行编写

编写脚本前,要记得对这两个反弹壁添加Rigidbody2D,并取消掉重力这个选项。这样才可以进行一下操作。
因为是控制反弹壁的移动,所以要设置键位,当按下键位是,采取相应的操作,具体代码如下:

public class PlayerController : MonoBehaviour {public KeyCode up;public KeyCode down;Rigidbody2D rig;public float speed = 5;// Use this for initializationvoid Start () {rig = GetComponent<Rigidbody2D>();}// Update is called once per framevoid Update () {if (Input.GetKey(up)){rig.velocity = new Vector3(0,speed,0);}else if(Input.GetKey(down)){rig.velocity = new Vector3(0, -speed, 0);}else{rig.velocity = new Vector3(0, 0, 0);}}}

编写好脚本后,拖到反弹壁的两个Sprite中,并在属性中设置相应的键位(想要在属性中设置各个变量的参数,需要将该变量Public化)。

经过以上操作后以及实现反弹壁的上下移动,但在这里会出现一个bug,就是反弹壁的移动是没有限制的,所以接下来我们要创建4个虚拟墙壁,用GameManager来实现。创建4个GameManager,添加到一个Game Manager中,并赋予不同的名称。

根据之前的需求说明可以知道,要实现这个虚拟墙壁GameManager的自适应化,就要使用代码来获取当前分辨率的各种参数,并按照参数进行调整并赋值到GameManager的各个属性中。

具体代码如下:

BoxCollider2D left;
BoxCollider2D top;
BoxCollider2D right;
BoxCollider2D down;
private void RestWall(){left = transform.Find("left").GetComponent<BoxCollider2D>();top = transform.Find("top").GetComponent<BoxCollider2D>();right = transform.Find("right").GetComponent<BoxCollider2D>();down = transform.Find("down").GetComponent<BoxCollider2D>();Vector3 tempPosition = Camera.main.ScreenToWorldPoint(new Vector3(Screen.width, Screen.height));top.transform.position = new Vector3(0, tempPosition.y + 0.5f, 0);left.transform.position = new Vector3(-tempPosition.x - 0.5f, 0, 0);right.transform.position = new Vector3(tempPosition.x + 0.5f, 0, 0);down.transform.position = new Vector3(0, -tempPosition.y - 0.5f, 0);top.size = new Vector3(tempPosition.x*2,1,1);down.size = new Vector3(tempPosition.x * 2, 1, 1);left.size = new Vector3(1, tempPosition.y * 2, 1);right.size = new Vector3(1, tempPosition.y * 2, 1);}

算法较简单,我在这里也不过多赘述了。

当各种基础条件都搭建好后,就可以对操作冰球的脚本文件进行编写了,在之前取消了中了的选项,但是,因为要做出碰撞的效果,所以这里还要添加一个弹力的材质。

在编写小球脚本时需要注意几个问题,怎样让小球一直保持一定速度。游戏开始时小球应该怎样移动。具体实现代码如下:

 Rigidbody2D rig;public GameObject gameStart;// Use this for initializationvoid Start(){//GameStart();}public void GameStart(){gameStart.SetActive(false);rig = GetComponent<Rigidbody2D>();int num = Random.Range(0, 2);//获取随机数0或者1if (num == 0){rig.AddForce(new Vector3(-300, 0, 0));}else{rig.AddForce(new Vector3(300, 0, 0));}}// Update is called once per framevoid Update(){if (rig){//解决小球速度越来越慢Vector3 velocity2 = rig.velocity;//print(velocity2);if (Mathf.Abs(velocity2.x) < 9 && velocity2.x != 0){if (velocity2.x > 0){velocity2.x = 10;}else{velocity2.x = -10;}rig.velocity = velocity2;}}}void OnCollisionEnter2D(Collision2D collision){Vector3 velocity1 = rig.velocity;if (collision.gameObject.tag == "Player"){velocity1.y = velocity1.y / 2 + collision.rigidbody.velocity.y / 2;}if (collision.gameObject.tag == "Left"){print("ss");GameManager.instance.ScoreChanged("left");}if (collision.gameObject.tag == "Right"){print("ss");GameManager.instance.ScoreChanged("right");}rig.velocity = velocity1;}

这样一个冰球对战的Unity2D版就已经完成了,如果想加入UI的话,与添加Sprite的方法相同,并在GameManger的脚本中对UI积分板的变化进行代码编写,具体代码如下:

int score1 = 0;int score2 = 0;public Text txtScore1;public Text txtScore2;public void ScoreChanged(string wallName) {print("aa");if (wallName=="left"){score2++;}if (wallName=="right"){score1++;}txtScore1.text = score1.ToString();txtScore2.text = score2.ToString();} 

Unity编写冰球对战游戏 2D版相关推荐

  1. 控制台文字对战游戏 初始版

    namespace 对战游戏 {     class Program     {         #region         public struct JueSe   //创建一个角色对象    ...

  2. unity实现网络对战游戏

    1.课设作品需求分析.. 1 2.课设作品详细设计.. 1 3.课设作品编程实现.. 1 3.1场景搭建... 1 3.2角色控制... 1 3.3游戏UI设计... 1 3.4添加声音... 1 3 ...

  3. 【使用Unity开发Windows Phone上的2D游戏】(1)千里之行始于足下

    写在前面的 其实这个名字起得不太欠当,Unity本身是很强大的工具,可以部署到很多个平台,而不仅仅是可以开发Windows Phone上的游戏. 只不过本人是Windows Phone 应用开发出身, ...

  4. Python编写人机对战小游戏(抓狐狸)(2)

    封面图片:<中学生可以这样学Python>,董付国.应根球著,清华大学出版社 =========== 很久很久以前,在公众号里推送过一个抓狐狸游戏,详见Python编写人机对战小游戏(抓小 ...

  5. unity编写一个简单的小游戏

    unity编写一个简单的小游戏 简易fly bird的制作 关于flybird 场景的搭建和素材的导入 使用素材搭建game和scene 制作柱体 bird的script column的sprite ...

  6. unity3d游戏2d横版射击游戏完整项目源码分享

    unity3d游戏2d横版射击游戏完整项目源码分享 免费下载地址: 链接:https://pan.baidu.com/s/1YwhEy7DeKIHFU8pBLdJFPg 提取码:3wnx 复制这段内容 ...

  7. 你们要的Unity联网对战游戏小Demo

    前言 开发3D游戏听起来门槛很高,但是Unity的出现让门槛大大降低.开发联网实时对战的3D游戏门槛就更高,因为即便熟悉掌握了Unity的开发技术,联网的游戏还要涉及到熟悉网络协议栈.掌握后端知识以及 ...

  8. Unity联网对战游戏小Demo

    前言 开发3D游戏听起来门槛很高,但是Unity的出现让门槛大大降低.开发联网实时对战的3D游戏门槛就更高,因为即便熟悉掌握了Unity的开发技术,联网的游戏还要涉及到熟悉网络协议栈.掌握后端知识以及 ...

  9. Unity安卓游戏开发:打造7款2D 3D游戏 Unity Android Game Development : Build 7 2D 3D Games

    流派:电子学习| MP4 |视频:h264,1280×720 |音频:AAC,44.1 KHz 语言:英语+中英文字幕(根据原英文字幕机译更准确) |大小:15.4 GB |时长:32h 55m Un ...

最新文章

  1. html5类选择器选择权重,Python Html5和CSS3的新增功能:CSS权重与CSS3新增选择器
  2. wikioi 3027 线段覆盖 2
  3. git 放弃本地修改,强制拉取更新
  4. 腾腾流氓,云云更流氓(问微信怎样接入支付宝支付),手贱的赶紧点,你会感谢我的...
  5. javascript 图表_JavaScript 2018年的三个有争议的图表
  6. 存储ic载板_延伸IC领域 崇达技术拟将持有普诺威55%股权
  7. [理解] Linux 作为一个服务器是怎样的存在 (一)
  8. js原生attachEvent与addEventListener的用法
  9. php 多任务,PHP并行多任务研究(笔记)
  10. QT 和Ogre Demo
  11. js find(),findIndex()方法的使用
  12. python怎么写excel数据透视自动报表_使用Python生成自动报表(E
  13. matlab坐标旋转平移缩放,MATLAB实现RGB图像的平移、缩放和旋转
  14. 线程池作用及C语言实现
  15. 伦敦同业拆借利率(LIBOR)
  16. 公司服务器文件拷贝痕迹,服务器文件拷贝监控
  17. 125款程序员专属情人节表白网站【建议收藏】HTML+CSS+JavaScript
  18. 案例 02、OpenGL入门--正方形键位控制
  19. 马云《功守道》完整版 网友:天下武功 唯钱不破
  20. 该怎么用好EDIUS中的调音台

热门文章

  1. 利用PR将视频保存成一系列图片
  2. 马尔科夫不等式和坎泰利不等式的证明
  3. 桌面上 计算机 图标打不开,突然间电脑桌面上的所有图标都打不开了,怎么回事,求大神讲解...
  4. oracle存储过程初学实例
  5. widget jquery 理解
  6. hdu4416 Good Article Good sentence(多个串的本质不同的串个数,后缀自动机)
  7. 微信小程序海报生成图片合成工具类
  8. 工控网关linux用什么芯片,重庆工控嵌入式主板原理,工业网关怎么挑
  9. 关于学术文献推荐系统的调研报告
  10. 2022-2027年中国安防智能化行业市场全景评估及发展战略规划报告