自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 Shader 透明度与 RenderTexture 的奇妙坑

文章摘要: Unity开发中,当透明Shader输出到RenderTexture时,常遇到透明度异常问题。关键在于ColorMask设置——仅RGB会导致Alpha保持清屏值0,后续使用RT时会被误判为全透明。正确做法是使用ColorMask RGBA确保写入Alpha通道,同时注意RenderTexture格式支持Alpha、清屏设置为(0,0,0,0)且无其他不透明物体干扰。核心原则:用作透明中间缓冲的RT必须包含Alpha写入,这是解决透明度问题的关键。

2025-11-30 21:59:52 931

原创 Lua一些重要知识点

本文介绍了Lua语言在游戏热更新中的优势及其面向对象实现机制。Lua凭借轻量高效、与C/C++良好互操作等特点,成为热更新的首选脚本语言。尽管没有内置class关键字,但通过表(table)、闭包(closure)和元表(metatable)机制,Lua能实现封装、继承、多态等面向对象特性。文章重点阐述了Lua"少即是多"的设计哲学,仅用table就完成其他语言需要多个关键字实现的功能,体现了其高度抽象能力。附带的链接详细解析了Lua表、元表及其面向对象实现方式。

2025-09-04 01:02:51 963

原创 Lua的魔法:怎样用一个数据结构(table)实现面向对象的特性

Lua通过表和元表巧妙模拟面向对象编程,核心是将类视为包含方法的表,对象作为类的实例。通过元表__index实现方法继承,setmetatable绑定类行为,self自动指向调用对象。支持单继承和类工厂模式,闭包可实现私有成员。这种设计体现了Lua的灵活性,仅用基本数据结构就实现了面向对象的三大特性。

2025-09-04 00:30:00 998

原创 Lua元表(Metatable)详解

Lua 元表(Metatable)是 Lua 最强大的特性之一,允许自定义 table 的行为。本文详细介绍了元表的概念、核心元方法及其应用场景: 元表本质是包含特殊键(元方法)的普通表,通过 setmetatable/getmetatable 操作 核心元方法包括: __index(访问不存在键) __newindex(写入不存在键) 运算符重载方法(__add, __sub等) __call(使表可调用) __tostring(自定义输出) 实战应用示例: 实现继承和只读表 向量运算重载 函数式对象 自

2025-09-03 23:41:16 1172

原创 Lua表(table)详解

Lua table是Lua语言中最核心的数据结构,兼具数组、哈希表和对象特性。本文基于Lua 5.1-5.4源码解析table的底层实现:采用双段存储结构(数组段存储连续整数索引,哈希段处理其他键值),通过开放寻址+内部链表解决冲突。详细介绍了table的C结构定义、插入查找流程、rehash机制及性能特性,并给出最佳实践建议:优先使用整数索引、避免稀疏数组、预分配大小等。理解table内部实现有助于编写高性能Lua代码。

2025-09-03 23:37:26 1080

原创 《UnitysShader 入门精要》 第七章 代码问题发现 法线纹理,凹凸贴图

本文分析了《Unity Shader入门精要》第七章中关于切线空间法线纹理计算的代码问题。作者发现书中手动计算法线的方法会导致光照异常,而使用Unity内置函数UnpackNormal则正常。通过分析源码发现,DXT5nm压缩格式下法线纹理数据存储为(1,y,1,x)格式,手动计算时需要先执行packednormal.x *= packednormal.w才能正确获取切线分量。修改后手动计算方法与内置函数效果一致,解决了Bump Scale参数影响光照明暗的问题。文章还推荐了两篇相关技术文章帮助理解法线贴图

2025-07-21 23:16:29 903

原创 Unity UIToolKit界面突然消失Bug

摘要:遇到UIBuilder界面点击无反应的Bug时,可在CreateGUI方法中强制关闭窗口解决。通过调用EditorWindow的Close方法(代码示例已提供),并添加Log验证执行情况。操作后删除该代码即可恢复正常界面显示。该方法临时性地强制关闭窗口,从而修复界面显示问题。

2025-06-08 00:44:59 229

原创 Libevent的使用:与redis结合构建主机间高效通信

将 Redis 异步上下文与 libevent 的事件基绑定,使 Redis 客户端能够通过 libevent 处理异步事件。-h: redis连接的地址,默认为本机,也可以连接其他机器,前提是其他主机上开启了redis服务。:发送异步命令到 Redis 服务器。:连接到指定IP和端口的Redis服务器,返回一个redisContext结构体指针。可以一对一,多对一或多对多的连接,比socket传输实现方便,灵活,易扩展。支持同步和异步操作:既支持同步操作,也支持异步操作,满足不同场景的需求。

2024-12-14 00:47:27 946

原创 Linux网络编程————之开源libevent库的学习

libevent库,介绍了event 和 bufferevent的使用,重点讲解了网络编程的函数以及怎么用libevent实现服务器

2024-09-06 16:46:31 1209

原创 Linux编程系列——epoll的使用详解(带实现案例)

epoll函数详解(带案例)

2024-09-05 10:18:25 2210

原创 2023 最新 ANDROID手机 刷机+ROOT 避坑指南

