
Unity3D游戏开发工程师全场景90班系列笔记
文章平均质量分 67
一个程序员(●—●)
这个作者很懒,什么都没留下…
展开
-
套接字+Socket连接
制作加载中动画:创建Panel,制作预制体,在Image游戏物体中添加DOTween插件,相关设置如下:(此为DOTween Pro,需付费,也可按下面的数值编写代码解决)原创 2025-05-04 21:09:13 · 832 阅读 · 0 评论 -
Unity的HTTP请求类使用方法+Unity整合接口
Unity的HTTP请求类相关代码如下:在Unity的Project窗口下创建如下文件夹及对应脚本。原创 2025-05-04 14:20:55 · 851 阅读 · 1 评论 -
HTTP基础介绍+OSI七层参考模型+HTTP协议介绍
图片来源于网络图片来源于网络。原创 2025-05-03 14:47:09 · 984 阅读 · 0 评论 -
裁剪+渲染队列+透明与混合
Unity会为屏幕的每个点,设定一个存储有当前渲染的颜色的深度值(相机到颜色点物体的距离),物体如果在摄像机视角上发生重叠后,需要计算每个重叠点像素的深度值,如果被渲染物体的深度值小于已经存储在深度缓冲区内的值,则将被渲染物体的像素点颜色替换掉原有的颜色。默认的渲染顺序原则:距离相机越近,则渲染越靠前,非透明情况下,靠前的物体会盖住。当透明物体在前,非透明物体在后,深度测试都使用默认状态,深度写入保持开启,结果。当深度写入关闭时,即使深度测试完全通过,颜色缓冲区不会被写入,必须将深度的物。原创 2025-05-02 18:39:29 · 1383 阅读 · 0 评论 -
法线纹理采样+可视化Shader编辑器
左侧为Standard的shader效果,右侧为上面代码下的shader效果,右侧较左边多了高光反射的相应数据,考虑到砖墙等一些粗糙表面现实情况下不会有如此明显的高光,应用此shader文件的同学可以将Phong光照模型的公式中的高光反射部分去除,在其他需要高光反射的情况下再进行视情况添加即可,法线贴图下第一个属性值为法线深度系数(数值0.6处,由于Shader文件未设置成UTF-8导致的中文乱码,读者可自行设置Shader文件的格式或采用英文命名),可通过调节系数对应加强法线纹理效果。原创 2025-05-02 00:50:18 · 1160 阅读 · 1 评论 -
纹理采样+光照纹理采样
建模工程师建模时,会将Mesh网格点和贴图的UV坐标对应,程序首先需要通过算法,解出当前渲染点对应的UV坐标,然后到纹理中取得对应的像素,最后着色到渲染点上。贴图缩放数据和偏移数据:连续贴图到Mesh上,有缩放和偏移量,才能算出对应纹理。纹理解析算法:Cg函数Tex2D(纹理,UV坐标)渲染点:CPU提供的渲染点位置。该系列专栏为网课课程笔记,仅用于学习参考。1.将纹理拷贝到项目中。纹理属性:存储纹理图。,所以补偿是有损耗的(纹理不一定是方形)贴图与渲染点对应原理。,游戏引擎在运行时,会自动将。原创 2025-05-01 13:51:31 · 296 阅读 · 0 评论 -
逐顶点高光反射+逐像素高光反射与Phong光照模型
光反射方向:reflect(入射光的方向,当前点的法线方向)观察方向向量:相机观察点到当前渲染的点的坐标所构成的方向。光源颜色:场景中光GameObject取得。材质的高光反射颜色:材质球配置。该系列专栏为网课课程笔记,仅用于学习参考。光晕系数:材质球配置。原创 2025-04-29 23:15:18 · 324 阅读 · 0 评论 -
漫反射实现+逐像素漫反射+逐像素漫反射实现
高光光照=光源的颜色*材质高光反射颜色*MAX(0,标准化后的观察方向向量·标准化后的反射方向)^光晕系数。高光反射光:光照到材质表面后,无(低)损失直接反射给观察者眼睛,材质表面能观察。漫反射光:光照在粗糙材质后,光的反射方向随机,还有一些光发生了折射,造成材质。漫反射光照=(光源的颜色·材质的漫反射颜色)·((标准化后物体表面法线向量·标准化后光源。漫反射光照=光源的颜色*材质的漫反射颜色*MAX(0,标准化后物体表面法向量·标准化。表面没有明显的光斑。自发光:材质本身发出的光,模拟环境使用的光。原创 2025-04-28 23:48:53 · 348 阅读 · 0 评论 -
顶点着色器和片元着色器染色+表面体着色器染色
创建材质球及Shader同名文件SurfaceColor(Shader文件选择Standard Surface Shader)猜测修改Unity的内置图片Shader,将颜色rgb运算后,会得到这个结果。1.官网内置Shader包(www.unity3d.com最下方,旧版本下载)2.根据组件使用的Shader到内置包中找Shader源文件。根据Shader内部名称,定位到Shader文件。创建材质球及Shader同名文件VFColor。快速编写相关Shader的代码思路。将材质球与Shader关联。原创 2025-04-26 22:49:55 · 462 阅读 · 0 评论 -
Shader属性讲解+Cg语言讲解
Cg支持的7种数据类型:1.float,2.half,3.int,4.fixed,5.bool,6.sampler*,7.string。矩阵的初始化方式为:float2x3 matrix5={1.0,2.0,3.0,4.0,5.0,6.0};对数组进行初始化的方式为:float a[4]={1.0,2.0,3.0,4.0};向量初始化的方式一般为:float4 array=float4(1.0,2.0,3.0,4.0);//等价于float3(d,c,b,a)原创 2025-04-22 23:23:15 · 855 阅读 · 0 评论 -
GPU渲染阶段介绍+Shader基础结构实现
(GPU)Graphics Processing Unit:图形处理(矩阵运算,数据公式运算,光栅化)主要就是CPU将硬盘中的数据加载后,和内存进行通讯后,将需要显示的数据信息。物体最终显示:需要GPU进行一系列的矩阵运算,将模型空间下的点,转换到屏间。使用上一个阶段(几何阶段)递过来的数据,对像素点进行染色,最终显示出来,固定管线Shader:很古老显卡的编程着色器,现在很少使用,画质不好。给GPU编程的语言,代码会在GPU上并行执行(几何运算,光栅化)(顶点数据,纹理坐标,法线信息),传递GPU处理。原创 2025-04-19 23:49:40 · 992 阅读 · 1 评论 -
齐次坐标变换+Unity矩阵变换
变换(transform):指的是我们把一些数据,如点,方向向量甚至是颜色,通过某种方式(矩阵运算),进行转换的过程。缩放(3,2,1)复合变换,是存在顺序的,因为矩阵乘运算,不满足乘法交换律。一个点P(1,1,1),需要做绕z轴旋转30度,平移(5,4,2),UNITY_MATRIX_MVP:将点从模型空间下,转换到裁剪空间下。UNITY_MATRIX_VP:将点从世界空间下,转换到裁剪空间下。UNITY_MATRIX_M:将点从模型空间下,转换到世界空间下。原创 2025-04-19 20:02:08 · 1214 阅读 · 1 评论 -
矩阵基础+矩阵转置+矩阵乘法+行列式与逆矩阵
重要的几何含义:一个矩阵可以表示一个变换,而逆矩阵可以还原这个变换。Cij=-1的i+j次幂*去掉第i行,和第j列组成的矩阵的行列式。对角线元素:方阵中,行数和列数相同的元素,就是对角线元素。对角矩阵:非对角线元素为0,对角线元素是任意值的方阵。计算每个分量的代数余子式,用于转置,再计算逆矩阵。计算矩阵的行列式,来判定矩阵是否存在逆矩阵。逆矩阵的表示方法:假设有矩阵M,逆矩阵就是。2.找到左边矩阵对应的行和右边矩阵对应的列,相乘再相加。行列式表示方式:假设有M矩阵,|M|表示M矩阵的行列式。原创 2025-04-16 22:00:45 · 1132 阅读 · 0 评论 -
C#调用Lua方法1+C#调用Lua方法2,3
Unity是基于C#语言开发的,所有生命周期函数都是基于C#实现,xLua本身是不存在Unity的相关生命周期函数的。如果希望xLua能够拥有生命周期函数,那么我们可以实现C#作为Unity原始调用,再使用C#调用Lua对应的方法。C#实现的系统,因为Lua可以调用,所以完全可以换成Lua实现,因为Lua可以即时更改,即时运行,所以游戏的代码逻辑就可以随时更改。Lua调用Unity的各种API,从而实现C#开发系统同样的效果。使用C#代码调用Lua代码的结构体。使用C#代码调用Lua代码的函数。原创 2025-04-08 23:24:14 · 469 阅读 · 0 评论 -
xLua的Lua调用C#的2,3,4
该系列专栏为网课课程笔记,仅用于学习参考。Lua语言测试out,ref关键字。原创 2025-04-06 15:45:48 · 290 阅读 · 0 评论 -
xLua环境控制+xLua的Lua调用C#的1
接触一个新的Lua项目时,先要弄懂Lua的加载器规则,只有这样,才能弄懂项目的Lua执行流程。该系列专栏为网课课程笔记,仅用于学习参考。原创 2025-04-05 18:37:00 · 361 阅读 · 0 评论 -
热更新简介+xLua基础调用
开发者将测试好的代码,发布到应用商店的审核平台,平台方会进行稳定性及性能测试。测试成功后,用户即可在AppStore看到应用的更新信息,用户点击应用更新后,需要先关闭应用,再进行更新。什么是热更新广义:无需关闭应用,不停机状态下修复漏洞,更新资源等,重点是更新逻辑代码。狭义定义(iOS热更新):无须将代码重新打包提交至AppStore,即可更新客户端的执行代码,即不用下载app而自动更新程序。原创 2025-04-04 23:53:05 · 1278 阅读 · 0 评论 -
Lua函数与表+Lua子文件加载与元表
使用函数将无固定值的参数进行排序(冒泡排序法),并返回参数个数。使用元表的_add元方法,实现两个Table的所有元素的合并。该系列专栏为网课课程笔记,仅用于学习参考。此为config文件中的内容。获得不规则Table的准确长度。Lua函数相关示例代码。原创 2025-04-04 20:35:07 · 392 阅读 · 0 评论 -
Lua环境搭建+Lua基本语法
前期准备:搜索并下载安装LuaForWindows,例:安装完成后开启cmd窗口,输入lua出现版本号证明成功下载安装。原创 2025-04-03 23:51:11 · 1199 阅读 · 3 评论 -
异步加载+内存分析
通过Memory Profiler图观察,在以AB包为例观察其各功能在运行时内存的占用情况可知(本次测试观察Graphics&Graphics Driver),当仅加载AB包时,其内存会短暂出现短幅上升又下降的情况(该AB包为默认压缩状态,此过程可说明AB包在解压),最终下降到趋于运行无操作时内存占用量,说明加载AB包在运行时并不实际占用内存;当我们卸载AB包不销毁图片时,该张图片占用的内存不会被释放,而当我们重新加载AB包资源并加载其他图片覆盖未被销毁的图片,其图片会作为游离资源存放在内存中。原创 2025-04-01 21:44:17 · 331 阅读 · 0 评论 -
资源热更新演示+优化导出工具及依赖加载
补充AB包相关知识:导入到AB包的资源,包内部是不存在目录的AB(A)包与AB(B)包的依赖关系示例补充:Coin图片所在AB包:test1Image预制体所在AB包:deptest,由于Image预制体的Source Image使用了Coin图片,则deptestAB包就与test1AB包产生了依赖关系,见下图:资源的热更新演示相关代码:层级面板及挂载情况:运行情况见下图: DeterministicAssetBundle:将AssetBundle的哈希校验值,存储在ID中(默认开启)原创 2025-04-01 17:08:10 · 886 阅读 · 0 评论 -
AB包介绍及导出工具实现+AB包资源简单加载
AssetBundle是把一些资源文件,场景文件或二进制文件以某种紧密的方式(浅显理解例:压缩包)保存在一起的一些文件。AssetBundle内部不能包含C#脚本文件,AssetBundle可以配合Lua实现资源和游戏逻辑代码的更新热更新不关闭Unity应用的前提,实现游戏资源和代码逻辑的更新。原创 2025-03-29 23:56:21 · 1118 阅读 · 0 评论 -
编辑器场景视窗扩展
接上文编辑器菜单栏扩展测试。原创 2025-03-29 16:28:16 · 462 阅读 · 0 评论 -
编辑器检视器面板深度扩展2+编辑器菜单栏扩展
该系列专栏为网课课程笔记,仅用于学习参考。接前文检视器高级修改(外挂式编程)原创 2025-03-29 00:12:26 · 370 阅读 · 0 评论 -
编辑器检视器面板简单扩展2+编辑器检视器面板深度扩展1
位置点由HandleUtility.GUIPointToWorldRay发出射线计算问题,创建新的对象后,编辑状态会被取消,原因,新创建的对象,会占据Inspector面板,此问题有弹窗的Update,一直选中对象。DestroyImmediate会直接删除对象,不安全,有可能后续有代码处理逻辑编辑器下,对象没有脚本,生命周期函数不会运行,可以直接使用第二个API删除对象和列表中的数据。所以如果A是明文,B是密钥,C就是密文,使用异或实现的算法,可以将C密文利用B密钥,解出A即原始文字。原创 2025-03-27 20:50:40 · 581 阅读 · 0 评论 -
编辑器开发基础介绍+编辑器检视面板简单扩展1
项目中建立的Editor目录,编辑器相关的逻辑和资源会放在其内部,相关内容,在打包生成时,不会一起生成到项目中,玩家也不会使用到编辑器相关的内容。用于在C#运行时,传递程序中各种元素(类,结构体,变量,方法,枚举,组件)的行为信息的声明标签。Unity编辑器命名空间:UnityEditor,此命名空间,不要出现在游戏被发布的逻辑代码中,会导致项目打包失败!Plugins:需要跨语言调用的代码逻辑代码存储目录,手机SDK接入。StreamingAssets:只读,存储跟随游戏包的资源目录。原创 2025-03-26 20:57:01 · 434 阅读 · 0 评论 -
MVC基础概念及相应代码示例
以上代码仅供帮助理解MVC开发思想,未提供对应的UI各物体挂载及摆放,如想实践,自取代码进行相应修改调试。根据控制器调用模型的方式数量,在模型中编写对应数量的函数,以供调用。一个功能模块的代码逻辑(显示处理,数据处理,逻辑判定)都写在一起(耦合)U:Update修改数据。其他美术资源(模型,动作特效)逻辑判定实现(Controller控制器)数据处理实现(Model数据模型)C:控制器,负责流程控制和事件响应。显示部分实现(View视图)2.处理数据(数据模型脚本)M:数据模型,负责数据处理。原创 2025-03-26 14:48:57 · 707 阅读 · 0 评论 -
JSON数据修改的实现
可扩展标记语言,标准通用标记语言的子集,是一种用于标记电子文件使其具有结构性的标记语言。XML的解析得考虑子节点父节点,让人头昏眼花,而JSON的解析难度几乎为0。JSON相对于XML来讲,数据的体积小,传递和解析的速度更快。数字,字符串,布尔,数组(链表),对象,null。该系列专栏为网课课程笔记,仅用于学习参考。所有XML元素都须有关闭标签。JSON比XML可读性高。XML必须存在一个父节点。XML标签对大小写敏感。XML必须正确地嵌套。同样具有很强的扩展性。JSON和XML对比。原创 2025-03-23 23:03:45 · 486 阅读 · 0 评论 -
Unity的JSON工具类+LitJson的引入及使用
数据:string j="{\"Num\":1, \"Name\":\"root\", \"IsWoman\":false}";数据使用(反序列化):将JSON字符串中存储的数据,转化为C#可用的数据格式,实现代码逻辑。LitJson(JsonMapper.ToObject())示例:引用前文的JSON道具数据(稍作修改)[System.Serializable] //类产生的对象数据,可以被序列化后存储。数据存储(序列化):将C#的数据格式,转化为JSON字符串,存储或传输。原创 2025-03-23 21:32:36 · 1006 阅读 · 0 评论 -
JSON基础概念介绍+策划配置数据与JSON应用
http://www.bejson.com //辅助校验Json编写的正确性。原创 2025-03-20 23:12:08 · 422 阅读 · 0 评论 -
拖拽实现+摇杆实现
半透明渐变贴图在ios设备下,使用压缩会造成图片质量损失,所以可以将半透明渐变UI切片单独制作真彩色图集。IBeginDragHandler:检测到射线后,当拖拽动作开始时执行一次回调函数。IDragHandler:拖拽开始后,有拖拽位置变化时,执行回调函数(每个移动)IEndDragHandler:拖拽进行中时,当鼠标或手抬起时,执行一次回调函数。DragArea本地坐标:控制摇杆(DragBar)的位置。如何通过屏幕坐标系下的点,转换到DragArea本地坐标系下的点。位置:相对量,需要有参照物体。原创 2025-03-18 22:44:21 · 554 阅读 · 0 评论 -
点击事件+长按实现
由于Unity是组件化开发思想,所以自定义按钮也是使用组件Script实现编写自定义事件步骤1.引入自定义事件命名空间(UnityEngine.EventSystems)2.实现自定义事件Interface3.用户交互会触发回调函数点击事件接口系列IPointerEnterHandler:鼠标光标移入射线检测区域,触发回调函数IPointerExitHandler:鼠标光标移出射线检测区域,触发回调函数IPointerDownHandler:鼠标在射线检测区域中按下,触发回调函数。原创 2025-03-18 19:02:53 · 311 阅读 · 0 评论 -
下拉菜单+DoTween插件
Item Image:下拉菜单中,存储选项的图片组件(来自Template下,每个选项会复制一份)Caption Image:当前选中的图片选项对应的图片组件(选中的选项图片,显示在这个组件中)Item Text:下拉菜单中,存储选项的文本组件(来自Template下,每个选项会复制一份)//在动画队列后方追加动画。Caption Text:当前选中的选项对应的文字组件(选中的选项文字内容,显示在这个组件中)DoTween是一个免费的Unity动画插件,少量代码即可实现常见的动画效果。原创 2025-03-17 21:26:20 · 954 阅读 · 0 评论 -
Slider,InputField,Scroll View,Scrollbar及Layout组件
Text Component:输入的内容,显示的文本组件Text:当时输入的内容值Character Limit:最大输入字符Content Type:输入的文本类型(数字,实数,数字英文,名称,密码)Line Type:行类型(单行,回车跳出,回车换行)Placeholder:输入框原始内容(默认显示)Caret Blink Rate:光标显示频率Caret Width:光标宽度Custom Caret Color:光标自定义颜色Selection Color:被选中文字的颜色。原创 2025-03-16 21:00:44 · 597 阅读 · 0 评论 -
事件系统简介+Button组件+Toggle简介
UI的射线检测会依次检测对象树下的所有元素,有任何射线检测成功,则会反馈到带有事件响应的组件(Button)中。Blocking Objects:遮挡事件的物体(2D物体【精灵片】,3D物体)若想要实现组内Toggle全不选的情况,勾选Group组件的Allow Switch Off即可。找到Button,OnClick事件,添加(脚本所在对象,并选择回调函数)Blocking Mask:遮挡事件的物体所在的渲染层。如果想实现射线穿透,可以将前面显示的UI元素的射线检测关闭。按下状态的颜色(按钮按下)原创 2025-03-16 12:16:43 · 499 阅读 · 0 评论 -
文本组件+Image组件+图集
Panel位于Canvas子物体,四锚点在四角,边距为零,所以Panel和Canvas一样大,Canvas和屏幕一样大,所以Panel和屏幕一样大,元素显示处理在Panel中正常,则屏幕中也正常。Color:用于混色,美术有时提供白图和色号,程序员对图处理,染成想要的颜色,可以减少包体大小。在Project Setting下的Editor窗口中,将Mode改为V2,此为新版精灵图集系统,将替代旧版系统。1,3,7,9区域不拉伸。将多个UI切片,合并成一张UI图,UI界面只加载一张UI图片显示。原创 2025-03-15 20:36:52 · 879 阅读 · 0 评论 -
UI基础概念+Canvas相关知识
修改Canvas下Canvas组件Render Mode属性:Camera,将相机拖给Canvas下Canvas组件Render Camera属性,将Cube位置调整到Canvas前。World Space:Canvas以3D物体的形式显示在场景中,将Canvas模式调整为World Space,再将Canvas放入相机可视范围内;Canvas在两个模式下(Overlay和Camera)会覆盖整个屏幕,所做屏幕UI显示时,只需要处理好Canvas中的显示即可。16:9下:美术一般都会按照16:9出图;原创 2025-03-14 21:41:21 · 934 阅读 · 0 评论 -
1D混合树+2D混合树+IK动画+Override Animator Controller
Threshold:阈值(-1~0运行的是blueAttack2动画权重越来越低,blueHurt权重越来越高;1.weight权重:BaseLayer层默认为1,如果希望armLayer层也有播放权限,需要将armLayer层的权重也设为1;通过动画片段的动画位移来计算的阈值,我们一般使用自己设置的;什么叫动画的重定向:其他模型的动画用作自身模型,虽然是不同模型,但播放的是同一套动作;注意:动作的重定向必须是两个骨骼动画是一样或者很接近的,否则不能实现动画重定向;2.不能改变原来状态机的切换逻辑;原创 2025-03-13 15:49:42 · 392 阅读 · 0 评论 -
NavmeshAgent组件+Animator
StoppingDistance:距离目标点多远就停止(速度不能太快,加速度不能太小,否则可能会由于到达目标点时速度未降到零而无法正常停止);Area Mask:区域覆盖,当前寻路组件没有覆盖的区域,即使有烘焙显示是可行区域,对当前这个组件来说也是不可行区域;常用做播放死亡动画,不管当前角色在播放什么状态,都可以被杀死然后播放死亡动作;Priority:寻路权重(0-99,值越小优先级越高,优先级低的游戏寻路组件需要绕着他走);Idle(名字不固定):橙色,一般是默认动画,一般播放待机动画;原创 2025-03-11 20:20:21 · 799 阅读 · 0 评论 -
模型和动作设置+Unity自带寻路系统Navigation
Off Mesh link:当想要游戏物体在寻路导航中能够实现类似爬坡的效果,可以在需要“爬高”的游戏物体下创建两个子物体,在父物体上挂载Off Mesh link组件,设置起点和终点的位置(两个子物体的transfrom,组件设置见下图)有可能是一个完整的动画合集,分动画是根据帧数来分的,这个时候动画设计师需要跟你说具体动作所对应的帧数范围;在剪切动画时,需要检查右侧的灯的颜色;绿色等代表匹配的很好,黄色灯匹配的一般,红色灯代表没有匹配上;Humanoid:新版动画系统人类角色的设置;原创 2025-02-26 11:23:51 · 568 阅读 · 0 评论