当前位置: 首页 > news >正文

食品网站设计天津seo优化公司哪家好

食品网站设计,天津seo优化公司哪家好,团队建设优缺点,手机端网站建设大家好,我是阿赵。   最近把公司的游戏发布到各种PC的游戏大厅,遇到了挺多奇怪的需求。之前介绍了一些Unity发布PC端控制窗口最大最小化、修改exe信息等问题,这次来探讨一下退出游戏的问题。 一、收到奇怪的需求 某游戏大厅要求&#xff0…

  大家好,我是阿赵。
  最近把公司的游戏发布到各种PC的游戏大厅,遇到了挺多奇怪的需求。之前介绍了一些Unity发布PC端控制窗口最大最小化、修改exe信息等问题,这次来探讨一下退出游戏的问题。

一、收到奇怪的需求

  某游戏大厅要求,运行游戏后,如果玩家没有创建角色进入游戏,不准玩家退出游戏,点击exe窗口的关闭按钮,也不能关游戏。
  先不讨论这个需求是否道德的问题。单纯从技术的角度,看看这个需求是怎样实现的。

二、分析问题

  由于游戏本身是通过Unity引擎来做的,所以只能通过Unity提供的API来解决这个问题。
关于游戏退出的API,大概有这么几个:
1、Application.wantsToQuit
2、Application.quitting
3、MonoBehaviour.OnApplicationQuit
4、Application.Quit
  先说Application.Quit,这是主动调用的方法,调用了之后,程序就退出了,相当于点exe窗口的叉按钮关闭。
  然后是MonoBehaviour.OnApplicationQuit,这个是MonoBehaviour的一个生命周期,会在游戏退出的时候自动调用。
  然后是Application.wantsToQuit,这是一个注册回调,在程序想退出的时候,会调用这个注册的方法,如果在方法里面返回true,则程序会正常退出,如果在方法里面返回false,则程序并不会退出。
  最后是Application.quitting,这个也是一个注册回调方法,在程序真正退出的时候,会调用这个方法。
如果写在代码里面,大概是这样的:

  void OnApplicationQuit(){Debug.Log("OnApplicationQuit");}static bool WantsToQuit(){Debug.Log("The game wants to quit");if(canQuit == false){return false;}else{return true;}}static void Quiting(){Debug.Log("The game is quiting");}[RuntimeInitializeOnLoadMethod]static void RunOnStart(){Application.wantsToQuit += WantsToQuit;Application.quitting += Quiting;
}

  所以,针对一开始的需求,似乎答案很简单,就是在WantsToQuit方法里面,通过一定的条件来返回false,让程序不要退出就行了。Application.Quit方法调用之后,其实也是走到WantsToQuit方法。如果在WantsToQuit写死了返回false,那么调用Application.Quit也不会退出游戏了,所以一定要给WantsToQuit里面加条件返回,在某些情况下还是可以控制返回true的。

三、出现新的问题

  刚才说了三个方法,如果我们只处理WantsToQuit方法,有时候会发现在WantsToQuit里面return了false之后,游戏是没有退出,但有些功能异常了。
  这里也不啰嗦,直接说答案吧,造成这种问题的原因是:
1、不论WantsToQuit里面返回true或者false,OnApplicationQuit生命周期还是照样会执行的。
2、执行的顺序是,先执行WantsToQuit,然后再执行OnApplicationQuit。
3、quitting 方法在WantsToQuit返回false时是不会执行的,只有当WantsToQuit返回true,游戏真正退出的时候,才会执行。但如果是强制关闭进程的情况下,quitting也是不会执行的。
  知道了这个答案之后,就会发现,OnApplicationQuit这个方法可能不止你自己调用了,有很多插件类的代码,都会习惯在OnApplicationQuit这个方法里面做释放资源、关闭线程等清理操作。所以虽然你可能在WantsToQuit里面拦截了游戏关闭,但各种插件里面的OnApplicationQuit生命周期还是走到了,该释放的东西还是被释放掉了。
  就算你想在WantsToQuit之后做些挽救操作也没有用的,OnApplicationQuit执行在后面,而且是自动执行的,所以你很难拦截得到他。
  解决办法也是有的,不过就需要逐个去修改了。由于WantsToQuit执行得比较前面,所以可以定义一个全局变量,设置值和WantsToQuit返回结果一样。当各个对象的OnApplicationQuit执行的时候,先判断一下这个全局变量,如果是true的时候,才去执行本身应该执行的代码。

http://www.hkea.cn/news/171028/

相关文章:

  • 专做女装的网站网站备案是什么意思
  • 没有网站可以做seo排名吗小学生简短小新闻摘抄
  • 做程序网站需要什么代码宁波seo搜索排名优化
  • 网站建设开发语言新冠病毒最新消息
  • 怎么做1688网站网页制作工具有哪些
  • 一个网站的主题和设计风格最好用的免费建站平台
  • 网站开发主页手机优化游戏性能的软件
  • 怎么做属于自己的域名网站网络策划方案
  • destoon做的网站百度商务合作联系
  • 金山区网站制作网络营销策划书1500字
  • 厦门网站建设制作工具熊猫关键词挖掘工具
  • 徐州网站建设 网站推广百度首页快速排名系统
  • 在线转格式网站怎么做拼多多seo 优化软件
  • 成都理工疫情最新消息贵港seo
  • 网站如何防止攻击怎么自己做一个小程序
  • 企业网站建设英文百度收录
  • wordpress查版本sem和seo的区别
  • 网站设计说明书怎么写网站建设平台官网
  • 有建网站的软件阿里云域名注册万网
  • 站长工具排名分析怎么创建公司网站
  • 网站建设标书四川seo哪里有
  • 接网站开发做多少钱建一个外贸独立站大约多少钱
  • wordpress表单录入seo报告
  • python做网站显示表格星巴克seo网络推广
  • 一个com的网站多少钱管理微信软件
  • 蒙阴网站建设软文代写网
  • 用python做一旅游网站南昌seo计费管理
  • 湖北省建设厅win10优化软件哪个好
  • 湖南企业建站系统平台软文有哪些发布平台
  • 南通 网络 公司网站真正免费建站