笨木头与游戏开发
只有你足够强,别人才会和你讲道理。
文章:
280
浏览:
2,983,617
博主:
笨木头
关注:
Unity、Net Core、Blazor
邮箱:
musicvs@163.com
首页
|
留言
分类目录
其它
Cocos2d-x
创业路
Android
LGame
C++
Unity3D
近期评论
自学Unity的小白
在
[Game Framework...
分享遇到的问题,旧版unity项目升级到高版本时出现的vs没有解决方案,不能高亮...
Cultist
在
留言...
回复给
迷途的老菜鸟
多谢,这个好啃多了...
迷途的老菜鸟
在
留言...
回复给
笨木头
谢谢大佬的分享,可以学到很多...
笨木头
在
留言...
回复给
迷途的老菜鸟
哈哈,没有更好玩的,就是做其他领域的开发去了。...
迷途的老菜鸟
在
留言...
所以笨木头大佬现在研究啥了? 不做游戏开发,还有更好玩的?...
笨木头
在
[笨木头“创2”路]No.10...
回复给
kkk
唉,我这不知道咋的,年龄越大,感悟越少,都不知道写点什么好...
[GameFramework]Demo-StarForce无封装简陋不完全版
笨木头 2018-03-26 17:11
其它
,
Unity3D
,
Game Framework
阅读
(12109)
评论
(10)
转载请注明,原文地址:
http://www.benmutou.com/archives/2597
文章来源:
笨木头与游戏开发
本文 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没有对应的教程,仅作学习参考用,以下为注意事项:
DemoSF_GameEntry脚本要挂载到GameFramework对象上(或其他对象也行,总之要让这个脚本生效)
删除DemoSF_Launch场景里MainCamera的AudioListener,因为这个场景是不会卸载的,其他场景可能会有AudioListener,这样会警告有两个Listener
如果UI上的按钮无法点击,那是正常的,因为我们没有设置好UI组件,在UI组件下建一个Canvas,名字无所谓(这里是UI Form Instances):
其次,必须把建好的Canvas对象拖到UI组件的Instance Root属性上
做了以上操作后,UI仍然无法响应操作的话,那就是我们的预制体没有建好,我猜大家可能会直接把官方Demo的MenuForm预制体复制过来用,但是官方的预制体是比较特别的,它没有Canvas等必须的组件(它通过代码自动创建)。
我们简单点,给自己的预制体加上两个必备脚本就可以了:
最后,少不了在初始场景里加上EventSystem,不然是无法响应点击事件的。
离开菜单流程时,要关闭菜单UI(否则UI会一直存在)
初始场景(DemoSF_Launch)的Camera的Tag一定不要设置为MainCamera,因为这个初始场景是不卸载的,如果它的Camera是Main的话,在代码中调用Camera.main的时候就会查找到初始场景的Camera,而不是你当前场景的Camera。
加载实体时(ShowEntity),可以传递一个UserData,当实体显示时,可以通过OnShow、OnInit等函数的UserData参数获取传递的值。这种方式可以用于一些实体的动态赋值,比如武器发射子弹时,子弹的位置要怎么确定?这时候就可以在显示子弹的时候传递当前武器的位置过去,子弹在显示时就可以获得到这个位置信息。
本Demo为严重阉割版,只演示最基础的功能,碰撞处理逻辑也只是用日志展示,没有攻击特效、没有死亡特效、也没有血量和攻击等概念。
通过这个Demo,你可以了解到以下的知识点:
Game Framework通过流程(Procedure)来控制场景间的切换
大部分操作是异步的(或者看起来是的),它们通过订阅事件来监听操作的结果(如加载UI成功事件、加载实体成功事件,唔,还有你自己定义的奇怪事件)
场景和UI是需要主动卸载的,否则会一直存在(哪怕切换了场景)
实体都要继承EntityLogic类,并且有固定的生命周期函数,套路很明确,上手比较轻松(你只要不断新建继承了EntityLogic的类,就能建立千奇百怪的实体了)。你可能印象最深刻的是:ShowEntity(加载实体)和HideEntity(隐藏实体)
记住UserData这个参数,它在订阅事件、加载实体等操作时都可以传递,然后在事件发生或实体成功加载时,你可以重新获得这个参数。然后,你可以做任何你想做的事情(不包括羞羞的那种)
本Demo十分简陋,仅供框架入门学习之用,学完本Demo后,请一定要继续研究官方的StarForce示例,并学习它的代码风格和思维。
2
上一篇
《炼裙者》、《进化》临时下载地址
下一篇
[GameFramework]Demo7-发起Web请求
10 条评论
平安京
2021-12-06 16:49:26
作者你好,Demo已经运行不起来了,请尽快更新
0
回复
一学就废
2022-08-25 16:56:06
游戏为啥运行不起来的呢!这可能是作者设计的一个坑之一
我们要找到DemoSF_ProcedureChangeScene.cs这个类
接下来,我们将OnEnter()方法中的
DemoSF_GameEntry.Scene.LoadScene ( nextSceneName, this);更改为
DemoSF_GameEntry.Scene.LoadScene (string.Format("Assets/DemoStarForce/{0}.unity", nextSceneName), this);
这样你就会发现能运行了
0
回复
贪狼
2022-09-10 10:54:24
也不是坑,是因为使用的GameFramework的版本不同,之前的Demo2的文章中就有指出(切换场景时,除了需要提供完整路径外,还需要提供后缀名),只是这个项目中用的还是之前的写法(只写场景名称),没有写出完整路径,会加载不出来场景,不过看一下代码调试就知道问题出在哪里了
0
回复
longsl
2019-02-26 12:07:52
赞!
0
回复
XTStarry
2018-09-06 21:27:49
为什么要另外写一个GameEntry呢?能起到什么作用?
0
回复
博主
笨木头
2018-09-07 08:25:04
没有什么特殊意义,只是一种写代码的习惯,你用别的方式来写也可以
0
回复
XTStarry
2018-09-06 21:00:05
为什么工程文件夹里面有一个GameFramework,还有一个UnityGameFramework?
对比了以下发现UnityGameFramework和E大的资源包一样,那GameFramework又是什么呢?
0
回复
博主
笨木头
2018-09-07 08:24:21
GameFramework是基础框架,不限于Unity引擎。
UnityGameFramework是基于Unity引擎再做的一层封装,比如未来可能由CocosGameFramework(只是比如)
0
回复
Ikobe
2018-04-28 14:18:45
阉割版的利于教学。。。
0
回复
博主
笨木头
2018-04-28 15:23:20
嗯嗯,已经尽量阉割
0
回复
发表评论
发表评论
粤ICP备16043700号
本博客基于
Blazor
和
Ant Design Blazor
开发