内容纲要

游戏简介

  • 此游戏是照着4399上的《圆球撞高塔》做的一款小游戏,游戏的内容就是一个小坦克打圆环
    FireBalls3d插图
    FireBalls3d插图(1)
    FireBalls3d插图(2)

游戏的框架

  • 此游戏是用MVC框架来编写的
  • 此MVC框架可参考老师的mvc_v2视频
  • 在Assets文件夹下创建Scripts文件夹,再在Scripts文件夹下创建Framework和Appication文件夹
  • 在Appication文件夹下创建Model、View、Controller文件夹
  • 把MVC、ModelBase、ViewBase、ControllerBase脚本放到Framework文件夹下
    (代码请加Q:1517069595)

    管理器的创建

  • 在层级视图中创建一个根节点,重命名为MainSceneManager
  • 在Appication文件夹下创建一个脚本,重命名为MainSceneManager,将MainSceneManager脚本挂到MainSceneManager节点上
  • MainSceneManager脚本唯一功能就是在Start方法中注册Model、View和Controller

游戏场景数据的编写

LevelDataModel关卡数据

  • 在Model文件夹下创建脚本LevelDataModel

  • 此类是存放单个关卡数据的

  • LevelDataModel类继承ModelBase

  • 此类需要加上可序列化标记[Serializable]
    FireBalls3d插图(3)

  • 定义成员变量

public int id; //id号
public bool isUnlock; //是否解锁

public string tank; //坦克
public string cannonball; //炮弹

public string ground; //地面
public int groundType; //地面型号
public int groundPitchNumber; //地面节数

public int ringObstacleQuantity; //圆环障碍物数量
public float rotationalSpeed; //圆环障碍物旋转速度
public int timeToTurn; //转向时间(多久改变一次旋转的方向)
public List<string> ringObstacle; //圆环障碍物
public List<int> ringObstacleDifferentialAngle; //圆环障碍物角度差

public int circularRingQuantity; //圆环数量
public List<string> circularRing; //圆环
public int circularRingDifferentialAngle; //圆环角度差(两个相邻圆环的角度差)

public List<string> treasure; //财宝(钻石、宝箱)
public List<int> treasureHp; //财宝生命值

public int circularRingQuantityAddtreasureHp; //圆环数加财宝生命值
  • 实现ModelBase的抽象属性
public override string Name
{
    get
    {
        return ("LevelDataModel"+id);
    }
}

LevelDatasModel关卡数据集合

  • 在Model文件夹下创建脚本LevelDatasModel
  • 此类是存放全部关卡数据的
  • LevelDatasModel类继承ModelBase
  • 此类需要加上可序列化标记[Serializable]
  • 实现基类抽象属性
public override string Name
{
    get
    {
        return "LevelDatasModel";
    }
}
  • 创建成员变量与方法
//动态数组lDMS,此数组用来存放LevelDataModel
public List<LevelDataModel> lDMS = new List<LevelDataModel>();

//往lDMS数组中添加元素的方法
public void AddElement(LevelDataModel lDM)
{
    lDMS.Add(lDM);
}

//往lDMS数组中删除元素的方法
public void RemoveElement(LevelDataModel lDM)
{
    lDMS.Remove(lDM);
}
  • 在MainSceneManager脚本中注册LevelDatasModel,写在Start方法中
MVC.instance.RegisterModel(new LevelDatasModel()); //注册关卡数据集合模型

UI的搭建

创建场景

  • 在Assets下创建文件夹Scenes,在Scenes文件夹下创建一个Scene,并重命名为MainScene
  • 打开MainScene,然后把Game窗口的分辨率设置为9:16(竖屏窗口)
    FireBalls3d插图(4)

