首页
学习
活动
专区
圈层
工具
发布

为什么决定要重新造一个轮子?

性能好,跟C/C++/C#一样编译型语言2. 语法比较简单,开发效率也比较高,接近Python3. 语言级别支持协程4. 单进程支持多核并发计算 缺点: 1....开源库较少,会golang的开发者比较少 开源框架: leaf 接触的第一个golang框架,设计不错,但不支持多进程没有客户端库,需要自己实现cellnet 刚接触,没法评价,但好像它用了...,其实这几个框架都非常优秀,只是不同的需求有不同的要求罢了,希望大家能根据自己实际需求选择最适合自己的框架 对游戏服务器框架的想法 自己心里也对游戏服务器框架有一些自己的想法,最终决定造这个轮子。...,质量很高.我看重的,是其对3D游戏服务端编程的通用流程和问题的处理手法和经验.研究消息包结构,一般就能推断WoW采取哪种逻辑方案来解决一些棘手的通用问题,而服务端编程质量在很大程度上取决于程序员的经验...和Unity3D配套使用的服务端引擎 a. 使用c#语言,便于业务层构建客户端服务端公共库,减少异构语言造成的研发损耗; b.

3.3K70

Coroutine,你究竟干了什么?

从字面意思上来理解,Coroutine应该就是“协程”的意思,而这所谓的“协程”又是什么东西?第一个想到的便是Lua中“协程”,Unity中的Coroutine难道也是这个概念吗?...另外的,这Unity“协程”跟线程又是一个什么关系,就其可以进行延时而不影响其他逻辑运行这个特性来看,“协程”是否就是C#线程的一个封装呢?...Coroutine大概是这个样子的……   随着自己对C#有了进一步的了解,我才慢慢发现,上面所言的那两个奇怪的IEnumerator和yield return,其实并不是Unity的什么独创,相反,他们却是...而至于yield return,其实是C# 2.0新引进的一种实现迭代器模式的简便语法,在之前的C# 1.0中,如果要实现一个完整的迭代器,我们必须要分别实现IEnumerable和IEnumerator...究其原因,可能是其简洁高效的特性深深折服了我,想想以前那些个分散于代码各处的计时变量和事件逻辑,现在统统都可以做成一个个Coroutine,不仅易于理解而且十分高效,我相信不管是谁,在实际使用了Unity

