自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(241)
  • 资源 (1)
  • 收藏
  • 关注

原创 C++ 汇总

搞定技术面试:C++ 11 智能指针详解

2022-06-27 11:42:10 906

原创 C++ 类和虚函数

构造函数和析构函数可以是虚函数吗虚函数的调用通过虚表指针来指定,虚表指针包含在对象的内存空间中,它在构造函数调用后完成初始化;析构函数可以且常常是虚函数这个原理上就很好理解啦,因为此时 vtable 已经初始化了,完全可以把析构函数放在虚函数表里面来调用。C++类有继承时,析构函数必须为虚函数。如果不是虚函数,则使用时可能存在内存泄漏的问题。对象的内存大小计算https://blog.csdn.net/chenchong08/article/details/7620984空类,大

2022-06-27 11:41:03 403

原创 UE4编辑器下Tick的实现

问题:在游戏运行时,我们可以很容易通过actor的tick事件来执行一些逻辑,那如果只是想要在编辑器模式下做一些快速的预览,那如何实现一个tick呢;最简单的实现:一个普通的Actor和一个EditorUtilityActor,其中EditorUtilityActor需要设置好tick选项,并在构造函数中添加定时器,注意,只能使用SetTimerByFunctionName,不能使用;而且timer的对象需要是actor对象,所调用的函数必需勾选call in editor,否则在实际执行时并不会实际调用

2021-09-18 18:00:33 2557 1

原创 UE4编辑器扩展之生成新关卡并将配置添加到xlsx

UE4编辑器扩展之生成新关卡并自动相应配置添加到xls一、创建一个关卡资源1.1 创建UE4的资源无论是创建要给关卡、还是材质还是其它资源,逻辑基本一致,这里会给出几种资源类型创建的例子import unrealimport osimport sysdef createGenericAsset(asset_path = '', unique_name = True, asset_class = None, asset_factory = None): if unique_name:

2021-05-10 21:40:22 659 1

原创 UE4 使用蓝图进行编辑器扩展

1. 蓝图扩展1.1 蓝图扩展工具在Content Browser中创建一个EditorWidget,可以右键Run运行该资源,运行后,它就会出现在EditorUtilityWidgets类别下;可以在新创建的widget添加按钮等控件,然后执行一定的逻辑;比如,打印关卡中选中的actor名称,或者打印内容浏览器中选中的asset名称,都可以使用相应的节点得到选中的对象,然后print即可;1.2 在编辑器中调用蓝图对于继承自Actor类的蓝图,可以在函数或事件的detail面板中勾选Call

2021-05-06 20:24:53 2387

原创 UE4 Python脚本编辑器扩展

Python+编辑器扩展1. 各种菜单的扩展1.1 主菜单内添加一个子菜单mainMenu = menus.find_menu('LevelEditor.MainMenu') // 找到主菜单ownerName = mainMenu.get_name()# 该名称用于标识一个菜单下的分区名,如果menu的sectionName一致,它们会被放在一起sectionName = 'PythonTools'subMenuName = 'MenuTest'subMenuLabel = 'MenuT

2021-05-06 19:14:34 1725 6

原创 Lua字节码分析

二.lua字节码分析Linux luac命令使用详解

2021-03-23 19:56:53 4398

原创 游戏中的水体模拟与渲染技术

参考OpenGL版本的水体模拟:https://hehao98.github.io/posts/2018/03/ocean-1/水体模拟技术介绍:https://zhuanlan.zhihu.com/p/21573239

2020-12-28 18:20:13 1189

原创 Lua中模拟函数重载机制

C++中函数重载机制函数定义时的处理:编译器的函数符号命名机制,C++对代码进行编译时会根据函数名、参数列表(参数类型、数量、顺序)等对函数进行重新命名;函数调用时的处理:(我曾经错误理解为调用时的处理和处理函数定义时类似,通过判断参数类型来得到函数名进行调用,但是这种粗暴的方式会有很多逻辑漏洞,比如未考虑到有默认参数的函数调用,未考虑到编译器自动类型转换的函数调用等)在函数调用时,编译器如何判断调用的是哪个函数呢,大概过程如下:首先确定所考虑的重载函数集合,该函数集合被称为候选函数,一

