自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(61)
  • 收藏
  • 关注

原创 c# string字符串连接原理

string 的几种连接操作,以及源码介绍

2022-09-14 01:12:09 411

原创 C#可空类型

c#可空类型,一方面兼容了一些业务对null值类型的需求,一方面提高了代码的简练性。因此其实可以在写代码的时候适当的习惯使用。

2022-07-03 22:24:54 466

原创 骨骼动画原理

游戏制作中,从游戏开始到现在,动画的发展经历了一个一个的阶段,效果逐渐越来越真实自然流畅。但是复杂度也越来越高。作为游戏钟不可或缺的重要模块,下面我将以unity为例聊一下,动画是怎么一步一步发展过来,以及骨骼动画的设计初衷,内部数据表示以及原理。...

2022-06-05 20:11:45 1052 2

原创 使用Entitas构建游戏框架(一)

解耦在编程时是很重要的一个考量因素,但是如果能在框架上就增加约束,让代码看上去更清晰,那么即便有一些新手,在这种约束下,也不会耦合太严重。暴雪在GDC 2017年分享了《守望先锋》关于ECS系统的实施方案,给出了一种框架上解耦的答案。这里介绍一种轻量级的ECS开源框架

2022-05-01 22:22:13 1477

原创 Unity中的Compute Shader

游戏开发中,dot编程在处理大数量级的运算应用已经越来越广泛了,而GPU本身对大规模数据的并行计算已经越来越强了,因此现在许多游戏处理大量物体的计算可以利用GPU这一特性,加快并发计算速度,Compute Shader就是专门利用这一特性的。

2022-03-27 22:13:03 7380 1

原创 crash原理

在开发中,经常发生程序异常崩溃,我们一般的处理是通过找到类似crashdump日志文件,找到原因。本文就是研究crash的原理。

2022-02-07 22:40:30 1919

原创 腾讯社招面试复习系列之二,图形篇

最近在准备复习面试腾讯游戏开发,接下来会出一系列复习文章,总结一些他人的面试题与经验,以及之前自己面试时经验,并给出一些自己的见解,供大家一起学习。

2021-11-20 23:38:01 770

原创 腾讯社招面试复习系列之一,C++篇

最近在准备复习面试腾讯游戏开发,接下来会出一系列复习文章,总结一些他人的面试题与经验,以及之前自己面试时经验,并给出一些自己的见解,供大家一起学习。

2021-11-14 00:54:16 2963 1

原创 unity图像压缩算法原理

概述在计算机图形学中,存在许多纹理压缩方案。压缩既减少了纹理内存占用,又降低了使用纹理的带宽要求。本文中,“纹理压缩”与“图像压缩”不同,因为纹理压缩方案的设计允许作为纹理采样的一部分进行有效的随机访问。“图像压缩”可以通过将图像视为一个整体来进一步减少图像冗余,但这样做对于有效的纹理访问操作是不切实际的。本文主要介绍几种unity当前主流的图像压缩算法,并给出推荐理由。unity图像压缩算法原理概述目的术语算法S3TC1. BC1 with no alpha2. BC1 with alpha3. B

2021-09-29 01:54:18 1490 1

原创 JPS寻路算法优化思路

当寻路算法成为瓶颈的时候,可以看看JPS算法是怎么解决寻路过程中的性能问题的

2021-09-12 02:13:36 1043

原创 网络游戏外挂与反外挂的研究

网络游戏行业作为互联网新兴产业代表之一,在其高速成长的同时,也饱受安全问题的侵害。今年热门的《绝地求生》,更是外挂肆虐,导致用户大量流失,严重损害了开发商的利益和该行业的健康发展。研究本课题正是为了能够寻找出解决当前游戏开发商所面临困难的途径,维护网络游戏健康稳定的发展,给该行业的发展提供有力的保障。

2021-08-16 02:06:07 4259

原创 使用WinDivert抓包,开发windows弱网工具(C++版)

