Unity3D
weirdo_ran
菜鸡游戏开发工程师
展开
-
Xlua热更新基础教学
热更新分类第一种方案:1.项目开发中,可以将部分逻辑提取到一个单独的代码工程中,打包为DLL2.将DLL打包为AssetBundle3.Unity程序动态加载AssetBundle中的DLL文件,使用Reflection机制来调用代码第二种方案:lua插件。在Unity环境内嵌一个lua虚拟机,经常变动的和对执行效率没要求的逻辑用Lua实现,游戏启动时加载服务器上最新的lua字节码来执行游戏。========================================原创 2022-01-29 15:11:39 · 3948 阅读 · 1 评论 -
Unity项目优化
特殊文件链接Unity3D研究院之手游开发中所有特殊的文件夹 | 雨松MOMO程序研究院CPU和GPU的分工链接Render - 浅谈 CPU 与 GPU 如何分工? - 知乎脚本优化链接MipMap与LOD是何物?_penchaoo-CSDN博客_mipmaplod偏移怎么调知识补充:HZ:赫兹,刷新的频率。 比如显卡的赫兹是144,而显示器的帧率是60,那么帧率就会更不上显卡。每两帧渲染cpu的画面在...原创 2022-01-28 22:19:50 · 4170 阅读 · 0 评论 -
Unity通信之Socket架构的业务层使用方法
效果:两个客户端,一个称为客户端A,一个称为客户端B。一个服务器。一组协议。客户端A发送,服务器接受到,并且转发给所有客户端。客户端A和客户端B接收到服务器的消息转发,并且读取出来,显示到客户端A和客户端B。1.网络层定义好DTO以及协议。2. 客户端的chatcontroller可以去拿服务端的DTO以及调api发送DTO给服务端。3.服务端的controller要接受DTO并且转发。4.在客户端和服务端的c...原创 2022-01-28 13:26:35 · 4192 阅读 · 1 评论 -
Unity联机人物加入游戏、同屏移动、与攻击
1.加入游戏BattleFieldReuqest里面JoinRequest:把告诉服务器我要加入了,发送的数据里面key是type,值是join。然后BattleFieldHandler里面对code判断,如果code是join,就返回player的Index给客户端,并且推送Event给所有客户端。客户端在解析数据,拿到plauerIndex,并且在对应点实例化出来这个玩家。并且将index赋值给其PlayerMove脚本,并且将isMe设置为true。添加到客户端的PlayerList里面。原创 2022-01-14 20:47:24 · 1446 阅读 · 0 评论 -
Unity单机人物移动
1.创建地图2.地图设置成static,然后用Navigation去bake一下。3.创建人物4.在人物身上添加Nav Mesh Agent这上面的参数可以改,比如Angular speed就是人物的转向的速度。我们到时候控制人物身上的这玩意就可以直接去实现移动人物的效果。5.创建一个PlayerMovo脚本,直接控制nav agent移动就ok了上面 还调用了动画状态机。这里面动画状态机的设置是一个int类型的speed,然后如果speed>0.2就播放run,否原创 2022-01-13 22:29:17 · 616 阅读 · 0 评论 -
Unity同屏移动-客户端与服务端
1.Show Request.cs作用是发送给客户端自己的id2.PlayerMagener.cs来管理所有的Player其中Add方法,可以将玩家添加到玩家字典里面,以及有显示自己的请求。这边的显示自己的功能由PlayerController.cs里面刚开始就直接加进去。3.服务端处理Show的请求,ShowHandler.cs:拿到id,并且Event推送给其他的所有客户端。4.客户端处理Show的Event,PhontonEngine....原创 2022-01-13 14:09:29 · 1251 阅读 · 0 评论 -
Unity客户端与服务端交互之Event
功能:客户端1,2都连接了服务器;客户端1给服务器发了消息“asdasd”服务器做Event事件发给所有客户端客户端1,2全都收到了消息“asdasd”注意点:MyGameServer里面,一个peer就是一个连接,所以我们每次有一个客户端连接,就要把其peer添加到一个list中。服务器然后在发送Event的时候,遍历List,群发就ok。———————————————————————————————————————————服务端ChatHandler.c.原创 2022-01-11 23:16:18 · 568 阅读 · 1 评论 -
Unity注册登录Demo的实现-03(全部完整代码)(客户端、服务端、数据库)
流程客户端服务端---------------------------------------------------------------------------------------------------------------------------------客户端PhotonEngine.cs:差不多算是主类吧,将其构造成单例,到时候方便调用里面有处理服务端返回的响应的方法,还有接受客户端发来的事件的方法等等原创 2022-01-11 00:19:27 · 2145 阅读 · 0 评论 -
Unity注册Demo的实现-02
1.在解决方案下创建一个Common的类库(Framework),差不多就是客户端与服务端的协议,因为到时候互相发消息,那些code的值1,2,3,4啥的,很乱,所以我们用一个common,来搞协议。2.在服务端那边添加引用,直接引用项目Common3.将Common中的框架设置成3.5。并且生成路径设置成Unity客户端里面的Plugins目录下(这样common就添加到客户端了)。4.把common改成枚举Class1.cs:name..原创 2022-01-10 16:19:06 · 245 阅读 · 0 评论 -
Unity注册Demo的实现-01
1.将Manager,Mapping,Model,hibernate.cfg.xml,NHibernateHelper.cs这五个文件复制到我们下面所指的服务器中2.更改命名空间,按住Ctrl+F查找,然后全部替换3.添加NHibernate和MySql的dll引用4.做个测试看看成功没重新生成,并且重启打开服务器log成功( •̀ ω •́ )y...原创 2022-01-10 15:50:54 · 351 阅读 · 0 评论 -
Unity中Dotween插件的使用
1.首先导入Dotween插件的包2.在脚本中引用DG.Tweening3.以OnEnter的红色部分为例,在打开页面的时候要有一个渐变的效果,那么就先将alpha设置成0,然后调用DOFade方法,第一次参数是到几(比如我们这边写的是1,前面的alpha是0,那么效果就是从0转换到1)。第二个参数是时间(比如我们这边写的是0.2f,那么他就会在0.2秒之内完成从0到1的渐变)。最后,Dotween插件里面的很多方法的API你按了.之后都是DOXXX,大家可以自己去试试(原创 2022-01-08 16:03:35 · 1966 阅读 · 0 评论 -
Unity中UI框架的编写6-OnEnter和OnPuse的开发以及多态的使用
效果图点击计时->再关闭面板->再次点击计时->发现时间继续上次的计算在PopupPanelController的脚本中重写其基类的OnEnter和Onexit方法PopupPanelController.cs:using System;using System.Collections;using System.Collections.Generic;using UnityEngine;using UnityEngine.UI;using DG.原创 2022-01-08 15:52:08 · 1846 阅读 · 2 评论 -
Unity中UI框架的编写5-面板生命周期分析
在NBasePanel中有OnEnter(),OnPause(),OnResume(),OnExit()这四个方法其中OnEnter()和OnExit()是UI开启和关闭时候对应执行的。其中OnPause()的意思是,如果你先开启了一个UI面板A,但是后来你开启了一个UI面板B,这个UI面板B挡住了A,那么A就要执行OnPause()方法来关闭其功能。到了后来呢,如果你的B关闭了,那么A面板就可以执行OnResume()方法来恢复其功能。But问题是,我们怎么找到新打开的UI面板的前原创 2022-01-08 14:48:56 · 540 阅读 · 0 评论 -
Unity中UI框架的编写4-栈以及NBasePanel
在打开关闭弹窗的时候,可以使用stack的结构其中红色箭头所指的是我们使用了stack来管理UI面板的入栈与出栈其中蓝色箭头是打开和关闭面板时,调用其基类的方法,来控制单个面板的显示以及射线点击是否阻挡。(其中注意点NBasePanel是基类,注意其中的功能不要一不下心被子类重写了QWQ)...原创 2022-01-08 14:31:46 · 383 阅读 · 0 评论 -
Unity中UI框架的编写3-NUIManager控制面板实例化和管理
在NUIManager中获取面板方法是将我们从json里面提取到的list中的name去与我们UIPanelType中的枚举类型去做配对,如果相同,则提取其路径。然后将其实例化出来然后我们写一个PushPanel的方法,参数是UIPanelType的枚举类型,即可完成显示面板---------------------------------------------------------------------------------------------------...原创 2022-01-08 12:52:20 · 384 阅读 · 0 评论 -
Unity中UI框架的编写2-NUIManager构造单例
将NUIManager构造成单例:这样一来,以后再使用该类里面的方法,可以用以下方式NUIManager.GetInstance().XXXXX方法而且除此以外,我们前面再构造函数里面调用了解析json的方法,这样一来,在我们使用NUIManager.GetInstance()的时候,他一开始就会自动调用解析json函数的方法。很方便嘻嘻(●'◡'●)...原创 2022-01-07 23:39:29 · 250 阅读 · 0 评论 -
Unity中UI框架的编写1-解析JSON配置文件
1.在Unity中创建一个NUIManager文件夹,然后创建NUIManager的cs脚本文件。接着在该文件夹下创建一个名为Resources的文件夹(此处注意拼写一定不能错,因为我们后面要调用Resouces的方法来加载出json文件),最后在Resouces文件夹下创建我们的JSON文件,我取名为UIPanelType(注意后缀是.json)。2.配置json文件3.在NUIManager中读取json文件,并且解析其中的内容到我们的脚本中。两个序列化和一个解析原创 2022-01-07 23:25:04 · 529 阅读 · 0 评论 -
Unity中UI框架的使用4-小小优化
在我们之前的写法当中所有的Panel的预制物,都要添加一个NBasePanel其实是可以优化的。如何优化呢?可以采用继承,比如LoadingPanel,将其继承NBasePanel,这样其就有了NBasePanel中的方法。除此之外,LoadingPanel之前继承的是MonoBehavior,现在继承了NBasePanel,但是我们的NBasePanel也是继承的MonoBehavior,这样一来,LoadingPanel不仅有NBasePanel的方法,也拥有MonoBeh.原创 2022-01-07 22:31:23 · 329 阅读 · 0 评论 -
Unity中UI框架的使用3-主界面中的弹窗和关闭
效果图:在主页面点击排位赛按钮,就会弹出图2中的一个弹窗,再点击弹窗右上角的关闭按钮,就会关闭弹窗,回到图3的效果。方法:1.将PopUp这个面板添加到UIPanelType.cs文件中,并且将其名称和路径添加到UIPanelType.json文件中。2. 在MainPanel的面板上添加一个MainPanelController的脚本,并且在里面写一个ShowPopUpPanel的方法供按钮调用。(作用是点击之后可以弹出PopUp的面板),并且将此方法绑定...原创 2022-01-07 21:49:31 · 2880 阅读 · 0 评论 -
Unity中UI框架的使用2-进度条跳转到主页面
效果图:Loading面板的进度条加载完毕之后,直接跳转到主页面实现方法:1.首先要控制进度条的移动:这部分功能我们是在LoadingPanel面板上写了一个名LoadingPanel的脚本,其中利用一个协程,来控制进度条的移动。2.其次是跳到主页面:在协程条件退出的时候,(这里我们设置的是三秒后退出协程),退出时先关闭当前UI面板,再显示主面板即可。LoadingPanel.csusing System;using System.Collections;using .原创 2022-01-07 19:24:06 · 857 阅读 · 0 评论 -
Unity中UI框架的使用1-添加面板、显示Loading页面
其中BasePanel和Canvas都是挂在面板的预制物上的。1.导入我们的UI框架(本篇文章中有用的是两个UIPanelType,NUIManager和NBasePanel,会放在文章最后供大家使用)2.先将我们做好的Panel设置成预制物,注意这边创建一个叫做Resources的文件夹,并且下面创建一个Panel文件夹,然后把预制物都放在里面。3.在PanelType的脚本文件中注册我们需要管理的面板的信息。(这边注册两个来示范)4.在PanelTyp...原创 2022-01-07 18:10:10 · 1784 阅读 · 0 评论 -
Unity好友列表UI拼接方法
使用Scroll View来完成这个好友列表的滚动功能。在Content里面可以插入很多图片,来表示你不同好友的头像。但是如果一个一个插入之后,排版比较麻烦,所以可以在Content的组件里面添加Vertical Layout Group,这样Content里面的图片就会自动按竖直去排列自动布局了还有一点就是如果你新添加了image之后,可能会超出你Content容器的大小,那么总不可能说你每次新添加一个image之后都去手动的调整Content的大小。所以说这时候你还要在Content..原创 2022-01-01 16:30:23 · 1159 阅读 · 0 评论 -
设计模式之-单例模式
Unity中单例模式:虽然这边有t1和t2两个对象,但是实际上是同一个。效果图原创 2022-01-01 00:22:03 · 437 阅读 · 1 评论 -
Unity中的UGUI事件
事件具体有如下两种方法第一种:直接添加EventTrigger然后再具体添加事件的类型,调用不同的方法第二种:在物体身上挂脚本,然后脚本里面先引用using UnityEngine.EventSystems;再继承之前上图的三个接口,再实现接口,也可以实现一样的效果。...原创 2021-12-31 19:14:55 · 456 阅读 · 0 评论 -
Unity背包格子UI自动布局
如图所示,使用Grid Layout Group,把他挂在父物体身上,这样你拖动父物体的时候,子物体(也就是里面的格子,就会自动的变大或者缩小UI的自动布局除了上面的Grid Layout Group之外,还有很多想了解的自己去试试吧)...原创 2021-12-31 17:16:32 · 985 阅读 · 1 评论 -
Unity赛车游戏复刻-0code
效果图步骤1:1.1刷地图,在GameObject面板里面创建Terrian,然后去刷1.2 水 用商店自带的Water面片,(有高级有低级的,带不带反射的,主要看自己电脑配置了1.3 skybox (我也用的商店里得1.4 风 1.5 光晕1.6摄像机特效下载这个PacketManager里面Post P...原创 2021-12-30 17:43:37 · 528 阅读 · 0 评论 -
Unity-时间-Time,Invoke,InvokeRepeating,以及协程的用法
1.Time计时的用法2.Invoke和InvokeRepeating的延时方法3.协程方法的使用教学4.利用协程制作技能CD的图片的效果。原创 2021-12-28 14:34:36 · 526 阅读 · 0 评论