2020-12-08 00:14:05 2167

原创 UE4:Unlua+Luapanda调试(含LuaSocket编译及环境配置)

UE4:Unlua+Luapanda调试一、准备工作下载lua源码:https://www.lua.org/ftp/,这里我使用5.3.5(使用lua5.4.2版本,在编译luasocket后调试ue4出现crash,原因不明)unlua并没有集成luasocket,所以我们需要自己下载并编译:https://github.com/diegonehab/luasocket,直接从github上下载即可;二、编译以下编译操作均在64位平台下进行;首先生成lua53.lib这

2020-12-07 18:04:42 3205

原创 设计模式之代理模式(Proxy Pattern)

一、代理模式概述Proxy代理模式,它指的是不需要本人亲自完成工作,而是寻找代理人帮助完成,但是代理人能代替本人做的事情是有限的,有一些问题自己无法解决还是必须要找到被代理人解决问题;为什么需要代理,举个生活的例子,打官司一般都会有代理律师,虽然我们也可以学习法律,但是成本很高,而有了律师以后,我们就不必再关心各种流程细节,但是当律师需要求证信息的时候,仍然需要被代理人配合;二、程序示例如下是模拟一个带名字的打字机,就是将文字显示到界面上;为了让代理类和被代理类具有行为的一致性,我们需要

2020-12-06 14:30:14 167

原创 UE4蓝图系统学习记录

一、初识蓝图和蓝图编辑器1.蓝图用法蓝图是游戏的可视化脚本,使用节点图来达到每个实例特有的诸多目的;2.常用蓝图类型最常用的是关卡蓝图和蓝图类;关卡蓝图:每个关卡拥有各自的关卡蓝图,可在关卡中引用并操作actor,还可以与关卡中放置的蓝图类进行交互;不可以通过编辑器接口来创建关卡蓝图;关卡蓝图UI中没有组件选项卡;蓝图类:创建可以复用的交互资源类型,必须包含所需脚本来进行交互;蓝图类是一种允许内容创建者轻松实现基于现有游戏性类添加功能的资源,它会作为类被保存在内容包中,实际上,

2020-12-04 17:10:16 959

原创 Lua可变长参数的问题方案汇总

lua中的可变长参数...不是第一类值,因此在实际应用中会遇到一些问题一、可变长参数的存储问题我们都知道,使用如下写法会导致运行报错,因为...不是一个变量,它是匿名的,不可以在不同的作用域内使用,因为编译器将无法识别...到底是哪一个作用域的;function tuple(...) return function() return ... endend如下是一个例子,我们使用trace对一个传入的函数进行包装,添加了它的执行日志,然后将其执行结果返回,这

2020-12-02 23:16:39 1262

原创 在table中存储nil值

在table中,nil不可以作为key,否则会有运行报错;而且,有时候使用#获取长度时,会因为nil而导致无法获取到正确的长度;如下,有一个函数,它是用来把参数进行反序,使用#获取长度,但是长度出现了问题;function reverse(...) local t = {...} for i = 1,#t/2 do local j = #t - i + 1 t[i],t[j] = t[j],t[i] -- swap end return tab

2020-12-01 01:59:27 670

原创 Lua 弱表

一、弱表与垃圾回收lua的垃圾回收是通过检查一个对象是否被引用来判断对象是否应当被回收的;而弱引用则是一种机制:高速lua一个引用是一个弱引用,它需要被垃圾收集器忽视,如果一个对象的所有引用都是弱引用,lua就可以回收这个对象;table中有key和value,这两者都可以包含任意类型的对象,通常,垃圾收集器不会回收一个可访问table中作为key和value的对象,这些key和value都是强引用,它们会阻止对其所引用对象的回收。在一个弱引用table中,key和value是可以被回收的,有三种弱

