unity
文章平均质量分 79
魂玉天成
从事游戏行业十几年,自己都不记得做了多少款、多少种类型游戏了,拯救过多少产品,使用过引擎:cocos、unity、虚幻4,前后端顶层架构实现,常用编程语言C++、java、C#等,对图形有深刻理解。建CSDN博客的目的是发现自己最近记忆力差了许多,以便作为记录。并帮助那些在开发路上迷茫和需要帮助的人,也欢迎技术爱好者共同探讨。
展开
-
unity小程序websocket:nginx配置https (wss)转http (ws)及其他问题解决
为了服务器网络的通用性,我们在实现移动端的游戏转微信小程序使用websocket。对于微信小程序官方给出的技术标准是必须使用https+域名的访问方式(使用websocket也必须是wss即:支持https的websocket),但是https的key稀缺性和我们的服务器是分布式部署的,不可能在每一个于客户端链接服务器都配置key,所以服务器仅支持http的websocket即ws基于此,我们需要通过nginx代理来处理转发的问题。这样https的证书只需要在nginx中配置,同时在nginx中配置wss。原创 2024-01-09 17:49:56 · 2393 阅读 · 0 评论 -
unity:玩家从SDK注册到登陆就流失百分10几的思考
游戏最近在小范围买量测试,测试的平台某快某手平台,发现玩家在从SDK注册就到登录就流失百分10几,当我们通过打点数据发现这情况的时候,对于问题的分析百思不得其解,由于先前游戏已经在其他平台测试过,玩家从SDK注册到登陆只会流逝百分之0.5左右,百分之10几的流失让我们很是心痛,因为这一步玩家的流失,代表这游戏推广买量的成本的增加和留成的减少。本人是技术,首先找的问题是技术问题,发现部分问题的端倪。原创 2024-01-09 00:45:45 · 1090 阅读 · 0 评论 -
解决:Unity : Error while downloading Asset Bundle: Couldn‘t move cache data 问题
通过日志我们发现,在unityActivity一启动的时候,我们就启动下载更新文件(也就是在awake函数中调用UnityWebRequest函数将StreamingAssets的初始包的assetbundle拷贝到可写的沙盒目录下),小概率爆出如上问题。最近游戏要上线,发现一个现象,部分机型在启动的时候闪退或者黑屏,概率是5%左右,通过Bugly只有个别机型才有这个现象,其实真实情况比这严重的多,bugly有时候并不能捕捉到这种情况,我们各种怀疑和查找,最终发现问题的根源。从头再来,最终我们在官网发现。原创 2024-01-08 21:37:03 · 1726 阅读 · 0 评论 -
以unity技术开发视角对android权限的讲解
在unity开发过程中,接SDK的时候有一个问题是绕不开,那就是合规问题,早期的时候对于权限设置和获取并没有那么多限制,或者说规范吧。现如今随着合规越来越严格,对于unity游戏开发人员对于android的权限有一些大致了解还是有其必要性,尤其是需要接SDK的小朋友而言,更是如此。这里就简约讲解下android有哪些权限分类,同时如何在运行时申请权限。由于android开发并不是我的主要技术防线,所以这里只做一个简单的知识普及而已。Android权限分类普通权限(安装时权限危险权限(运行时权限特殊权限。原创 2024-01-08 20:44:07 · 1583 阅读 · 0 评论 -
unity中Android各版本对应的SDK版本
在unity开发中经常出现兼容性的问题,老是忘记Android各版本对应的SDK版本,这里记录一下,以供自己查阅,如果unity打包生成android api过低,那么可能在最新的机型上无法运行,闪退或者各种异常。原创 2023-12-21 21:30:17 · 2036 阅读 · 0 评论 -
unity中如何查看网络是否可用状态
总之,获取 iPhone 设备的网络信号强度需要在 Objective-C(或 Swift)中编写相关代码,并与 Unity iOS 项目集成。通过使用 Core Telephony 框架提供的功能,您可以以编程方式获取到 iPhone 设备的网络信号强度,并将其在 Unity 中使用。在 Unity 中,获取 iPhone 设备的网络信号强度可以通过使用 iOS 的原生功能来实现,而不是完全依赖 Unity 引擎。通过这种方式,您可以在 Unity 中检查当前设备的网络连接状态,并根据需要执行相关操作。原创 2023-06-28 15:21:42 · 2371 阅读 · 0 评论 -
unity 开发中10个小知识(三)
build-in项目时相机的渲染顺序是通过摄像机的depth深度来相机的渲染顺序的,但是在urp项目中却不是,而是通过camera stack来管理在Unity中,使用URP (Universal Render Pipeline)时,相机属性的设置都是通过相机栈(camera stack)来管理的。将一个相机放入另一个相机的相机栈中,需要在Inspector窗口中对相机属性进行配置。具体步骤如下:拖拽需要放入相机栈中的相机至想加入的相机的“Additional Camera”属性中。原创 2023-06-25 18:12:14 · 990 阅读 · 0 评论 -
unity前端架构之事件系统完整代码实现
事件资源类是真正处理事件的内部类,它有三个重要的接口TriggerEvent 触发相应事件订阅Subscribe相应事件取消订阅Unsubscribe相应事件if (!return;ULog.Warn("重复注册事件 {0} {1}", type, handler);return;= null)订阅事件接口取消订阅接口立即触发接口发送事件。原创 2023-06-18 20:51:33 · 985 阅读 · 0 评论 -
unity前端架构之定时器完整代码实现
定时器是unity前端架构中必须有的一个模块功能。定时器一定要满足几个需求第一、需要能够添加和删除定时器第二、实现延时触发一次第三、实现循环调用第四、实现隔一定帧数调用一次帧定时器在希望某个操作在下一帧或一定帧数后执行,定时器接口中包含两个参数,定时器ID和object类型参数隔多少帧调用完整的帧定时器代码如下:try= null)如果是延时调用的一次定时器_intervalSeconds是延时时间。原创 2023-06-18 19:52:55 · 1423 阅读 · 0 评论 -
unity: C#的Action Event Delegate的异同
它们都与函数指针相关,并提供了可调用指向方法的代码块的方式。它们都是用于编写事件驱动和回调代码的通用概念。它们都可以用于实现委托模式,使触发对象与事件处理程序之间的解耦。Action和Event都是C#中的关键词,而Delegate则是一个类。Action和Func之间的区别在于Action没有返回值,而Func具有返回值。Delegate用于指向方法,而Event用于将事件与订阅器连接起来。原创 2023-06-18 18:20:59 · 3309 阅读 · 1 评论 -
C# string 防止GC及内存分配
在 C# 中,字符串类型是一个引用类型,它的内存分配方式与其他引用类型类似,都是在堆上分配内存。1、字符串的如何内存分配;2、如何防止string产生GC;3、string使用注意情况原创 2023-06-16 13:40:26 · 2903 阅读 · 1 评论 -
unity 开发中10个小知识(二)
脚本执行序列指的是所有的 MonoBehaviour 对象实例的执行顺序,在 Unity 中,MonoBehaviour 对象的执行顺序对于处理和调整游戏对象及其组件之间的依赖关系非常重要。注销创建的对象是一种有效的方式,可以使用此功能来记录创建的新对象,并使Unity撤销和重做操作结果符合预期。在 Unity 编辑器中,MonoBehaviour 对象的执行顺序通常由所属 GameObject 中组件的执行顺序控制,或者通过脚本的“Execution Order”(脚本的执行顺序)属性控制。原创 2023-06-13 15:18:41 · 2001 阅读 · 0 评论 -
unity 开发中10个小知识(一)
现在记忆力越来越差,写过很多遍的内容,都有可能需要慢慢才能想起来,这里就记录下在unity开发过程中一些小的知识点。约束为T必须继承BaseComponent,并且带默认构造函数。如果a为空返回空,否则返回a.name。当a不为空时返回a,否则返回b。原创 2023-06-06 20:36:46 · 572 阅读 · 0 评论 -
C# list的sort排序
有时需要对List列表中内容进行排序,List 的Sort方法排序有三种结果 1,0,-1分别表示大于,等于,小于。List的sort的方法如何使用,如何实现降序和升序return 1;return 0;return -1;输出结果:为 10,12,14,原创 2023-06-06 16:01:14 · 8501 阅读 · 0 评论 -
C#实现可以遍历时删除的字典dictionary
在开发过程中我们会遇到,使用字典dictionary时,可以在遍历(for或者foreach)时想删除的某一个符合条件的节点,普通的dictionary的无法能够提供支持。一般情况下,我们往往需要定义一个字典dictionary 和一个List,来配合使用,比如:假定我一个玩家管理器需要管理很多玩家,在玩家的管理器的每帧调用的函数中需要遍历所有玩家,发现标记的IsDestroy的就删除该玩家。原创 2023-05-27 17:37:27 · 2011 阅读 · 0 评论 -
unity 序列化那些事,支持Dictionary序列化
unity中的inspector面板支持list,但是有时候我们需要Dictionary,尤其是我们需要通过asset资源与ScriptableObject脚本一起实现序列化时更是需要如此。如:技能需要通过id来确定访问单个技能数据,那必须满足key和Value的数据结构。由于unity并不是原生的支持对字典的序列化,这件简述了unity关于序列化与及自定义类的序列化的方法,同时实现在inspector面板中字典序列化问题,以及asset资产中实现序列化 Dictionary的方法原创 2023-04-16 13:28:42 · 5486 阅读 · 0 评论 -
“未为 Visual Studio Tools for Unity 生成此 Unity 项目”问题的解决
今日打开unity,运行脚本时,vs2019提示“未为 Visual Studio Tools for Unity 生成此 Unity 项目”。项目昨天还时好好的,隔一夜竟然出现这问题,发现昨天关机的时候,应该是直接关机,并没有先关闭unity进程和VS引起的。这里需要重新生成unity 脚本工程即可这里就记录下问题的解决办法,以便后出现问题的时候好查阅。原创 2023-04-12 11:36:33 · 2502 阅读 · 1 评论 -
unity中获得inspector面板rotation的值
在unity编辑器有时候要根据inpsector的值来做设定,比如限定摄像机的的旋转角度,设置rotation.x在一定的范围内。但是实际情况中inpsector的面板值是经过转换的值,需要通过eulerAngle欧拉值计算才能获得。原创 2023-04-11 18:26:19 · 1658 阅读 · 2 评论 -
第二章:unity性能优化之drawcall优化-1
GPU Instancing是一种drawcall优化方法,它在一次绘图调用中使用相同材质render mesh 的多个副本。多个mesh的副本都称为Instance。这对于绘制场景中多次出现的对象非常有用,例如树或灌木丛。GPU实例化在同一drawcall中渲染相同的mesh。每个实例可以具有不同的属性,例如“Color或“Scale要对材质使用GPU实例,请在material 中Inspector中属性中选择"”选项。是否是所有的都支持GPU Instancing?答案肯定不是。原创 2023-02-16 18:54:23 · 3147 阅读 · 0 评论 -
第一章:unity性能优化之内存优化
在unity项目实际开发中,总是逃不开对于项目进行优化,内存、GC,渲染效率(GPU、drawcall)、发烫耗电等问题往往是对技术的最基本的技术考验,同时又有实际程序员的个体差异,结果往往各不相同。作为技术通常从技术角度考虑问题,将一个好好的游戏优化成一个白模游戏,会说:“你看,我在技术上是达标,是你的资源太复杂了”;作为有责任心的制作人或者美术负责人就会说:“我做的东西效果好的很,到游戏里怎么成这个样子了。”技术会要求美术资源问题,要么重做,要么大面积修改。原创 2023-02-13 21:01:44 · 7310 阅读 · 0 评论 -
unity shaderlab常用函数及定义
在不同的平台上,屏幕空间位置输入的基础类型会有所不同,因此为了获得最大的可移植性,请对其使用 UNITY_VPOS_TYPE 类型(在大多数平台上将是 float4,在 Direct3D 9 上将是 float2)。#define UNITY_INV_FOUR_PI 0.07957747155f //4倍圆周率的倒数。#define UNITY_INV_TWO_PI 0.15915494309f //2倍圆周率的倒数。#define UNITY_TWO_PI 6.28318530718f //2倍圆周率。转载 2023-02-07 20:13:08 · 1489 阅读 · 0 评论 -
urp 实现阴影ShadowCast 简单实例
从build-in内置渲染管线到urp渲染管线其中有个比较大的变化就是shadowCast写法变化,这里给出一个简单的shader实现阴影的效果。具体内容就不做细说,各位看管直接看代码。原创 2022-07-31 23:10:44 · 1614 阅读 · 0 评论 -
unity build-in 渲染管线升级urp渲染 shader篇
由于工作原因需要对项目进行升级,从build-in渲染管线升级到urp渲染管线,我自己对应的版本是2018.4 版本升级到2021.3.2版本,由于最近几年unity版本升级比较快,个体版本差异有所不同,如遇与版本不一致问题敬请谅解。以下是根据官网等系列网站整理的内容1、property 属性变量需要在CBUFFER_START/CBUFFER_END中声明2、数据类型: UPR已经不支持fixed类型,应该改成half类型3、内置着色器与URP着色器对应关系 URP推荐的原创 2022-07-10 14:37:17 · 3658 阅读 · 0 评论 -
解决:Both vertex and fragment programs must be present in a CGPROGRAM
最近正在做unity项目从2018升级到unity2021版本,某个shader报Shader warnig in "xxxx.shader":Both vertex and fragment programs must be present in a CGPROGRAM. Excluding it from compilation.错误,第一反应是肯定是Shader本省错误。肉眼看去并没有发现有什么错误,也与2018的版本Shader进行比较,并无差异 奇怪的现象,总是有一些不为人知的隐藏,原创 2022-06-29 11:06:58 · 1556 阅读 · 3 评论 -
伽马空间与线性空间
随着真实性更高的基于物理渲染(PBR)的到来,线性空间(Linear space)光照计算也越来越被经常提及。虽然线性空间和与之“对立”的伽马空间(gamma space)是简单而重要的概念,但很多开发者对它们的真正意义并不了解。这篇文档将会介绍伽马空间和线性空间、它们之间的区别以及在Unity引擎中的应用。 线性空间是什么?简单的说,在线性空间对数字化的颜色和光照强度进行相加相乘计算得......转载 2022-06-16 12:47:14 · 1653 阅读 · 0 评论