1.Unity新HL网络API——NetCode 0.1.0-preview6 文档翻译 第一篇 入门
2.MaxtoCode 是什么?
3.NetCode小技巧
4.银行netcode是什么
5.如何将asp. net代码反编译为c#源码?
Unity新HL网络API——NetCode 0.1.0-preview6 文档翻译 第一篇 入门
翻译者:BolanT
注:转载时应标注原文链接,以便在NetCode版本更新、文档内容改变时查阅。
原文链接(官方文档):
本文档将提供一个使用Unity NetCode创建基本客户端/服务器结构联机游戏的实践教程。
译者注:建议在学习NetCode前对Unity ECS有较深入了解,因为当前版本NetCode的anysdk 源码API和功能还在发展中,没有ECS基础可能会难以理解其中概念。在翻译中,对文档中模糊、版本变化、缺乏解释的内容进行了注释,但可能对无ECS基础读者仍较为困难,甚至可能增加困惑。
一、创建项目
启动UnityHub并创建一个新项目。
(注:使用Unity NetCode需要的Unity版本至少为.3.b及以上。)
打开Package Manager(目录:Window->Package Manager),在包管理器窗口顶部栏,选择Advanced下拉菜单,勾选Show preview packages。
至少安装以下Package:
注:某些包可能为其他包的依赖项,无需过多关注,只需确保上述包的右侧图标显示为箭头或勾选状态且无报错,随意升级或卸载某些包可能会导致难以解决的错误。
二、创建初始场景
为了在客户端和服务器之间共享数据,需要为每个客户端和服务器创建不同的World。首先在NetCode中实现这种分离,创建一个客户端World和一个服务器World。
注:当前版本的NetCode会自动创建ClientWorld和ServerWorld,并注入所需官方System。cci指标源码设置使用NetCode自带的世界注册前,可能需要编写脚本找到这两个World并用代码管理System。ClientWorld在World.AllWorlds中的Index为1,ServerWorld在World.AllWorlds中的Index为7。原有的World.AllWorlds[0](即DefaultWorld)失去作用,它不会注入任何有意义的System,同时原有的Convert To Entity组件也因此失去作用,需要用新的ConvertToClientServerEntity组件代替。在将非NetCode ECS游戏迁移到NetCode时需特别注意。
创建一个空GameObject(示例中称为SharedData),添加ConvertToClientServerEntity组件。
设置好后,在客户端和服务器世界中生成一个平面。右键单击SharedData Prefab,选择3D Object -> Plane,创建嵌套在SharedData下的Plane。
三、创建ghost预制件
为了在客户端/服务器结构下运行游戏,需要为联网对象创建一个定义,称为ghost。创建ghost预制件需要以下步骤:在场景中创建一个Cube(右键SharedData,选择3D Object > Cube),然后将创建的Cube拖动到Project窗口的Asset文件夹。这创建了一个Cube的预制件。
注:创建完Prefab后可删除场景中的Cube。若遇到问题,使用搜索引擎搜索如何在Unity中创建Prefab即可。
NetCode使用PlayerId来识别不同的玩家。要将之前的Cube预制件作为玩家,需创建一个包含以下简单代码的u群宝源码组件。
创建新文件MovableCubeComponent.cs,并添加GenerateAuthoringComponent注解(关于使用和理解可参考B站视频av)。将此组件添加到Cube预制件,然后添加Ghost Authoring组件,点击Update Component List按钮更新组件列表。
完成后,Unity会为Translation和Rotation组件添加默认值,并将组件展开到列表中,让用户选择它们在客户端或服务端的存在。
注:例如,输入和渲染组件仅在客户端存在,不应当在客户端操作的内容(如物理/可见性更新)仅在服务端存在。
在示例中,服务端关闭了PerInstanceCullingTag和RenderMesh。客户端上的插值物体不进行任何物理模拟。
注:原文未关闭客户端的物理模拟,有时在需要高同步且不担心外挂的物理模拟游戏时,客户端模拟物理可以提升视觉效果。此外,原文未提及关闭RenderBounds,该组件也应在服务端关闭。
将Default Client Instantiation更改为Owner Predicted,以便在本地预测运动。
四、创建Ghost集合
说明:为了向NetCode提供所知Ghost的信息,需要设置GhostCollection,并将其添加到SharedData下。客户端和服务端都需要了解当前的Ghost。
右键SharedData,选择Create Empty,雷电群控源码将新建的GameObject命名为GhostCollection,添加GhostCollectionAuthoringComponent组件。
在组件中点击Update ghost list按钮,然后点击Generate collection code按钮。
五、建立连接
服务器开始监听连接,客户端连接至服务端,并标记为“游戏中”,开始发送快照。此案例只需简单编码使游戏启动即可。在Assets文件夹下创建Game.cs文件,并输入以下代码。
Game.cs:
注:原文可能未直接在OnCreate方法中添加连接逻辑,这是因为当系统发现断开连接时,只需重新CreateEntity触发连接,这也是一种系统间触发方式。官方可能要求我们完成这样的任务。
客户端需要告诉服务端已准备好开始游戏,使用NetCode提供的Rpc功能实现。
在Game.cs文件中,添加如下的 RpcCommand来告知服务端已准备好开始游戏:
注:别忘了在InvokeExecute前添加BurstCompile属性。
为了使用NetCode发送此RpcCommand,需在Game.cs中增加一个继承自RpcCommandRequestSystem的系统。
注:类里无需添加额外内容,若想传输其他RpcCommand无需重写override,直接继承RpcCommandRequestSystem并替换<>内的类型即可。
接下来,创建一个实现ICommandData接口的结构体,负责序列化和反序列化输入信息。创建CubeInput.cs脚本文件,源码编程辑器并输入以下代码:
原文代码(现有版本0.1.0-preview6下已无法使用,下面提供基于0.1.0-preview6 API修改的代码):
0.1.0-preview6版本下的代码:
注:简要解释序列化与反序列化过程。序列化是从内存数据提取为网络传输或本地存储的string或Byte[],反序列化是读取数据并存储到内存、触发对应方法的过程。在实时游戏环境中,Unity NetCode提供DataStreamWriter与DataStreamReader让我们自己组装序列化与反序列化工作,而非完全接管。
命令流包含当前tick与水平、垂直的速度,类似之前的Rpc,可使用创建并继承系统的方式来同步ICommandData接口数据。
接下来,编写一个获取输入信息、将信息发送出去的系统:
注:部分读者可能找不到EnableNetCubeGhostReceiveSystemComponent问题。使用GhostCollectionAuthoringComponent生成代码,类名默认为项目名称,若未更改NamePrefix,则类名应为{ 项目名称 } + GhostReceiveSystemComponent。修改NamePrefix后,类名应为{ NamePrefix} + GhostReceiveSystemComponent。
译者碎碎念:官方似乎喜欢使用单例component来传递信息?
最终,创建一个读取CommandData的系统,并移动玩家方块:
六、最后一步
最后一步是创建一个连接成功时使客户端进入游戏状态、通知服务端也进入游戏状态的系统,需要在连接时向服务器发送Rpc表示客户端已准备开始游戏:
在服务端上,确保在收到GoInGameRequest时为该玩家创建并生成一个Cube。
注:部分读者可能找不到NetCubeGhostSerializerCollection问题。使用GhostCollectionAuthoringComponent生成代码,类名默认为项目名称,若未更改NamePrefix,则类名应为{ 项目名称 } + GhostSerializerCollection。修改NamePrefix后,类名应为{ NamePrefix} + GhostSerializerCollection。
七、测试
现在,已完成代码编写,打开Multiplayer> PlayMode Tools并设置PlayMode Type为Client&Server。进入播放模式。生成Cube,并按下A、S、D和W键移动Cube。
回顾所做的工作:
MaxtoCode 是什么?
MAXTOCODE 是世界领先利用WINDOWS底层技术保护.NET源代码的高技术产品。
它可以完美的与您的.NET程序结合在一起,拼尽全力的保护您的源代码和知识产权。
MAXTOCODE 已经完全超越了传统的混淆手段来保护源代码的方式,他将完全加密您的代码,使您的代码完全没有办法反编译。保护强度已经不是混淆器可以与之抗衡,是目前保护强度最大,最完美的.NET产品保护方案。
MAXTOCODE 是 Aiasted.SOFT 完全自主开发的一款 .NET 代码保护工具。它是目前世界上高强度保护工具之一。
使用过.NET的程序员都知道,.NET是一个巨大的跨时代进步,它开发效率高、功能强、界面美观、耐用、新的语言C#已经提交为行业规范、CLR共公运行库资源丰富,这所有的特点标志着它成为主流编程语言是必然的。
可是他也有一个缺点,那就是编译好的程序集可以完全被反编译成源代码,这给一些不法份子提供了很好的机会,试想想,您辛苦的劳动成果就这样轻易的给别人利用,是多么不公平的事阿?所以如何保护我们的知识产权成了一个大问题。
第一种代码保护方案是混淆,这是一个不错的方案,可惜强度还是无法保证,如果要做一个大的逆向工程有一定困难,但针对某个算法或功能进行解读还是很容易的。反观混淆原理则发现,混淆其实只是一个与障眼法差不多的技术。第二种就是MAXTOCODE的保护技术了,MAXOTCODE 采用了难以理解的机器语言来加密您的.NET程序集,(特别注意:MAXTOCODE的强度建立在加密算法之上,而不上简单的混淆。)在程序集运行时运态解放源代码,所以在原理上已经比混淆强度提高了许多。我们保护您所有的代码,不让不法份子看到您任何一个有效的代码,使不法份子完全无法被反编译。
NetCode小技巧
减少RPC延迟策略如下:
步骤一:立即为本地玩家提供服务。
步骤二:服务器调用其他客户端的Fire方法,执行ServerRpc。
步骤三:客户端执行ClientRpc,如果判定为所有者,则跳过本地的第二次执行,确保其他客户端执行Fire。
通过本地预处理及精准RPC调用,实现快速响应,降低延迟。
优化步骤:将ServerRpc和ClientRpc集成至统一系统,确保所有操作一致,减少额外计算。
通过优化网络通信和任务调度,实现RPC延迟的显著降低,提升游戏体验。
总结:采用本地预处理、精准RPC调用和统一系统集成策略,有效减少RPC延迟,提升游戏性能。
银行netcode是什么
银行NetCode是银行网络代码的缩写,它是用于标识特定银行的代码。这个代码在银行系统中具有重要的作用,特别是在处理跨银行交易时。当进行电子支付、转账等操作时,银行NetCode用于识别收款银行的信息,确保资金能够准确、快速地到达指定的账户。这种代码通常是一串数字或者字母和数字的组合,是银行与支付系统之间的关键桥梁。它的主要作用包括以下几个方面: 一、标识银行身份 银行NetCode能够明确标识出某一金融机构的身份,使得其他银行或支付系统能够识别并与该银行进行交互操作。在进行跨行转账或支付时,这一功能尤为重要。 二、确保交易安全 NetCode是确保金融交易安全性的关键环节。在传输交易信息时,通过此代码可以验证银行的身份,防止交易信息被篡改或误操作,从而保护用户的资金安全。 三、促进金融系统的互联互通 在现代金融体系中,各银行之间需要通过特定的代码进行沟通与交互。NetCode就是这样一个标准化的通信语言,促进了不同银行间系统的互联互通,从而方便了金融交易的进行。 四、简化交易流程 由于银行NetCode的存在,银行系统能够自动处理大量的交易信息。这一功能大大简化了交易流程,提高了交易的效率,使得电子支付和转账变得更为便捷快速。 总之,银行NetCode在银行系统中发挥着重要的作用。它是连接银行与支付系统的纽带,保证了金融交易的准确性、安全性和效率性。在进行电子支付或跨行转账时,这一代码的作用不可忽视。如何将asp. net代码反编译为c#源码?
1、首先打开浏览器,百度搜索“反编译工具ILSpy”,选择一个安全的网站进行下载。2、下载完成后,右键单击解压压缩,双击.exe文件打开解压工具。
3、然后在出现的界面中,点击打开file选项中的“打开”选项。
4、然后在出现的界面中,选择要反编译的文件,回车确定。
5、然后就可以看到源码了。
6、如果想把源码保存下来,自己在源码的基础上修改,点击"file"下的“Save code...”,保存即可,
7、保存完的文件如图。
8、如需用vs打开反编译后的源码,只需要打开这个.csproj文件即可。