2020-11-08 17:49:58 927

原创 C# 装箱和拆箱

C#中值类型和引用类型都可以和object类型进行转换;装箱转换是指将一个值类型显式或隐式地转换成一个object类型;把一个值类型的值装箱,就是创建一个object类型然后将这个值复制给这个object,装箱后的object对象数据放在堆中;所谓的拆箱,就是复制堆中的对象到堆栈中,并且返回它的值;对于简单的赋值而言,装箱和拆箱过程需要进行大量的计算;装箱和拆箱的性能问题主要通过泛型来解决;...

2020-11-07 14:51:58 2048

原创 C#异步编程:TPL与Async&Await

一、TPL基础线程池所提供的抽象帮助程序员封装了线程使用的细节,使我们可以专心处理程序逻辑,而不是各种线程问题;.Net4.0引入了TPL,并在4.5进行了进一步完善;任务并行库(Task Parallel Library)可以被认为是线程池之上的又一个抽象层,它对程序员隐藏了与线程池交互的底层代码,并提供了更方便的细粒度的API;C#5.0已经内置了对TPL的支持,允许开发者使用新的await和async关键字以平滑、舒服的方式操作任务;TPL的核心概念是Task(任务),一个任务代表了一个异

2020-11-02 01:54:28 802

原创 C# foreach和迭代器

是什么让类成为集合,IEnumerable<T>.NET中的几何本质上是一个类,它实现了IEnumerable<T>或非泛型类型IEnumerable;任何一个集合如果想支持对集合执行遍历操作,就必须要实现该接口;foreach遍历数组“运行时”不是直接支持foreach语句来遍历数组,C#编译器会对代码进行必要的转换;C#编译器会用CIL来创建一个等价的for循环,注意foreach要依赖于数组的Length属性和数组索引操作符的支持,知道Length属性的值后,C

2020-11-01 19:00:05 1071

原创 Lua协程 基础和使用汇总

一、协程基础简单介绍lua协程和线程类似,拥有独立堆栈,独立局部变量;主要区别在于lua可以同时运行多个线程,但是在同一时刻只能有一个协程在运行,并且这个正在运行的协程只有在明确要求挂起的时候才会被挂起,比如调用yield,或者启动别的协程;coroutine.create(func)创建一个线程,返回一个线程实例coroutine.wrap(func)创建一个协程,但是返回的是一个函数;coroutine.resume(co,...)启动一个线程,并将参数传给调用的函数

2020-10-29 21:41:34 1673

原创 编程语言的类型系统

一、类型系统类型系统用于将编程语言中的数值和表达式归类为许多不同的类型,类型系统在各种语言之间有很大不同,最大的差异存在于编译时期的语法以及运行时期的操作方式;二、类型安全类型安全是指同一段内存在不同的地方,会被强制要求使用相同的办法来解释(内存中的数据是用类型来解释的);C语言不是类型安全的,因为同一段内存可以用不同的数据类型来解释,比如1用int来解释就是1,用boolean来解释就是true;有的语言(尤其是C和C++)允许做一些非常“不正当”的事情。但在合适的时候,其功能可能会很

2020-10-28 01:56:47 376

原创 Unity Overdraw相关

https://renderdoc.org/buildshttps://docs.unity3d.com/Manual/RenderDocIntegration.html

2020-10-27 22:38:55 3870 1

原创 Unity纹理压缩与相关优化知识汇总

https://connect.unity.com/p/shuo-shuo-unitywen-li-ya-suo-ji-zhu-yu-you-hua-yi

2020-09-30 15:46:31 2024

原创 Unity景深效果解析

景深的定义和相关参数景深是指相机对焦点前后相对清晰的成像范围。在光学中,尤其是录像或是摄影,景深用于描述在空间中,可以清楚成像的距离范围。虽然透镜只能够将光聚到某一固定的距离,远离此点则会逐渐模糊,但是在某一段特定的距离内,图像模糊的程度是肉眼无法察觉的,这段距离称之为景深。景深通常由物距、镜头焦距,以及镜头的光圈值所决定(相对于焦距的光圈大小)。除了在近距离时,一般来说景深是由物体的放大率以及透镜的光圈值决定。固定光圈值时,增加放大率,不论是更靠近拍摄物或是使用长焦距的镜头,都会减少景深的距离;减

