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

安徽网站建设推广竞价推广专员

安徽网站建设推广,竞价推广专员,wordpress自定义搜索,重庆网站建设的公司大家好,我是阿赵。   最近把公司的游戏发布到各种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.dinnco.com/news/49633.html

相关文章:

  • 百度如何把网站做链接地址十大广告联盟
  • 手机网站建设规划图seo技术培训宁波
  • 做投票的网站网络推广页面
  • 我想看b站直播怎快手作品推广网站
  • 武汉网络营销十年乐云seo长沙seo服务哪个公司好
  • 关于门户网站建设通报最新全国疫情消息
  • 推广型网站开发公司bt磁力种子搜索引擎
  • 网站开发确认函全国疫情高峰感染高峰
  • 免费做图素材网站有哪些培训机构咨询
  • 郑州市建设路第二小学网站培训心得体会300字
  • 绵阳的网站建设公司怎么让百度搜出自己
  • PHP网站开发技术期末作品重庆疫情最新消息
  • c语言做的网站有什么优缺点营销型网站建设模板
  • 电子商务网站建设的意义宜兴网站建设
  • 网站建设模拟海外营销推广服务
  • 创建网站有什么用seo整站优化更能准确获得客户
  • 深圳网站平台制作百度排名规则
  • 网站怎么做优化百度能搜索到市场营销四大分析方法
  • 乐达淄博网站建设制作简单网页制作成品和代码
  • 门户网站如何运营2345电脑版网址导航
  • 申请手机网站全网搜索引擎优化
  • 曲靖网站建设公司正规软件开发培训学校
  • 哪里可以学家装设计师哪个合肥seo好
  • 温州专业做网站为什么打开网址都是站长工具
  • 重庆网站建设推荐广点通广告投放平台
  • 泉州网站开发公司百度关键词竞价价格
  • 昆明做网站seo的营销公司
  • 招聘网站开发需求分析高端定制网站建设
  • 为什么做民宿网站网页设计模板html代码
  • 免费做网站的app百度seo怎么做网站内容优化