1.3K10
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    Unity零基础到入门 ☀️| 学会这些Unity常用组件,Unity中必备组件技能学习!

    Unity工程结构 ????几种常用组件介绍 ????Transform组件 ????Mesh Filter(网格过滤器)和Mesh Renderer(网格渲染器) ????...❤️ Unity ❉ 基础知识 ☀️| 学会这些Unity实用知识点,我也可以做小游戏啦!(^_−)☆ ????????????...Unity工程结构 在介绍Unity的各种组件之前,先来简单介绍下Unity的工程结构 一般来说,一个Unity工程正常都会有这四个文件夹 Assets :是用来存储⼯程所需的所有资源⽂件 (必备...) Library :是⼯程所需要的所有资源库(类库)是Unity⾃动给我们⽣成的,如果一个Unity工程开发时间长了,这个文件夹可能会很大,一般来说直接删除了,工程也可以正常开发使用 ProjectSetting...:是我们当前Unity工程的一些⼯程设置⽂件,就是下图上面这些设置相关就存储在这个文件夹,删除的话就要重新配置了 Temp :是临时⽂件,一般来说也没啥用,可看情况选择去留 ????

    3.8K31

    Unity性能调优手册9Unity的Script:空生命周期函数,tags,组件,string,显式销毁的类(Texture2D、Sprite、Material),burst

    Unity用c#实现脚本,但Unity本身是用c++实现的。由于c#内存空间和c++内存空间不能共享,所以分配内存是为了将字符串信息从c++端传递到c#端。...字符串属于引用类型,这个字符串的返回,会造成堆内存的分配。然而,Unity引擎也没有通过缓存的方式对get_tag进行优化,在每次调用get_tag时,都会重新分配堆内存。...它经过了优化,比上一节中的GetComponent()更快。但是,它比缓存的情况要慢,因此也应该缓存和访问它,如下面的示例代码所示。...Unity,没有日志记录输出,但由于它只是函数内部的一个分支,函数调用成本和字符串生成和连接应该是不必要的。也可以选择使用#if指令,但是处理所有日志输出处理是不现实的。...Burst将c#代码转换为IR(Intermediate Representation中间表示),这是7的中间语法,一个称为LLVM的编译器基础结构,然后在将其转换为机器语言之前对IR进行优化。

    1.5K11

    Unity零基础到入门 ☀️| 游戏引擎 Unity 从0到1的 系统学习 路线【全面总结-建议收藏】!

    前言 最近一直有小伙伴私信,都是问我有没有一个整体的Unity学习路线 因为对Unity很感兴趣,但是又无从下手,所以就想寻求帮助啦~ 其实我也一直想写一篇这样的文章,让想学习Unity却无从下手的小伙伴可以有一个好的开始...至关重要 本来是想到脚本组件之后再提C#的,但是一想到C#是Unity开发必备语言,也是做Unity必须要会的一门语言 所以学习C# 应该才是学习Unity的第一步!...---- Unity中的 UI 系统学习 UI这块不用多说,也是一个必备技能,而且要精通才行 一般刚入门接触最多的就是UI系统了 UI系统有好几种,包括UGUI、GUI、NGUI等等 这里的话也不用管别的...还有 Unity中协程的学习,也是必不可少的会用到。...感兴趣的可以看看哪种适合自己哦~ 我这里也有一些学习资源,也是我学习的时候下载整理的,包含C#的思维导图、视频学习和Unity的思维导图学习资料 如果大家想学习的话可以9.9下载学习,学习资料下载

    2K41

    unity c#面试_spring面试题及答案

    List和[]多, ArrayList这是老C#人才会用的变量,也可能是从JAVA借鉴过来,JAVA有Hashset做数组变量, 哥一开始学C#1.0对ArrayList的框架很不能理解,ArrayList...|IOS等平台也是运行正常,反射的作用主要是跨程序集调用,作为一个基本抽象思维的程序员,应该要理解跨当前运行时的程序集本身当然也一个程序集,C#反射能广泛应用,并且出错几乎是0的原因,应该就是C#程序集的开放...我的推论是,mono是一种中间语言,而内核还是.net的一个简化版的虚拟机,能跨平台运行,这个虚拟机类似于jvm虚拟机,提供各种框架,API和程序执行和调用功能,但明显支持的最强语言还是C# 12.简述...Unity3D支持的作为脚本的语言的名称 C# JS Boo – 这个我也不清楚 13.Unity3D是否支持写成多线程程序?...Unity仅提供携程,让你可以安心订机票 14.Unity3D的协程和C#线程之间的区别是什么? 线程不安全 同一个时刻只有一个coroutinue运行,但线程可以并行执行,所谓多线程。

    1.7K20

    破解 Kotlin 协程 番外篇(1) - 协程为什么被称为『轻量级线程』?

    更有意思的是,在查阅资料的过程中,你会经常会陷入一种一会儿『啊,我懂了』,一会儿『啊,我懂个屁』的循环当中,不瞒各位说,我从七八年前刚开始学 Lua 的时候面对 Lua 的协程也是这个破感觉,后来接触...每一个协程都会有自己的调用栈,有点儿类似于线程的调用栈,这种情况下的协程实现其实很大程度上接近线程,主要不同体现在调度上。...JavaScript、C# 还有 Python 的协程,或者干脆就说 async/await,相比之下就轻量多了,它们看起来更像是针对回调加了个语法糖的支持——它们其实就是无栈协程的实现了。...这个说法其实是很奇怪的。我如果问你线程其实是一个 CPU 框架吗,你肯定会觉得这俩,啥啊??? ?...Kotlin 协程的设计者没有这样做,他们当然也有他们的道理,毕竟他们不愿意强迫开发者一定要用协程,甚至立刻马上就得对原有的代码进行改造,他们希望 Kotlin 只是一门编程语言,一门提供足够安全保障和灵活语法的编程语言

    2.3K20

    ILRuntime学习

    大家好,又见面了,我是你们的朋友全栈君。...ILRuntime介绍 ILRuntime项目为基于C#的平台(例如Unity)提供了一个纯C#实现,快速、方便且可靠的IL运行时,使得能够在不支持JIT的硬件环境(如iOS)能够实现代码的热更新...//编写重定向方法对于刚接触ILRuntime的朋友可能比较困难,比较简单的方式是通过CLR绑定生成绑定代码,然后在这个基础上改,比如下面这个代码是从UnityEngine_Debug_Binding...可以选择性的对经常使用的CLR接口进行直接调用,从而尽可能的消除反射调用开销以及额外的GC Alloc CLR绑定会生成较多C#代码,最终会增大包体和Native Code的内存耗用,所以只添加常用类型和频繁调用的接口即可...Vector3等Unity常用值类型如果不做任何处理,在ILRuntime中使用会产生较多额外的CPU开销和GC Alloc 我们通过值类型绑定可以解决这个问题,只有Unity主工程的值类型才需要此处理

    1.5K30

    C#有什么惊艳到你的地方?

    论性能和细节控制力,C语言的设计上限更高;但是论简易程度,Python更为统一、易用。这一基本矛盾在之前的语言里都没有解决好。 而C#很好的总结了前人的经验,在基础语法上就区分了值类型和引用类型。...对初次接触编程的同学来说这一点容易造成学习障碍,但是只要掌握了它,就会给实际工作带来极大便利。 反观历史,C#也曾经因为 值类型/引用类型 保守诟病,“拆箱”和“装箱”一直是个招黑的设计。...但后来我们看到,随着泛型的成熟和普及,随着泛型容器代替通用容器,装箱和拆箱的问题已经在很大程度上解决了。 还有对异步的支持等等,C#的设计最初带来了一些问题,但是最终还是交上了一份满意的答卷。...但是C#也提供了便利的语法,在栈上分配数组,对项目后期优化来说简直是神技: public void unsafe foo() { int* bar = stackalloc int [10];...同时也能猜出“Interface”的概念。思考C#的底层设计,给人的感觉就是自然、规范、恰到好处。 总之,C#语言及其标准库的设计,非常值得借鉴和推崇。

    38340

    一年前一篇关于学做unity游戏的草稿,好像是忘推送了

    Unity对新手还是很友好的,除了有完善的学习社区外,还有附带教程的项目模板,能新建一个学习类项目,里面会以类似游戏新手教程的交互来一步步给你介绍相关的功能和特性: (图源:Unity 乐高学习项目)...关于第二点C#语言的学习 学新的计算机语言的话我是有现成优势的,毕竟基于已有的js、ts以及php的开发经验,很多语法、模式都是类似的,我很快就能上手,但想要更高效地编写代码的话,基础的事情得做,还是得研读一两遍...除了对“顶层对象”、“框架设计模式”的理解,对常用组件(含动画)的基础理解也很重要,在Unity中,我觉得几类基础的Component还是需要先简单看看基础文档学习一下的,比如用于控制视角的摄像机(camera...当实现到这个程度的时候,我认为预研已经有了正面的结论,能继续往下做。...但这份表的作用还是很大的,我能清楚知道接着要干嘛。 四.执行 执行是一个枯燥的过程,考验的是耐心和体力,可能需要反复用到类似的方法,也可能反复试错某些逻辑。

    47510

    【学习笔记】Unity3D官方游戏教程:Survival Shooter tutorial

    所以对于我这种刚入门的游戏开发者,还是非常有必要把自己的学习过程记录下来,加深自己对 Unity3D 游戏开发的理解和认识,提高实战能力。 对了,对于新手入门,官方的视频教程还是非常值得一看的!...设置很简单:在检测到玩家碰撞到治疗物体后,玩家生命值恢复,治疗物体消失,同时播放治疗效果的音频。功能虽小,但是加强了游戏的可玩性,不过我发现,运行我写的代码后虽然有治疗效果,但是并没有触发音频效果。...后来我知道原因了,大概是这样的:我们不是能利用设置 Time.timeScale = 0 来暂停游戏吗?道理是一样的,乘以 Time.deltaTime 能够达到全局控制速度的作用。...射线也困扰了我很久,在学习了这个游戏教程之后,我总算明白了它的基本原理:射线就是一条从一个点到另一个点的不可见直线,它能检测到碰撞层中所碰撞到的物体,并算出相应的碰撞点。...Override Controller 是对 Animator Controller 的复用 Awake 和 Start 函数的区别: Awake 立刻运行,即使物体被禁用,但是 Start 必须在

    3.4K50

    项目优化之性能优化(Unity3D)

    本文介绍了一些非常简单的性能改进,为了让玩家满意,每个Unity 开发者都应该知道这些改进。没有人期望你制作一个看起来像AAA+标题的游戏,但是它应该每秒有大量的帧。...幸运的是,联合已经为我们提供了大量的功能。不过,如果找不到合适的方法,数学就会出现。 四、网格 让我们来谈谈一些可以不用付出很大努力就可以学习和应用的东西:优化网格。...五、缓存GetComponent 通常使用GetComponent函数来访问GameObject的组件。就计算而言,这个函数是昂贵的。...它提供了相同的功能,但是计算较少,因为GetComponent函数在开始时只调用一次,而不再每秒调用60次。...这些话题可能是压倒性的,但是在你的旅途中,尽可能多地了解它们是很重要的。 顺便提一句:我们的其他文章通常不是为了保持它们尽可能容易理解而对性能进行优化。这取决于您应用本文中所学到的内容。

    79040

    Explosion 开发笔记 (一)

    为什么要做 Explosion 其实早在上大学那会,我就对计算机图形学和游戏开发有着浓厚的兴趣,大一的时候使用过 Unity 和 Unreal 开发过游戏,在计算机图形学课程设计中,也使用过 OpenGL...再后来我接触到了 Vulkan、DX12、Metal 等更现代的 GraphicsAPI,同时也逐渐了解了硬件的工作原理,也逐渐理解了游戏底层神秘的引擎到底是怎么运作的,兴趣越来越浓。...Unreal 和 Unity 的源码我都读过一部分,Unreal 和 Unity 只能说这种体量的东西是工程界的奇迹,只要架构没有腐坏到无可救药的程度,哪怕局部屎再多也能糊住,多数情况下,它们的代码看起来就是微观来看简直屎的不行...我对 Explosion 的期待其实很简单,就是遵循前辈们开辟的道路一步步前进,取其精华去其糟粕,慢慢打造属于自己的引擎,不求以后能怎么样,但求能把功能做完整、做精致。...RPI 层封装渲染管线接口,在我的理解中,就是 Renderer 的核心逻辑的抽象。

    64120

    Unity3D学习笔记10——纹理数组

    实现 创建一个GameObject对象,并且加入Mesh Filter组件和Mesh Renderer组件。...Mesh Filter我们可以设置Mesh为Quad,同时在Mesh Filter上挂一个我们新建的材质: 在这个GameObject对象上挂接一个我们创建的C#脚本: using Unity.Collections...权重值也是在C#脚本中传入到Shader中的。...在编辑器中将权重调整到中间一点的位置(例如0.5): Shader代码也很好理解,关键在于纹理数组相关的宏,其实是对hlsl或者glsl的封装: #define UNITY_DECLARE_TEX2DARRAY...纹理数组这个特性在低端显卡上可能不支持,但是不一定就会非常耗费性能。可以考虑通过纹理数组的方式来合并渲染的批次。 纹理数组个数的限制并不是纹理单元个数。

    1.9K10

    Unity应用架构设计(10)——绕不开的协程和多线程(Part 1)

    协程的内部原理 回到本文的主题,对于Unity应用程序而言,还提供了另外一种『异步方式』:Coroutine。...我个人倾向将其翻译成中断和产出比较好,这也是yield单词包含的意思,我下面也会阐述为什么要翻译成这两个意思。 深究yield之前,我觉得应该略微了解一下为什么我们能foreach遍历一个数组?...要解惑yield这是第二个阶段:能知道枚举器是怎样工作的。 如果你很清楚上诉两个阶段的内部原理之后,要理解Unity中的Coroutine是非常简单的,你会了解为什么它是伪的“多线程”。...再回过头来,我将yield翻译成了中断和产出,谈谈我的理解。...本章内容对多线程开了个头,我将在下篇文章中说说怎样在Unity中使用和管理多线程。 源代码托管在Github上,点击此了解

    1.7K60

    Unity基础系列(一)——创建一个时钟(GameObjects与Scripts)

    这篇教程的意义并不在于怎么学会写出一个时钟,而是教你认识Unity的编辑器。当然如果你之前已经接触过或者用过Unity了并且能自己找到场景窗口,那么就算是有个很好的开始了。...创建完成之后,如果你没有对编辑器进行过自定义设置的话,你会看到如下一个默认的窗口布局。 ? (默认的窗口布局) 不过我更喜欢Unity自带的一种预设布局, 2 by 3。...(拖拽之后的clock 结构) 小提问:如果我看到一些像90.00001这样的值,有问题吗? 这个是因为所有的position, rotation, 和scale都是用浮点型的数据表示的。...这样的话其他的代码就无法创建和使用这个类,Unity也不能像其他组件一样通过面板操作来给某个对象添加该组件。 到这里之后,我们还没符合一个有效的C#语法。...OK,到这里之后代码的编译器已经能明白能要什么了,不会报错了,但是,记得刚才的访问权限吗?如果不加的话,表示这个数据或者属性只能类内部使用,如果想要外部使用的话,也一样需要加上权限修饰符。如下: ?

    3K10

    2023年底了,聊聊.NET现状

    我们程序员是不出差的,老板规定不允许程序员出差,原因没有告知。经过长时间招聘,今天终于有人了,刚毕业的大学生,老板不想在折腾了,当场定了。(3)好几个放假那你看进厂就不会失业,不进就会失业。...招聘难度也很大,但是因为生产力强大,一个人可以产生竞品好几个人的产出,这种我就选择 c#。这类更难招,总体感觉是 cpp 转行的比较适合。...另外需要注意的一点是,并不是说cpp做不到C#那个高度,而是工业软件时常突出一个时间紧任务重工资低,你很难保证你能招到一个合格CPP开发,甚至有时候都是一些应届生但是C#?...(1)市场份额问题 .NET这个技术栈,自微软官方发布以来,时间跨度上有20余年了。从底层到生态,都相当成熟了。有人说他市场小,那是相比Java在互联网和金融行业的份额。...可是,时间一长,我发现他除了会玩Winform,会搞一些委托和事件,其他的好像都没接触过,十几年了,一直停留在自己的舒适区内,不愿意革新自我。实际掌握的技术栈跟市场严重脱节。

    4.9K161

    使用Unity3D和TensorFlow教AI投篮

    注意:你需要为Tensorflow 下载ML-Agents Unity资源包的导入,才能在C#中使用。...如果你在Unity中找不到有关Tensorflow的任何错误,请确保你已遵循TensorflowSharp的Unity安装文档。 我们的目标是什么? 为了简单起见,我们对这个项目的期望结果非常简单。...如果你对如何在Unity中制作更复杂的AI感兴趣,你应该查看Unity中更完整的ML-Agents项目。我将在这里讨论的方法设计的简单易懂,并不一定是最佳示例。...它内置了物理的,基础的3D建模和一个很不错的脚本运行环境(Mono),使我们可以用C#编写游戏。 我没什么艺术细胞,只能拖着一些块把这个场景拼凑了起来。 ? 那块红色块代表我们的玩家。...hasBeenScored) { GetComponentRenderer>().material= MaterialBallScored; Debug.Log

    2.8K30
    领券