介绍WinDivert最简单的接入教程,以及使用的一些心得目录介绍前言一、WinDivert是什么?二、使用步骤1.下载库2.接入项目3.使用测试:总结前言-最近开发的实时战斗游戏,在国外某国测试了,有很多其他国家的也想体验,通过梯子来到了我们游戏,我们发现他们在直播玩的时候,拉扯很严重,延迟较高,我们当时在这种极度弱网下表现并不是很好,因此打算找一个弱网工具模拟这种情况。经过分析,我发现主要原因在于UDP包的堆积,然后大量同时到达导致。曾经用过一个叫NEWT(Network Emulator

2021-06-30 23:06:12 2178 5

原创 C++日志工具spdlog接入与使用

C++日志工具spdlog接入与使用简介- - -说明- - -- - -下载- - -- - -特点- - -接入使用结论简介- - -说明- - -最近开发一个windows弱网工具,打算接入一个日志工具,果断github找一波,发现了spdlog,用了一下,简单易用,分享给大家。- - -下载- - -github 地址: https://github.com/gabime/spdlog- - -特点- - -个人使用,主要还是方便高效,功能齐全。经过个人使用,确实满足要求。快速高效

2021-06-30 01:56:15 854 2

原创 使用python opencv批量对贴图进行除透明边并压缩

import globimport cv2def access_pixels(file, frame): print(frame.shape) # shape内包含三个元素:按顺序为高、宽、通道数 height = frame.shape[0] weight = frame.shape[1] channels = frame.shape[2] print("weight : %s, height : %s, channel : %s" % (weight.

2021-04-23 10:54:29 263 1

原创 c# 深入理解static const readonly区别

c# static const readonly是很类似的字段,内存占用,读写权限,原理机制都有很大的不同。

2021-04-16 23:15:26 143

原创 c# dll程序集元数据概述

c# dll程序集概述什么是程序集PE文件元数据组成元数据定义表引用元数据表清单元数据表程序集是一个或多个类型定义文件以及资源文件的集合。程序集是进行重用,版本控制和应用安全设置的基本单元,它允许将类型和资源文件划分到单独的文件中。这样一来无论是自己还是程序集用户都可以决定打包和部署哪些文件。

2021-04-11 15:29:34 666

原创 unity死循环,无限内存增长的调试方法

1.附加到unity2.程序复现,运行到死循环的地方3.在VS上点击暂停3.打开调试->窗口->线程 窗口:4.找到多有线程的运行状态,找到对应的线程,一般主线程是第一个,看看执行到了那里,就能知道,死循环发生在哪里了。一般死循环伴随内存无限的增长...

2021-03-15 17:38:35 796 2

原创 unity throw抛出异常失败,正常的错误也无法正常打印问题

在ui初始化的时候,有如下代码,或者其他异常 public override void GetUI() { int a = 0; int b = 1 / a; m_ShoppingBottomImage = GetUI<Image>("ShoppingBottomImage"); m_LeftTime = GetUI<Text>("ShoppingTopImage/LeftTime"); m_LeftMoney = Ge

2020-10-27 11:05:25 823

原创 LUA 面试复习笔记

LUA 游戏面试复习题Lua的特性Lua数据类型基本类型function(函数)hread(线程)userdata(自定义类型)Lua元表(Metatable)__index 元方法__newindex 元方法__call 元方法__tostring 元方法操作符元方法LUA闭包Lua的特性轻量级: 它用标准C语言编写并以源代码形式开放,编译后仅仅一百余K,可以很方便的嵌入别的程序里。可扩展: Lua提供了非常易于使用的扩展接口和机制:由宿主语言(通常是C或C++)提供这些功能,Lua可以使用它们,

2020-08-23 23:14:54 528

原创 Unity在android环境下profiler的方法

Profiler在Editor模式就可以观看性能消耗,但是毕竟电脑配置高,跟手机真机环境还是有区别。实际开发中的优化还是推荐用真机测试。因为IOS一般比Android手机的配置高,在Android平台做好优化一般在IOS也没太大问题,下面介绍Profiler连接Android真机调试。 1 Android设备设置:  手机开启开发者模式和USB调试 2 Building Settings设置:Building Setting勾选Development Build 3 安装app ...

2020-08-10 16:28:28 1068

原创 腾讯2020 unreal虚幻面试题

解析一下,腾讯的unreal客户端面试题:1.lua性能优化的方向 申请的内存,是造成卡顿的原因之一,在C++与lua交互中,如果参数或者返回值有类变量,那么这个变量不会再交互的栈中存放数据,而会通过申请内存,再指定在交互,这样就造成卡顿,因此可以通过把C++的对象的每个参数分开单独传递,可以解决问题,当时我们游戏改完这个问题后,整体提升了2帧。 其实,主要是Tick循环中,减少与C++的交互,需要的数据不要每帧都去拿,其次,经常拿的一些数据(比方说主角信息),可以做一个lua缓存,...

2020-08-09 00:58:43 6425

原创 unity异步加载资源,传入for循环的i,出现数组越界

异常:ArgumentOutOfRangeException: Index was out of range. Must be non-negative and less than the size of the collection.Parameter name: index原代码: public class SkinTextureGroup : Pool<SkinTextureGroup> { public Dictionary<string,

2020-08-05 11:21:22 483

原创 unity贴图矩阵运算(旋转平移缩放)

我们在shader中对贴图处理时,有时候会有一些比较复杂的运算,比方说三角函数,开方等,一般情况下,如果可以在约上层做运算,性能会越高。C#> Vertex > fragment因此,考虑到贴图的旋转用到的三角函数,可以使用在C#中传入旋转矩阵得到,然后使用uv直接乘以矩阵就可以了。封装了vmatrix4x4,分享一下:using UnityEngine;namespace D11.Skin{ public class VMatrix { p.

2020-07-17 12:48:37 434

原创 UDP协议为什么比TCP协议快的原理

一直以来,大家知道相对于TCP协议,UDP协议快,但是具体快在哪里呢,怀着好奇的心态,研究一番,记录下来供大家学习。1.工作位置: 首先,在OSI七层模型中,TCP,UDP工作在传输层,使源端主机和目标主机上提供端到端的会话,也就是我们常说的端口号,因为ip协议可能分组经过不同的路由路径传输,因此主机的ip层不保证顺序,也不保证一定收到,因此我们在传输层就需要做到一些事情:提供端到端的数据传递 顺序保证 可靠性保证2.TCP与UDP的区别 首先为什么TCP需要连...

2020-07-11 15:38:10 2343

原创 unity 正态函数随机算法

using System;using System.Collections.Generic;using UnityEngine;namespace D11.SkinEditor{ public class UniformRandom { private const int NTAB = 32; private const int IA = 16807; private const int IM = 2147483647; .

2020-06-28 11:38:51 740

原创 unity shader变体之#pragma multi_compile 和 #pragma shader_feature

shader为什么需要变体: 写shader的人,都知道要减少if条件分支语句的使用,原因在于,当你的shader执行一条指令的时候,并不是操作一个像素,而是同时操作一组像素,并一条一条指令向下执行。如果if的两条分支都有可能执行,那么执行的逻辑就是两条分支的和,因此当if条件中仅有uniform变量和常量组成的时候,if的选择是固定的,if不会两个条件都走到,那么也就没有性能问题。但是实际问题并不是所有的条件语句都是确定性结果的,大多数我们执行的时候是需要判断动态的结果的,那么怎么办,u...

2020-06-20 15:51:09 3284

原创 Unity URP中的Post-processing

在Unity中,你可以选择不同的渲染管道。渲染管道执行一系列获取场景内容的操作,并在屏幕上显示它们。在高水平上,这些操作包括:Culling,Rendering,Post-processing。不同的渲染管道具有不同的功能和性能特征,适用于不同的游戏、应用和平台。Unity提供了以下渲染管道:内置的渲染管道:Unity的默认渲染管道。它是一个通用的呈现管道,只有有限的定制选项。 通用渲染管道(URP):一个可编写脚本的渲染管道,可以快速、轻松地定制,并允许您跨广泛的平台创建优化的图形。

2020-06-19 01:56:52 9901 8

原创 unity shader中常用的几种texture纹理blend混合方式

最近在做一个武器皮肤的系统,为了让每个玩家都获得一种独一无二的武器,我们决定给皮肤做变体生成,那么这张皮肤就不能直接用一张美术给的贴图,而要通过一些可变的参数,让每个皮肤产生不一样的效果。因此我们需要使用多张不一样的贴图根据一系列参数,混合成一张皮肤贴图。但是混合的方式多种多样,怎么才能实现比较好的效果呢,经过一段时间的学习跟实践开发,以及对一些其他游戏的研究,大致纹理的混合有以下的一些方式:方式一: 最常见的混合方式就是alpha混合,通常alpha混合的是带透明度的物体:...

2020-06-06 16:24:48 2916

原创 Unity资源加载方式示例

但凡学习unity的小伙伴,都难免要跟unity的资源打交道,但是过段时间不用就容易忘记,我也是,因此特地整理一下经常用的资源加载的方式,已供大家跟自己在以后查阅。方式1:Resources.Load这也是很常用的一种方式,不管是在运行期,还是在编辑器下,都是可以使用的。unity官方给了下面几种示例:// Load assets from the Resources folder. Ignore other named and typed assets.using Uni...

2020-05-26 23:50:37 285

原创 unity shader渲染状态的设置

在pass中,我们可以设置一些渲染状态:culling 与深度测试阶段: culling与深度测试是为了减少没必要的overdraw的,大大减少像素着色器的计算量。Cull 控制哪一面将会被剔除:Back,不渲染多边形背面(默认) Front,不渲染正面 Off,都不剔除,两面都渲染ZWrite 控制是否需要写入深度缓存,默认开启,一般渲染半透明物体的时候关闭 ZTest 控制深度测试怎么测试,默认为LEqual ZTest Less | Great...

2020-05-17 17:35:55 918 2

原创 unity shader中关于Tags的整理

在我们写unity shader的时候经常会遇到要定义一些shader tags的时候,但是又不能知道到底要设置哪些状态,有哪些状态可以设置,每次都要去网上搜索,感觉很麻烦,因此特地整理了一下,以便以后需要用的时候查阅。Unity shaderLab 中的Tags一起包括2类:ShaderLab: SubShader Tags ShaderLab: Pass Tags Own tags 一个是定义在subshade中的Tags 一个是定义在Pass中的Tags,以及可以使用自定义...

2020-05-17 15:59:49 1371

原创 unity游戏开发之移动平台下的渲染优化

最近学习unity shader,发现很多提到怎么优化shader的一些概念,但是都是零零散散, 感觉总是少点什么,似懂非懂的感觉,因此梳理了一下最近学习到的一些知识,分享给大家。对渲染流程理得不太清楚的,可以看一下我的另一篇文章,快速了解渲染管线:https://blog.csdn.net/qq_17347313/article/details/105028493 移动平台的特点:...

2020-04-26 20:38:22 582

原创 VS找不到项目“XXX”。请检测项目引用有效以及项目文件是否存在

记录一下Bug,发现其他人提交中如果修改了project工程文件,而自己的更新的时候开着VS,很容易出现项目依赖没修改成功,因此,在VS中查找GamePlay:右键选中,移除即可...

2020-04-16 14:22:12 612

原创 python中 protobuf序列化json时 使用MessageToJson中文乱码,浮点精度问题

在使用google.protobuf 的json_format.MessageToJson时,出现了中文字段变成了ascii编码了,如下:"WeaponNickName": "\u6c99\u9e70",因此查阅pythongoogle.protobuf中json_format.MessageToJson的引用关系如下:在json_format.py中有如下代码:...

2020-04-07 19:43:33 5391 2

原创 设计模式(C++)结构型简介

适配器模式使得接口不一致的类可以一起工作Adapter.h:#pragma once#include <string>using namespace std;namespace DesignMode { enum TransType { TCP_TRANS = 0, UDP_TRANS, }; class TCP { public: void...

2020-03-30 23:29:50 134

原创 设计模式(C++)创建型简介

最近在菜鸟教程了解了一些设计模式,记录一下菜鸟地址:https://www.runoob.com/design-pattern/prototype-pattern.html单例模式单例模式(Singleton Pattern)。这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。这种模式涉及到一个单一的类,该类负责创建自己的对象,同时确保只有单个对象被创建。这个类提供...

2020-03-27 12:12:33 129

原创 unity跨平台原理

一直以来很好奇,为什么unity可以跨平台开发,用了这么久还是有必要弄清楚的,所以今天特地研究了一下,记录下来,也供大家学习。Unity介绍:Unity3D主要包括两个部分:Unity Engine和Unity Editor。提供了UnityEngine.dll和UnityEditor.dll两个动态库。Unity Engine:C/C++编写,由平台相关代码,图形A...

2020-03-26 00:06:18 2006 1

原创 快速了解渲染管线

why 需要渲染: 渲染是最终使图像符合3D场景的一个阶段,通俗点来说就是把前期做好的各种模型、效果或动画的片段结合在一起,在这些过程中必然会涉及到复杂的特技和效果,以目前的计算机运算能力很难达到实时显示,所以要在编辑完图形图像后,通过调整修改得到我们所需要的最终效果进行输出,也就是渲染。cpu与gpu怎么交互的:如上图所示,cup gpu交互方行为可描述如下:...

2020-03-22 15:58:23 285

原创 unity 使用MaskableGraphic 画圆

using UnityEngine;using System.Collections;using System.Collections.Generic;using UnityEngine.UI;namespace Game.HUD{ public class PieData { public float Percent; public C...

2020-02-27 16:25:19 625

转载 unity ugui特效实现方式

原理: 将unity 粒子系统的每个粒子计算颜色,位置,以及uv计算,映射一个长方形内,继承MaskableGraphic类,并重写protected override void OnPopulateMesh(VertexHelper vh)方法,将生成的rect 通过vh.AddUIVertexQuad(_quad);画出。代码:using UnityEngine;...

2020-01-17 16:38:10 1491

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除