在MainScene场景中搭建UI

  • 在层级视图中创建一个Canvas

  • 在Canvas下创建用一个Panel,并重命名为MainPanel,为MainPanel节点添加两个AudioSource组件

  • 在MainPanel下创建一个空节点,命名为DataStore,在DataStore下创建一个Button和一个Text,并将Button重命名DataStoreButton,之后在DataStoreButton的子节点Text中写上“将关卡数据存为json文件”,参数设置参考图片
    FireBalls3d插图(5)
    FireBalls3d插图(6)
    FireBalls3d插图(7)

  • 再在MainPanel下创建一个空节点,命名为InitialInterface,在InitialInterface下创建一个Button和一个Text,并将Button重命名PlayButton,Text重命名为GameNameText,PlayButton的子节点Text重命名为PlayText,之后在GameNameText中写上“Fire Balls 3D”,在PlayText中写上“Play”,参数设置参考图片
    FireBalls3d插图(8)

  • 在Assets下创建一个文件夹Textures,在此文件夹下放入一些图片资源,将所有图片的TextureType改为Sprite(2D and UI),这些图片是我在4399的圆球撞高塔游戏中用截图截的,然后用ps修改了一下,也可以在网上找类似的资源
    FireBalls3d插图(9)FireBalls3d插图(10)

  • 再在MainPanel下创建一个空节点,命名为CheckpointChoice,在CheckpointChoice下创建一个Button和一个Scroll View,并将Button重命名ReturnButton,再将ReturnButton的Image组件的Source Image成员设置为返回纹理,然后为Scroll View的孙节点Content添加组件Grid Layout Group和Content Size Fitter,参数设置参考图片
    FireBalls3d插图(11)
    FireBalls3d插图(12)

  • 再在MainPanel下创建一个空节点,命名为LevelFail,在LevelFail下创建两个Button和一个Text,并将两个Button分别重命名为ReplayButton和ReturnInitialInterfaceButton,再将ReplayButton的Image组件的Source Image成员设置为重新开始纹理,ReturnInitialInterfaceButton的Image组件的Source Image成员设置为返回初始界面纹理,在Text中写上“Level Fail”,参数设置参考图片
    FireBalls3d插图(13)

  • 再在MainPanel下创建一个空节点,命名为LevelCleared,在LevelCleared下创建两个Button和一个Text,并将两个Button分别重命名为NextLevelButton和ReturnInitialInterfaceButton,再将NextLevelButton的Image组件的Source Image成员设置为进入下一关纹理,ReturnInitialInterfaceButton的Image组件的Source Image成员设置为返回初始界面纹理,在Text中写上“Level CLEARED”,参数设置参考图片
    FireBalls3d插图(14)

  • 再在MainPanel下创建一个空节点,命名为CustomsClearance,在CustomsClearance下创建一个Button和一个Text,并将Button重命名为ReturnInitialInterfaceButton,再将ReturnInitialInterfaceButton的Image组件的Source Image成员设置为返回初始界面纹理,在Text中写上“恭喜你通关了”,参数设置参考图片
    FireBalls3d插图(15)

实现游戏初始功能(就是游戏启动时就需要执行的功能)

测试场景的创建

  • 在Scenes文件夹中创建一个Scene,重命名为TestScene
  • TestScene是一个测试场景,游戏运行时是不需要这个场景的
  • 打开TestScene场景,接下来的预制体创建就在这个场景中完成

加载关卡按钮的制作

  • 创建一个Button,重命名为LevelButton
  • 创建一个LevelButtonView脚本,挂到LevelButton上
  • LevelButtonView脚本的编写
    (代码请加Q:1517069595)
  • 在Assets文件夹下创建Resources文件夹,然后在Resources文件下创建Prefabs文件夹,再在Prefabs文件夹下创建UI文件夹,将LevelButton拉到Resources/Prefabs/UI 文件夹中,然后把层级视图中的LevelButton删除,这样预制体就创建好了
    FireBalls3d插图(16)
    FireBalls3d插图(17)

MainPanelView脚本的编写

  • 创建一个MainPanelView脚本

  • 将此脚本挂到MainPanel节点上

  • 在MainSceneManager脚本中注册MainPanelView
    (代码请加Q:1517069595)

  • MainPanelView类继承ViewBase

  • 添加成员变量
    (代码请加Q:1517069595)

  • 在Start中为成员变量赋值,并为各种按钮添加监听器(有些事件暂时没有处理程序,后期会处理)
    (代码请加Q:1517069595)

  • 重写基类的抽象方法(发送的一些事件暂时没有处理程序,后期会处理)
    (代码请加Q:1517069595)

  • 在Update中读取关卡数据(暂时读不出来数据,因为还没创建具体的关卡数据,就是没有json文件,并且还没有创建读写json文件的脚本,之后会处理)
    (代码请加Q:1517069595)

    数据读写(创建关卡数据并json化)

    (代码请加Q:1517069595)

    创建游戏场景中的各种预制体(所以关卡都是根据预制体生成的)

    (代码请加Q:1517069595)

    为一部分事件添加处理程序(Controller)

    (代码请加Q:1517069595)

    生成场景地图

    (代码请加Q:1517069595)

  • 在MainSceneManager脚本中注册LoadLevelController

MVC.instance.RegisterController("LoadLevelEvent", typeof(LoadLevelController)); //注册加载关卡控制器

1 对 “FireBalls3d”的想法;

  1. Pingback: viagra online

发表评论