
游戏
游戏开发
Kenight_
这个作者很懒,什么都没留下…
展开
-
Unity 笔记
使用 GetComponentsInChildren 会返回自身以及子节点,如果要排除自身可以使用以下方法。原创 2024-10-26 18:28:25 · 275 阅读 · 0 评论 -
UNREAL 笔记
Unreal Engine 笔记原创 2024-05-17 16:18:34 · 286 阅读 · 0 评论 -
关于 Unreal 中的一些计算问题
关于 Unreal 中的一些计算问题原创 2024-03-09 23:22:51 · 1127 阅读 · 0 评论 -
Godot 基础
Godot 基础原创 2023-11-04 17:21:25 · 751 阅读 · 0 评论 -
Vector 基础
向量基础原创 2021-05-25 20:38:01 · 1718 阅读 · 0 评论 -
Unity Addressable Sample
【代码】Unity Addressable Sample。原创 2023-07-03 10:49:15 · 455 阅读 · 0 评论 -
UE 控制台命令整理
控制台命令整理原创 2022-06-13 22:27:25 · 2322 阅读 · 0 评论 -
PS 图层混合模式分类
图层混合模式分类原创 2022-04-16 10:52:15 · 351 阅读 · 0 评论 -
图形技术之坐标转换
转换过程坐标剪裁在透视除法之前执行,剪裁坐标中的 x, y, z 将与 w 进行检测,在 [-w, w] 之外的顶点将被剪裁掉这个 w 来自何方:w 是由 PROJECTION Matrix 变换后添加的齐次坐标,它的值来等于摄像机坐标下的 -z 值 (摄像机坐标使用右手坐标系),且它的范围一定在 [near, far] 之间,否则就被剪裁掉了之后透视除法与视口变换将由 GP...原创 2018-07-10 12:59:04 · 682 阅读 · 0 评论 -
画抛物线轨迹
使用 LineRenderer 画出轨迹,核心代码:// 设置 LineRenderer 顶点数量int pointCount = 30;Vector2[] points = new Vector2[pointCount];line.positionCount = pointCount;// 第一个顶点位置points[0] = transform.position;line.Se...原创 2020-01-05 21:13:22 · 617 阅读 · 0 评论 -
简单的折射效果
通过 GrabPass 实现Shader "Unlit/Glass"{ Properties { _BumpAmt ("Distortion", Range (0,100)) = 10 _TintAmt ("Tint Amount", Range(0,1)) = 0.1 _BlurAmt ("Blur Amount", Ra...原创 2018-08-14 22:57:22 · 743 阅读 · 0 评论 -
C# Lambda
定义:Lambda 表达式是一个匿名函数,是简化匿名方法的一种方式基本形式:x => x * x ,=> 是运算符,左边是参数,右边是表达式(或叫方法的实现代码)示例:void Start() { // Func 是预定义 delegate 泛型最后一个参数是返回值 Func<int, int, string> f = (x, y) ...原创 2018-05-10 23:44:02 · 843 阅读 · 0 评论 -
Unity 项目版本控制
# For Unity/Temp//obj//Library/# For Visual Studio Code / MonoDevelopExportedObj/obj/*.svd*.userprefs*.csproj*.pidb*.suo*.tmp*.sln*.user*.unityproj*.booproj# Unity3D generated files原创 2017-01-03 00:13:40 · 2292 阅读 · 0 评论 -
类或接口使用时机
有时候这样使用接口public interface IAnimal{ void Prey();}public class Bird: IAnimal{ public void Prey() => Debug.Log("prey");}仔细想一想,使用抽象类或基类的方式更合适,还能定义属性和字段public abstract class Animal{ ...原创 2020-03-27 15:42:09 · 197 阅读 · 0 评论 -
同步问题解决的一些思路
移动同步:Move():执行一次移动SendMove:发送移动数据包Check Move or Cheat:位置校验,作弊校验SendMoveAdjust:下发纠正数据包Adjust Move():纠正或回滚位置OnSerializeOthers:同步属性到远程客户端瞬发技能同步:关键点:Local Player 发送射击事件,由 Server原创 2017-12-29 22:15:10 · 477 阅读 · 0 评论 -
Unity Script 中一些方法和属性
Vector3.LerpUnclampedLerpUnclamped 的值不局限于 a ,b 之间Vector3 lerp = Vector3.Lerp(Vector3.zero, Vector3.one, 1.5f);Vector3 lerpUnclamped = Vector3.LerpUnclamped(Vector3.zero, Vector3.one, 1.5f);// lerp...原创 2019-05-10 17:26:04 · 1348 阅读 · 0 评论 -
Unity Culling 相关技术
在 Unity 中使用的 culling 相关技术:Frustum Culling剔除视锥体外的渲染物体,被剔除的物体不会发送给GPU渲染管线(这与 shader 中对顶点透视除法后进行的剔除不是一个东西),Unity 默认启用这项技术。Occlusion Culling剔除被其他物体遮挡的,摄像机不可见(但在视锥体内)的渲染物体。使用 Occlusion Culling 需要手动设置,...原创 2018-09-18 17:10:33 · 1696 阅读 · 1 评论 -
释放非托管资源
使用 using 语法糖清理非托管资源using (var file = File.Open(path, FileMode.Open)){ ...}File 类型属于托管类型,它通过垃圾回收器分配堆内存并自动释放,但它访问的外部文件属于非托管资源,垃圾回收器不能跟踪并释放。上面 using 语句实际上将编译成:{ var file = File.Open(path, FileM...原创 2020-03-26 19:01:52 · 391 阅读 · 0 评论 -
Unity 定时器的几种实现方法
1、利用帧public float timer = 2.0f; // 定时2秒void Update() { timer -= Time.deltaTime; if (timer <= 0) { doSomething(); timer = 2.0f; }}2、延迟调用使用 MonoBehaviour.Invoke,延迟调原创 2016-12-05 22:50:56 · 21109 阅读 · 1 评论 -
Create Shader
UVsUsing MaskUVs几种常用的 MaskUVsTexture MaskUVsUV MaskUVsOrientation MaskUVsPosition MaskUVsVertex Color MaskUVs需要在 3D 软件中为顶点设置颜色原创 2018-10-07 16:13:58 · 501 阅读 · 0 评论 -
2D 动画调整 position 产生的位移问题
原因是物体的 position 使用的是世界坐标应该将物体挂在一个空的父 GameObject 下再制作动画,这样物体使用相对坐标,所有的位移都是相对于父 GameObject原创 2017-11-11 23:32:51 · 2333 阅读 · 0 评论 -
获取 RenderTexture 的几种方式
RenderTexture Constructorpublic class ExampleClass : MonoBehaviour { public RenderTexture rt; void Start() { rt = new RenderTexture(256, 256, 16, RenderTextureFormat.ARGB32); }}...原创 2018-09-18 18:09:32 · 4695 阅读 · 0 评论 -
ScriptableObjects Callbacks
鼠标输入问题不管使用老系统还是 new input system ,只要 mouse delta * Time.deltaTime 就会有卡顿感测试环境一:URP 默认的 template 项目,使用老输入系统,自带的 SampleCameraController.cs 脚本,使用右键控制鼠标时,明显卡顿var mouseMovement = GetInputLookRotation() * TIme.deltaTime * 5// 如果将 TIme.deltaTime 替换为常量则变得丝滑v原创 2021-06-27 22:12:56 · 254 阅读 · 0 评论 -
Unity Layers 与 LayerMask
Unity用32位二进制数表示32个层(00000000....),哪一位上是1,则表示该位置上有层的定义在Unity中每个GameObject都有Layer属性,默认的Layer都是Default,在Unity中可编辑的Layer共有24个(8—31层),官方已使用的是0—7层,默认不可编辑LayerMask mask = 1 LayerMask mask = 0 举例:原创 2016-12-04 22:33:24 · 1566 阅读 · 0 评论 -
ScriptableObject 的使用
ScriptableObject 的一些特点:ScriptableObject 数据存储在 asset 资源文件中,相当于被持久化,类似 unity 材质或纹理资源,如果在运行时改变了它的值则就是真的改变了并被持久化下来ScriptableObject 资源在实例化时是被引用,而非像 Prefab 或其他GameObject一样是复制(实际场景中会存在多个 GameObject)原创 2017-12-14 15:54:09 · 6046 阅读 · 0 评论 -
图形技术之管线概念
Pipeline:每一步骤的输出都将作为下一步骤的输入,渲染过程在 GPU 中是并行运算的,蓝色背景部分可通过 shader 代码控制1. Vertex Shader顶点变换;坐标转换2. Shape Assembly / 图元装配将顶点转换为图元(在这里就是三角形面),并裁剪掉视野外的图元数据3. Geometry Shader通过增减顶点生成其他图元4. Ras...原创 2018-06-20 14:22:33 · 974 阅读 · 0 评论 -
Unity Coroutine 简单理解
协程的定义:IEnumerator MyCoroutine () {yield return new WaitForSeconds(1.0f);doSomething();}启动协程:StartCoroutine(MyCoroutine ())解析:协程一旦启动后,就像 Update 函数一样,每帧执行yield return 的作用就是返回 IEnum原创 2017-11-04 15:39:19 · 348 阅读 · 0 评论 -
导弹跟踪的简单实现逻辑
基本思想是,给导弹一个恒定方向的力,再不断的修改导弹本身的角度,简单的代码片:void FixedUpdate(){ // 给导弹一个始终向上(本地)的力 rbody.velocity = transform.up * speed; // 第一种修改角度的方法: Vector2 dir = (Vector2)target.position - rbody.position; // 叉...原创 2019-12-16 11:38:23 · 1011 阅读 · 0 评论 -
Editor Tips
自定义 UI Scaling通过启动参数,自定义缩放比例原创 2021-08-30 11:51:19 · 104 阅读 · 0 评论 -
Shader 常用函数
将法向量由模型变换到世界空间UnityObjectToWorldNormal(v.normal)// 相当于(使用顶点变换矩阵的逆转置矩阵对法线进行变换)normalize(mul(v.normal, (float3x3)unity_WorldToObject))将方向向量由模型变换到世界空间UnityObjectToWorldDir(float3 dir)// 相当于...原创 2018-08-07 18:18:09 · 6425 阅读 · 1 评论 -
获取透视摄像机的可视区域
透视摄像机的视锥体截面的这个矩形就是可视区域,其实就是计算这个矩形的长与宽方式一:Camera mainCamera = Camera.main;float distance = Mathf.Abs(transform.position.z); // 摄像机到矩形的距离float height = 2.0f * distance * Mathf.Tan(mainCame原创 2017-11-10 15:36:45 · 1533 阅读 · 0 评论 -
Unity Auto Layout
简单的说,Auto Layout 自动布局的核心就是使用 Layout Controllers 控制 Layout ElementsLayout Elements具有 Layout Proerties 的 UI gameobject 都是 Layout Element上图显示当前 Layout Element 的布局属性,添加 Layout Element Component 可以修改这些...原创 2019-06-27 12:59:23 · 192 阅读 · 0 评论 -
Blender 2.8 with Unity
导出 Fbx 到 Unity,使 Blender 中 1 meters 与 Unity 中 1 Unit 尺寸相同勾选 “Apply Transform”,修改 Scale 为 0.5原创 2019-06-17 21:59:14 · 2362 阅读 · 0 评论 -
Unity 的序列化
经过 Serialize (序列化) 的 class 或 attribute 的值会被保存成二进制文件,在 Unity 中可序列化的 attribute 将在 Inspector 显示出来 继承 MonoBehavior 的情况下class 与 public attribute 都是被视为可序列化的private attribute 被视为不可序列化的,可通过 SerializeF...原创 2018-02-24 23:18:30 · 586 阅读 · 0 评论 -
理解构成 Mesh 的一些基本元素
一个 Mesh 主要由三个部分即可构成,以 Cube 为例vertices:顶点的 Vetor3 数组,一个 Cube 由 6 个面构成,每个面 4 个顶点,一共 24 个顶点(虽然有部分顶点是重叠的)triangles:三角形顶点排列的 int 数组,每三个顶点构成一个三角形,两个三角形构成一个面,所以一个 Cube 包含 12 个三角形uv:每个顶点的贴图坐标,存储在 Vector原创 2017-12-16 22:29:35 · 2317 阅读 · 0 评论 -
Tilemap 使用 Composite Collider 2D
添加 Tilemap Collider 2D 与 Composite Collider 2D 组件并勾选 Tilemap Collider 2D 的 Used By Composite出现快速移动物体穿越碰撞体的问题,可通过设置 Rigidbody 2D 的 Collision Detection 为 Continuous设置方法,可以在 Dynamic 中设置后再选择 Sta原创 2017-12-23 10:59:18 · 9001 阅读 · 7 评论 -
Unity VS Code Development
VS Code 官方参考文档Unity Development with VS Code开发环境需求VS Code 开发C#项目需要安装 .NET Core SDK安装 C# extension启动代码完成打开.cs文件没有代码完成功能并有如下提示:提示需要安装 .NET Framework 4.X Targeting Pack目前版本Unity只支持到4.7.1,可以通过报错信息或 Assembly-CSharp.csproj 文件查看...原创 2021-01-05 00:16:25 · 192 阅读 · 0 评论 -
光照使用的简单总结
文档先看一遍官方文档最直接https://docs.unity3d.com/Manual/LightModes.htmlGlobal IlluminationGI 是表现间接光 (indirect light) 的光照技术,不开启 GI 意味着完全不会去处理间接光。GI 是通过 预计算后将间接光照信息 存储在 Lightmap 中,参与 GI 的游戏对象必须被标记为 Static...原创 2018-09-17 23:16:10 · 274 阅读 · 0 评论 -
C# 迭代器
IEnumerator实现 IEnumerator 接口的类才是真正的迭代器,它定义了各项元素被循环访问的逻辑。// 实现 IEnumeratorpublic class WeekEnumerator : IEnumerator{ string[] week = { "Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat" }; int...原创 2020-03-23 15:23:32 · 186 阅读 · 0 评论 -
C# LINQ 查询与投影
定义数据源string[] fruits = { "apple", "banana", "mango", "orange", "passionfruit", "grape" };创建查询查询变量本身只存储查询命令。 查询的实际执行将推迟到在 foreach 语句中循环访问查询变量之后进行。// 查询语句语法var q1 = from f in...原创 2020-01-01 00:00:22 · 801 阅读 · 0 评论