2020-09-28 12:00:35 2510

原创 Unity PBR基础知识与实践

一、认识PBRPBR&PBS,即基于物理的渲染,它对光和材质之间的行为进行更加真实的建模,也就是基于一些物理模型而不是经验模型;Unity为我们提供了很好的封装,以至于我们不需要自己实现一套PBR渲染框架也可以实现一些PBR效果(但是这种只局限于学习研究而非生产环境),如果应用到项目中,能针对项目需要实现专门的PBR框架是很有必要的;...

2020-09-12 20:53:48 5419

原创 Unity 一些用于调试的Shader总结

前言在Shader的调试中,将数据进行可视化是常见策略,这里总结一下一些关键数据的可视化UVs的可视化UV和第二UV的可视化:Shader "Debug/UV 1" {SubShader { Pass { CGPROGRAM #pragma vertex vert #pragma fragment frag #include "UnityCG.cginc" // vertex input: posi

2020-09-11 01:06:25 1104

原创 Unity和UE4中安装Houdini Engine插件

License Administrator application and log in

2020-09-10 00:08:00 7585 4

原创 PS基础学习总结

一、在PS中查看图像&一些基础的快捷键快捷键:PS中左侧(默认)有一列使用最频繁的工具栏,它们都有自己的快捷键,基本都是取功能英文名的首字母;比如橡皮擦-C,抓手-H,旋转-R等等;图像查看部分主要参考了PS用户指南-在ps中查看图像;首先,旋转和平移的基础操作使用之上快捷键即可;图像的放大与缩小(快捷键Z)使用导航器窗口,导航器窗口中还可以显示该图片的直方图; 放大...

2020-09-04 11:55:31 774

原创 Shader中的代码优化原理分析

问题概述

2020-09-01 10:42:12 1483

原创 汇编语言之寄存器

一、寄存器介绍一个典型的CPU由运算器、控制器、寄存器组成,这些器件靠内部总线相连,在CPU中 运算器进行信息处理 寄存器进行信息存储 控制器控制各种器件进行工作 内部总线连接各种器件,进行数据传送 二、通用寄存器8086CPU的所有寄存器都是16位的,可以存放两个字节,AX,BX,CX,DX这四个寄存器通常用来存放一般性的数据,被称为通用寄存器。在8086CPU上,这四个16位寄存器都可以分为两个独立使用的8位寄存器来使用,如AX分为AH和AL;字在

2020-08-28 00:00:14 1284

原创 Unity工具 将预制体内的animator组件替换成animation

using System.Collections.Generic;using System.IO;using System.Text;using System.Text.RegularExpressions;using UnityEditor;using UnityEngine;public class GenerationAnimationWindow : EditorWindow { [MenuItem("Assets/AnimationTools/GenerateAnimati.

2020-08-27 18:38:45 1155 1

原创 Unity 将组件的数据序列化成lua文件以及反序列化

功能说明:使用最大化骨骼的时候需要添加动骨,但是对于不同的时装每个动骨组件要有不同的数据,因此希望将所有动骨的数据序列化存储到lua文件夹中,可读性好,使用xlua也易于解析,之后如果想要在原有参数上做调整,只需要将数据文件再导入或者直接修改lua文件中的某个参数即可;InspectorUI扩展:首先是写了一个InspectorUI的扩展,一个存储按钮和一个解析按钮; public override void OnInspectorGUI() { DrawBu

2020-08-25 21:35:17 911

原创 Unity 从fbx提取animclip

using UnityEngine;using UnityEditor;using System.IO;public class ArtFBX2AnimWindow : EditorWindow{ public static string assetSrcFolderPath = "Assets/Art/AvatarEquip/Animation"; public static string assetDstFolderPath = "Assets/Art/AvatarEquip.

2020-08-20 00:29:43 2394

原创 Unity Prefab批量修改

using UnityEngine;using UnityEditor;using System.IO;public class ArtActorPrefabModifyWindow : EditorWindow{ public static string assetSrcFolderPath = Application.dataPath + "/Resources/Prefabs/FashionPartPrefab"; public static string assetDst.

2020-08-20 00:27:01 1877

原创 Python脚本为unity提供资源检测

# -*- coding: utf-8 -*-import reimport osimport sysfrom PyQt5.QtWidgets import (QApplication, QWidget, QToolTip, QPushButton, QMessageBox, QDesktopWidget, QFileDialog, QLabel)from PyQt5.QtGui import (QIcon, QFont)class CheckWidget(QWidget): de.

2020-08-19 01:42:01 1212

原创 Unity 查找各种丢失的引用

usingUnityEngine;usingUnityEditor;usingSystem.Text.RegularExpressions;usingSystem.IO;usingSystem.Collections.Generic;publicclassArtPrefabAutoConfigurer:AssetPostprocessor{staticvoidOnPostprocessAllAssets(string[]importedAs...

2020-08-14 17:27:29 2567

原创 使用批处理为git hook建立软链接

一、问题来源与解决方案在另一篇文章中使用Luacheck和git hook在git pre-commit时检查lua代码规范介绍了使用git hook在提交时做一些hook,比如unity meta文件上传检测,这个很多美术同学都容易漏掉;以及引入luacheck时需要一些环境变量和luacheck的配置等;但是有几个麻烦的点:首先是配置较多比较繁琐,尤其是对非程序的同学不够友好 再者,hook文件不能加入到版本控制中,包括luacheck的配置也不能在版控中,但是我们确实需要将其进行版本控制

2020-08-05 13:55:36 613

原创 Windows下luarocks和luafilesystem的安装

一、luarocks和luafilesystem介绍luarocks是lua的一个安装第三方包的工具,如同python的pip一样luafilesystem简称lfs,是一个文件系统包,一些包的安装如luacheck会要求先安装lfs,在安装lfs的时候踩了一些坑,因此这篇文章在于避开坑,快速安装 luarocks和lfs;二、luarocks安装,官网下载相应的安装包,里面有luarocks.exe,下载以后解压,然后配置相应的环境变量,在命令行中输入luarock...

2020-08-04 13:04:27 2075

原创 使用Luacheck和git hook在git pre-commit时检查lua代码规范

https://www.jianshu.com/p/d66c2f2e3537https://zh.wikipedia.org/wiki/MinGWhttps://sourceforge.net/projects/mingw-w64/files/mingw-w64/https://blog.csdn.net/gneveek/article/details/104014569http://lua-users.org/wiki/LuaRocksConfighttps://github.c.

2020-08-04 12:37:24 1039

原创 汇编语言基础

汇编语言基础机器语言汇编语言是直接在硬件上工作的编程语言,而汇编语言的产生则要提及机器语言,在现代编程中,机器语言已经不再为开发者使用,汇编语言是开发者接触到的最底层的编程语言了。机器语言,它是机器指令的集合,每一个机器指令其实就是机器可以正确执行的指令,它本质上是一列二进制数据,计算机硬件将其转换为一列高低电平,以使计算机的电子器件受到驱动,进行运算。每一种微处理器,也就是CPU、芯片,由于硬件设计和内部结构的不同,就需要用不同的电平脉冲来控制,使它工作。所以,每一种微处理器都有自己的机器

2020-07-20 00:22:36 430

原创 Unity 内存优化之理解托管堆和本机堆

https://docs.unity3d.com/Manual/BestPracticeUnderstandingPerformanceInUnity4-1.html

2020-07-05 13:02:24 1678

ScrollView.unitypackage

Unity NGUI滚动视图场景,可配合bloghttps://blog.csdn.net/qq_36383623/article/details/99427746学习

2019-08-13

空空如也

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

TA关注的人

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