[GameFramework]Demo-StarForce无封装简陋不完全版

笨木头  2018-03-26 17:11   Game Framework,Unity3D,其它   阅读(649)   2条评论

本文 Game Framework 版本:3.1.1

本文 Unity3D 版本:2017.3

更多GF教程和实例:https://github.com/mutouzdl/gameframework_demo.git

 

转载请注明,原文地址:http://www.benmutou.com/archives/2597
文章来源:笨木头与游戏开发

 

由于GameFramework的官方Demo(StarForce)封装的比较多,不利于入门学习(但作为代码风格和编程思路的学习是非常好的),所以,我打算用尽量少(能不能用就不用)的封装来重新实现一遍StarForce的基础功能,希望能帮到初学框架的你。

在学习此Demo之前,强烈建议先看完Demo1至Demo6。

 

本Demo源码:https://github.com/mutouzdl/gameframework_demo.git

下载源码后,用Unity3D打开工程,进入DemoStarForce目录,即为本Demo的项目。

 

本Demo没有对应的教程,仅作学习参考用,以下为注意事项:

  1. DemoSF_GameEntry脚本要挂载到GameFramework对象上(或其他对象也行,总之要让这个脚本生效)
  2. 删除DemoSF_Launch场景里MainCamera的AudioListener,因为这个场景是不会卸载的,其他场景可能会有AudioListener,这样会警告有两个Listener
  3. 如果UI上的按钮无法点击,那是正常的,因为我们没有设置好UI组件,在UI组件下建一个Canvas,名字无所谓(这里是UI Form Instances):

    其次,必须把建好的Canvas对象拖到UI组件的Instance Root属性上

    做了以上操作后,UI仍然无法响应操作的话,那就是我们的预制体没有建好,我猜大家可能会直接把官方Demo的MenuForm预制体复制过来用,但是官方的预制体是比较特别的,它没有Canvas等必须的组件(它通过代码自动创建)。

    我们简单点,给自己的预制体加上两个必备脚本就可以了:

    最后,少不了在初始场景里加上EventSystem,不然是无法响应点击事件的。

  4. 离开菜单流程时,要关闭菜单UI(否则UI会一直存在)
  5. 初始场景(DemoSF_Launch)的Camera的Tag一定不要设置为MainCamera,因为这个初始场景是不卸载的,如果它的Camera是Main的话,在代码中调用Camera.main的时候就会查找到初始场景的Camera,而不是你当前场景的Camera。
  6. 加载实体时(ShowEntity),可以传递一个UserData,当实体显示时,可以通过OnShow、OnInit等函数的UserData参数获取传递的值。这种方式可以用于一些实体的动态赋值,比如武器发射子弹时,子弹的位置要怎么确定?这时候就可以在显示子弹的时候传递当前武器的位置过去,子弹在显示时就可以获得到这个位置信息。
  7. 本Demo为严重阉割版,只演示最基础的功能,碰撞处理逻辑也只是用日志展示,没有攻击特效、没有死亡特效、也没有血量和攻击等概念。

 

通过这个Demo,你可以了解到以下的知识点:

  1. Game Framework通过流程(Procedure)来控制场景间的切换
  2. 大部分操作是异步的(或者看起来是的),它们通过订阅事件来监听操作的结果(如加载UI成功事件、加载实体成功事件,唔,还有你自己定义的奇怪事件)
  3. 场景和UI是需要主动卸载的,否则会一直存在(哪怕切换了场景)
  4. 实体都要继承EntityLogic类,并且有固定的生命周期函数,套路很明确,上手比较轻松(你只要不断新建继承了EntityLogic的类,就能建立千奇百怪的实体了)。你可能印象最深刻的是:ShowEntity(加载实体)和HideEntity(隐藏实体)
  5. 记住UserData这个参数,它在订阅事件、加载实体等操作时都可以传递,然后在事件发生或实体成功加载时,你可以重新获得这个参数。然后,你可以做任何你想做的事情(不包括羞羞的那种)
  6. 本Demo十分简陋,仅供框架入门学习之用,学完本Demo后,请一定要继续研究官方的StarForce示例,并学习它的代码风格和思维。

 

2 评论

发表评论

电子邮件地址不会被公开。 必填项已用*标注