[Unity2D]一个小游戏的实现思路 - linzheng

时间:2024-04-16 08:49:45

[Unity2D]一个小游戏的实现思路

一、             游戏Screen流程

    

 

二、游戏脚本结构

游戏整体管理脚本(全局脚本添加到Camera上):

整个游戏的(级别,开始,结束)是由LevelManager管理器脚本负责控制

mainMenuScript菜单脚本负责绘制菜单,从菜单启动游戏的主Screen

ScoreTimer计算时间

backgroundMusic播放背景音乐

 

游戏对象脚本(添加到各自的GameObject里面):

玩家主角对象PlayerScript负责1 监控输入左右移动玩家 2 检测是否捡到能量包

子弹对象bulletScript 1 检测碰撞分离产生新的小球 2 带有尾巴的向上移动效果,碰到天花板销毁子弹

小球对象 左右小球的脚本BallMovementLeft 1 控制小球运动 2 检测碰撞,碰撞到玩家会触发游戏结束

能量包对象 powerUpScript 1控制5秒后消失

 

脚本重构:

将各个具体的GameObject之间的关联通信抽取出来,通过一个全局的单例脚本来进行管理。

 

三、实现的逻辑细节

 

(1)按钮菜单通过GUI和GUISkin来进行绘制。

如:

GUI.skin = mySkin; // 设置GUI的皮肤

GUI.Box(new Rect(0, 0, 700, 525), "", "MenuScreen");//加载皮肤的自定义样式

         if(GUI.Button(new Rect(215 ,205, 265,60), "", "CustomFont"))   

         {

           // 加载主游戏的Screen

                   Application.LoadLevel("Game");

                   Time.timeScale = 1;

         }

 

(2)通过Layers来判断和区别各种不同类型的GameObject之间的碰撞检测。

 

如:

         void OnCollisionEnter(Collision collision)

         {

        // 球和玩家主角发生碰撞

                   if(collision.gameObject.layer == 12)

                   {

                            ……

                   }

                   // 碰到墙壁,反向运动

                   if(collision.gameObject.layer == 11)

                   {

                            xSpeed = -xSpeed;   

                   }

         }

 

 

(3)通过Tags来查找GameObject

 

如:

                            // 销毁当前的所有球

                            var clones = GameObject.FindGameObjectsWithTag("Ball");                                    

                            foreach (GameObject clone in clones)

                            {

                                     Destroy(clone);

                            }

                            // 销毁所有的能量包

                            var upgrades = GameObject.FindGameObjectsWithTag("PowerUp");                    

                            foreach (GameObject upgrade in upgrades)

                            {

                                     Destroy(upgrade);

                            }

 

(4)不同GameObject脚本之间的交互,通过修改脚本的公共属性来实现一些互相之间通信的功能。比如,游戏主角被敌人杀死,这时候需要把levelManager的公共属性gameOver 修改为true,levelManager脚本就会触发显示游戏结束的菜单。

 

如在Start方法里面获取脚本对象的代码:

levelManager = FindObjectOfType(typeof(LevelManager)) as LevelManager;

GameObject.Find("Main Camera ").GetComponent< LevelManager >()。