- 博客(109)
- 收藏
- 关注
原创 Games101
这部分后续还会讲述关于OpenGL和Shader相关的知识。光栅化:把三维空间的几何形体显示在屏幕上实时:每秒出现30幅画面,即每秒30帧(30fps)。如果不满足,则不称之为实时,称之为离线。:几何相关的一些知识包括:曲线曲面简单曲面——通过细分获得复杂曲面形状发生变化时,面如何变化,如何保持原有的拓扑结构会拓展一些相关知识,如路线追踪、表面建模、光线传播方法Trade Off:慢,但是效果好又快又好:实时光线追踪for example:物理模拟,如一块布随风摆动。
2023-01-29 22:46:00 573 1
原创 Xlua热更新基础教学
热更新分类第一种方案:1.项目开发中,可以将部分逻辑提取到一个单独的代码工程中,打包为DLL2.将DLL打包为AssetBundle3.Unity程序动态加载AssetBundle中的DLL文件,使用Reflection机制来调用代码第二种方案:lua插件。在Unity环境内嵌一个lua虚拟机,经常变动的和对执行效率没要求的逻辑用Lua实现,游戏启动时加载服务器上最新的lua字节码来执行游戏。========================================
2022-01-29 15:11:39 4128 1
原创 Unity项目优化
特殊文件链接Unity3D研究院之手游开发中所有特殊的文件夹 | 雨松MOMO程序研究院CPU和GPU的分工链接Render - 浅谈 CPU 与 GPU 如何分工? - 知乎脚本优化链接MipMap与LOD是何物?_penchaoo-CSDN博客_mipmaplod偏移怎么调知识补充:HZ:赫兹,刷新的频率。 比如显卡的赫兹是144,而显示器的帧率是60,那么帧率就会更不上显卡。每两帧渲染cpu的画面在...
2022-01-28 22:19:50 4298
原创 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 4309 1
原创 Shader彩虹材质(●‘◡‘●)
Shader "RR/Shader1"{ Properties { //属性 _Color("Color Tint",Color) = (1.0,1.0,1.0,1.0) } SubShader { //设置渲染状态和标签 Pass { //开始CG代码 CGPROGRAM //代码的编译指定 #pragma vertex vert22 #pragma fragment frag22 //与我们属性里定义的color一致 fixed4 .
2022-01-28 00:44:50 1537
原创 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 1512
原创 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 645
原创 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 1309
原创 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 649 1
原创 Unity注册登录Demo的实现-03(全部完整代码)(客户端、服务端、数据库)
流程客户端服务端---------------------------------------------------------------------------------------------------------------------------------客户端PhotonEngine.cs:差不多算是主类吧,将其构造成单例,到时候方便调用里面有处理服务端返回的响应的方法,还有接受客户端发来的事件的方法等等
2022-01-11 00:19:27 2220
原创 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 285
原创 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 401
原创 NHibernate管理会话工厂,更简单的数据库操作API编写
这次就是完整的全部项目代码了大家收好结构hibernate.cfg.xml:用于配置连接数据库<?xml version="1.0" encoding="utf-8" ?><hibernate-configuration xmlns="urn:nhibernate-configuration-2.2"> <session-factory> <property name="connection.provider">N.
2022-01-10 15:13:18 349
原创 NHibernate创建session操作,以及transaction事务的使用
根据我们之前的配置。用session然后直接new就可以了,很方便。Program.cs:using NHibernate;using NHibernate.Cfg;using NHiberToMySQL.Model;using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Threading.Tasks;namespace NHiberToMy
2022-01-10 12:17:47 565 1
原创 NHibernate的配置
1.创建一个控制台应用2.引入dll,这里可以右击引用,点击管理NuGet程序包,然后直接去搜索下载。我们这里下载MySql.Data和NHibernate3. 配置hibernate的config可以去官网Your first NHibernate based application - NHibernate找到一个Configure NHibernate其中我们要更改的是我红色方框圈出来的地方,一个是数据库类型,一个是连接在项目中添加一个hibernate..
2022-01-10 11:49:13 711
原创 .Net连接MySql,以及读取和写入操作
1.创建一个控制台应用2.添加引用:MySql.Data.dll3.随便打些api看看能不能.出来,如果可以的话,就是引用成功了4.连接上数据库,并且测试一下读取和写入的操作。最后附上完整代码:Program.cs:using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Threading.Tasks;using MyS
2022-01-09 22:32:42 895
原创 PhotonServer-服务端给客户端的Event推送
1.服务端向客户端推送Event完整代码:ClientPeer.cs:using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Threading.Tasks;using Photon.SocketServer;using PhotonHostRuntimeInterfaces;namespace RRGameServer{ clas
2022-01-09 18:03:56 331
原创 PhotonServer,客户端发送请求给服务端,服务端解析请求,发送回客户端响应,客户端再解析服务端发过来的响应。
1.(客户端发送给服务端)test中的构造参数并且发送完整代码如下test.csusing System;using System.Collections;using System.Collections.Generic;using UnityEngine;public class test : MonoBehaviour { void Start () { } void Update () { if (Input.GetMouseButt.
2022-01-09 16:59:06 602
原创 PhotonServer-unity向服务端发送请求,并且服务端返回
1.打开unity,在其中创建一个gameobject,创建一个test脚本挂在上面,用于点击测试向服务端发消息的测试test.cs:using System;using System.Collections;using System.Collections.Generic;using UnityEngine;public class test : MonoBehaviour { void Start () { } void Update () { if
2022-01-09 16:07:02 781
原创 Unity连接Photon
1.创建一个Unity项目2.创建一个名为Plugins的文件夹,并且把Photon的lib里面的Photon3Unity3D.dll文件复制到Plugins文件夹下面(注意这边文件夹的创建名字千万不能错)3. 创建一个名为PhotonEngine的GameObject,以及其脚本。把脚本构造成单例,且跨场景是不销毁。4.引用ExitGames.Client.Photon并且,实现IPhotonPeerListener接口5.在start,update和on.
2022-01-09 15:26:28 734
原创 PhotonServer中日志的配置
1.添加引用log4net.dll和ExitGames.Logging.Log4Net.dll2.在项目中添加一个log4net的config文件,并且在PhotonServer的src下面的MMo下面的Server下面的log4net.config的内容复制给我们项目中刚才添加的。上图config中的内容是需要更改的3.并且将复制到输入目录设置为始终复制4.更改config配置。将value后面那块圈出来的位置,改成自己的deploy中创建的...
2022-01-09 12:52:59 521 1
原创 PhotonServer中PhotonServer.config文件的配置
1.打开config文件,先复制里面的一个MMoDemo。2.先改掉大的名字(注意成对改)3.改掉DisplayName,这个就是你下面图标里面可以直接看到的那个名字4.将其中的PolicyFileListeners和WebSocketListeners给删除,因为这是web的,咱们用不到(●'◡'●)删就完事了5.Application这里也删掉一个,因为暂时我们只有1个,选中删除就完事了6.修改Application中的一些值其中最上面..
2022-01-09 01:07:45 504
原创 PhotonServer-创建APPServer和Client类
1.在项目的引用中添加引用,添加的是PhotonServer的lib中的三个dllExitGamesLibs.dllPhoton.SocketServer.dllPhotonHostRuntimeInterfaces.dll2.将MyGameServer去继承ApplicationBase,并且引入相应命名空间MyGameServer.cs:using System;using System.Collections.Generic;using System.Linq;
2022-01-09 00:14:03 615
原创 PhotonServer-.NET文件的创建与生成路径的配置
1.打开visual studio,然后创建一个类库,注意后面是.NET Framework2.右击刚才的项目名称,点击属性,找到生成,在下面自己配置好生成路径,便于查找。3.右击项目,点击生成,可以在你设置的路径下面找到其生成的dll文件,这个文件我们后面可以放到PhotonServer那边用(●'◡'●)...
2022-01-08 23:47:39 342
原创 PhotonServer的下载与配置
1.在官网下载PhotonServer的Server的sdkMultiplayer Game Development Made Easy | Photon Engine2.下载licenseMultiplayer Game Development Made Easy | Photon Engine3.将下载的license文件添加到photon里面的deploy下的bin_Win64下4.打开该目录下的PhotonControl.exe,在右下角的图标右击可以查看lice..
2022-01-08 22:48:40 1256 1
原创 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 2013
原创 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 1894 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 569
原创 Unity中UI框架的编写4-栈以及NBasePanel
在打开关闭弹窗的时候,可以使用stack的结构其中红色箭头所指的是我们使用了stack来管理UI面板的入栈与出栈其中蓝色箭头是打开和关闭面板时,调用其基类的方法,来控制单个面板的显示以及射线点击是否阻挡。(其中注意点NBasePanel是基类,注意其中的功能不要一不下心被子类重写了QWQ)...
2022-01-08 14:31:46 431
原创 Unity中UI框架的编写3-NUIManager控制面板实例化和管理
在NUIManager中获取面板方法是将我们从json里面提取到的list中的name去与我们UIPanelType中的枚举类型去做配对,如果相同,则提取其路径。然后将其实例化出来然后我们写一个PushPanel的方法,参数是UIPanelType的枚举类型,即可完成显示面板---------------------------------------------------------------------------------------------------...
2022-01-08 12:52:20 418
原创 Unity中UI框架的编写2-NUIManager构造单例
将NUIManager构造成单例:这样一来,以后再使用该类里面的方法,可以用以下方式NUIManager.GetInstance().XXXXX方法而且除此以外,我们前面再构造函数里面调用了解析json的方法,这样一来,在我们使用NUIManager.GetInstance()的时候,他一开始就会自动调用解析json函数的方法。很方便嘻嘻(●'◡'●)...
2022-01-07 23:39:29 291
原创 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 558
原创 Unity中UI框架的使用4-小小优化
在我们之前的写法当中所有的Panel的预制物,都要添加一个NBasePanel其实是可以优化的。如何优化呢?可以采用继承,比如LoadingPanel,将其继承NBasePanel,这样其就有了NBasePanel中的方法。除此之外,LoadingPanel之前继承的是MonoBehavior,现在继承了NBasePanel,但是我们的NBasePanel也是继承的MonoBehavior,这样一来,LoadingPanel不仅有NBasePanel的方法,也拥有MonoBeh.
2022-01-07 22:31:23 380
原创 Unity中UI框架的使用3-主界面中的弹窗和关闭
效果图:在主页面点击排位赛按钮,就会弹出图2中的一个弹窗,再点击弹窗右上角的关闭按钮,就会关闭弹窗,回到图3的效果。方法:1.将PopUp这个面板添加到UIPanelType.cs文件中,并且将其名称和路径添加到UIPanelType.json文件中。2. 在MainPanel的面板上添加一个MainPanelController的脚本,并且在里面写一个ShowPopUpPanel的方法供按钮调用。(作用是点击之后可以弹出PopUp的面板),并且将此方法绑定...
2022-01-07 21:49:31 2967
原创 Unity中UI框架的使用2-进度条跳转到主页面
效果图:Loading面板的进度条加载完毕之后,直接跳转到主页面实现方法:1.首先要控制进度条的移动:这部分功能我们是在LoadingPanel面板上写了一个名LoadingPanel的脚本,其中利用一个协程,来控制进度条的移动。2.其次是跳到主页面:在协程条件退出的时候,(这里我们设置的是三秒后退出协程),退出时先关闭当前UI面板,再显示主面板即可。LoadingPanel.csusing System;using System.Collections;using .
2022-01-07 19:24:06 913
原创 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 1898
原创 Unity好友列表UI拼接方法
使用Scroll View来完成这个好友列表的滚动功能。在Content里面可以插入很多图片,来表示你不同好友的头像。但是如果一个一个插入之后,排版比较麻烦,所以可以在Content的组件里面添加Vertical Layout Group,这样Content里面的图片就会自动按竖直去排列自动布局了还有一点就是如果你新添加了image之后,可能会超出你Content容器的大小,那么总不可能说你每次新添加一个image之后都去手动的调整Content的大小。所以说这时候你还要在Content..
2022-01-01 16:30:23 1228
原创 Unity中的UGUI事件
事件具体有如下两种方法第一种:直接添加EventTrigger然后再具体添加事件的类型,调用不同的方法第二种:在物体身上挂脚本,然后脚本里面先引用using UnityEngine.EventSystems;再继承之前上图的三个接口,再实现接口,也可以实现一样的效果。...
2021-12-31 19:14:55 507
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人