多篇文章综合,把可能遇到的问题告诉你们。2023年最新的刷机指南,专为小白准备。使用的手机是Google的Nexus5X,有些品牌手机不一定适用,具体可参照各品牌的论坛网站等。这篇文章收集了我遇到的一些问题,以及我是怎么解决的,在文中我会详细说明,应该对刚接触的小白们有帮助。

2023-09-01 23:19:39 3870 1

原创 分享:一款好用的在WINDOWS上apk逆向打包反编译软件

而在一些老一点的书籍或文章中会推荐大家使用AndroidKiller,但是androidKiller比较老,而且较长时间没有人维护,使用时也经常会出现反编译后打包不回去的情况,所以就想寻找一款好用的apk逆向工具。我觉得这个软件比较好的一点是在使用完反编译,签名,打包等功能后,会输出到对应的文件夹中,且能通过上面的导航栏直接去到对应的文件夹去找输出的结果。剩余的都是文章推荐的类似的工具,我也没使用过,大家可以使用后发表自己的体会。如果你java环境配置好的话还是打包失败的话,一定注意apk的名字,

2023-08-28 22:51:41 5344

原创 二进制逆向:简介

可执行文件名为a.out,动态链接,解释器/lib64/ld-linux-x86-64.so.2的文件输出会告诉你当加载到内存中执行时,哪个动态链接器将被用来解析动态库的最终关系。当决定运行一个二进制文件时,操作系统首先要为运行的程序创建一个进程,其中包括虚拟地址空间。随后操作系统将解释器映射到进程的虚拟内存中,他知道如何加载二进制文件并执行必要的重定位。main函数有一个符号,指定了当二进制文件加载到内存时将驻留的地址0x1135,还显示代码大小34字节,并指出你正在处理一个函数符号FUNC。

2023-07-19 17:01:29 1773

原创 Android逆向学习笔记2:APK结构(1)

class.dex:程序的可执行代码,如果开启了MutliDex,则会有多个DEX文件。AndroidManifest.xml:编译好的AXML二进制格式文件。res目录:程序中使用的资源信息。即一些图片,文字,布局等资源文件。resources.arsc:编译好的二进制格式资源信息。首先随便找一个apk文件,直接对其解压缩得到如下文件。META-INF目录:用于保存apk的签名信息。

2023-07-03 14:19:04 708 1

原创 Android逆向学习笔记1:Dalvik字节码编程练习(4)

可以在Android Studio安装目录下的\plugins\smali\lib中找到smali.jar文件。新建一个文件写入以下代码,保存为HelloWorld.smali。最后如果出现写入的字符串“HelloWorld”即为执行成功。可以使用vscode中的smali插件,有语法高亮显示。然后通过adb将这个文件放入手机的sdcard目录下。通过以下语句将smali文件转化为dex文件。再通过adb执行dex文件。

2023-07-03 13:02:04 648 1

原创 Android逆向学习笔记1:Dalvik指令集(3)

用于定义程序中用到的常量,字符串,类等数据。指令解释将数值符号扩展为32位后赋予寄存器vA将数值符号扩展为32位后赋予寄存器vAA将数值符号赋予寄存器vAA用于将数值右边的0扩展为32位后赋予寄存器vAA将数值符号扩展到64位后赋予寄存器对vAA通过字符串索引构造一个字符串,并将其赋予寄存器vAA通过字符串索引(较大)构造一个字符串,并将其赋予寄存器vAA通过类型索引获取一个类引用,并将其赋予寄存器vAA因为一个寄存器是32位,所以要先扩展到32位再赋值;

2023-06-26 19:59:19 882 1

原创 Android逆向学习笔记1:Dalvik语言基础(2)

DVM有专用的指令集和专门的指令格式DEX。其一些特点如下:1、基于寄存器的设计。方法在内存创建后有固定大小的栈帧。2、如果整数与浮点数按位表示,可以用32位寄存器来存放。3、指令流以16位无符号整型为存储单元。

2023-06-25 20:45:23 749

原创 Android逆向学习笔记1:Dalvik字节码规范(1)

Zygote创建Java虚拟机并注册JNI方法,创建服务端Socket,启动SystemServer进程。init进程是Android系统中用户空间的第一个进程,进程号为1。mul-int/2addr v0, v1:表示将v0,v1寄存器的值相乘,结果保存到v0寄存器中。常量池采用32位索引值,对类方法名,字段名,常量的寻址快;如果dx命令失败,可能是前面代码中自动加了包名,将其删去就好,或者直接复制上面代码保存。第一条指令是将v3,v4相加,结果存到v0寄存器中,add是加,int表明是整数类型。

2023-06-24 14:23:56 669 1

原创 《第一行代码》第二版关于作者Bing api无法使用的解决方案

在《第一行代码》第二版中最后一章coolweather开发中 14.5.4节 获取必应每日一图截止到2023.4.5 在访问作者提供的网站发现返回错误来获取到json数据,获取到的数据如下id=OHR.QingMing2023_ZH-CN6951199028","copyright":"杭州西湖水墨意境般的风景,浙江省,中国 (© zhangshuang/Getty Images)","copyrightlink":"https://www.bing.com/search?

2023-04-05 23:20:42 564 4

空空如也

空空如也

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

TA关注的人

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