- 博客(353)
- 资源 (60)
- 问答 (4)
- 收藏
- 关注

原创 【Unity3D】Unity3D技术栈
本文梳理了笔者在学习 Unity3D 的过程中,对 Unity3D 的理解和学习路线,以帮助读者循序渐进地学习 Unity3D,后续笔者仍会持续更新 Unity3D 相关技术栈,并同步到本文中。
2023-01-19 00:47:49
45237
51
原创 【Android】RuntimeShader 应用
RuntimeShader 是 Android 13(T)中新增的特性,用于逐像素渲染界面,它使用 AGSL(Android Graphics Shading Language)编写着色器代码,底层基于 Skia 图形渲染引擎。官方介绍详见 →。相较于 OpenGL ES,RuntimeShader 具有以下特点。
2025-03-15 21:29:24
812
原创 【Groovy】类和对象
使用 abstract 修饰的类称为抽象类,抽象类中可以有抽象函数,这些函数被添加了 abstract 修饰符,父类不能实现,子类必须重写实现(子类如果也是抽象类除外)。抽象类不能被实例化,只能实例化其具化子类,抽象类中允许有具化的函数。@Override//def peo = new People() // 编译报错, 抽象类不能被实例化stu.say() // 打印: xiao min: Hello。
2025-03-02 17:55:50
866
原创 【Groovy】函数、闭包、泛型
如下,Integer 是 Number 的子类,Number 引用可以指向 Integer 对象,并且 Data<Number> 引用可以指向 Data<Integer> 对象,Data<Integer> 引用也可以指向 Data<Number> 对象,还可以访问、修改对象的泛型变量,这在 Java 和 Kotlin 中是不允许的。泛型的类型检查只存在于编译阶段,在源代码编译之后,不会保留任何关于泛型类型的内容,即类型擦除。当闭包入参个数只有一个时,可以省去,引用时使用 it 替代,如下。
2025-03-01 20:27:17
863
原创 【Groovy】变量和基本数据类型
Groovy 允许实例化 java.lang.String 类定义一个字符串对象,也可以实例化 groovy.lang.GString 类定义一个字符串对象,两者可以混合编程second'''def str4 = """第一行第二行"""456/// 字符串插值def str5 = "买了${count}个苹果" // 买了15个苹果单引号(')、双引号(")、三引号(''')、三双引号(""")、斜线(/)的区别如下。单引号和三引号不支持插值、转义字符(\' 和 \\ 除外)、混合编程;
2025-02-27 23:28:03
680
1
原创 【Groovy】Groovy环境搭建
Groovy 是一种基于 JVM 平台的敏捷且动态的编程语言,能与 Java 无缝集成。该语言由 James Stracham 和 Bob McWhirter 于 2003 年启动开发,在 2007 年 1 月发布第一个版本。Groovy 具有以下优势。Groovy 的语法比 Java 更加简洁,省略了繁琐的代码结构,例如分号、类型声明等,让开发者更专注于业务逻辑的实现。Groovy 是动态类型语言,无需显式声明变量类型,编译器会在运行时自动推断类型,提高了代码的灵活性和开发效率。
2025-02-24 00:44:04
532
原创 【libGDX】2D粒子系统
下载后,在命令行窗口输入以下命令打开粒子编辑器。打开粒子编辑器后,界面如下,有经典模式(Classic)和向导模式(Wizard),一般选择经典模式(本文只介绍经典模式)。经典模式界面如下,可以通过拖动这些面板之间的边框来调整它们的大小。预览窗口用于预览粒子效果,界面如下,左键单击并拖拽可以平移摄像机,右键单击可以重设粒子发射位置,右键单击并拖拽可以让粒子发射位置跟随鼠标位置变化,滑动滚轮或单击缩放按钮可以放大和缩小。预览窗口的标签含义如下。FPS:帧率,即帧 / 秒。
2025-01-25 17:35:29
878
原创 【OpenGL ES】GLSL基础语法
本文将介绍 GLSL 中数据类型、数组、结构体、宏、运算符、向量运算、矩阵运算、函数、流程控制、精度限定符、变量限定符(in、out、inout)、函数参数限定符等内容,另外提供了一个 include 工具,方便多文件管理 glsl 代码,实现代码的精简、复用。 Unity 中 Shader 介绍详见 →【Unity3D】Shader常量、变量、结构体、函数,渲染管线介绍详见 →【OpenGL ES】渲染管线。
2024-12-29 00:54:32
1384
原创 【Rive】眼睛互动动画
本文基于 Rive 社区开放的眼睛动画,进一步加工处理,实现更有趣的眼睛互动动画。原始资源见 →,效果如下。原始资源只有一只眼睛,并且没有事件交互,动画比较单一。本文在该资源的基础上进行了以下修改。绘制两只眼睛;无事件时,眼睛在微眯和张开之间循环动画;移动鼠标(或手指)时,眼睛看向鼠标(或手指)位置;鼠标(或手指)移至眼睛附近时,眼睛聚焦,眼睛和瞳孔逐渐变小;鼠标(或手指)远离眼睛时,眼睛和瞳孔逐渐恢复原来大小;单击背景时,眨下眼(逐渐闭眼,然后逐渐张开,再逐渐微眯,再张开);单击背景或鼠标(或
2024-12-12 21:57:23
817
原创 【Rive】骨骼动画
骨骼不能渲染显示,只能控制其他图形变换,具有以下特性。绑定图形:可以将图形绑定到骨骼上,使图形随骨骼移动、旋转或缩放。权重 (Weights):通过调整顶点权重,可以控制图形在骨骼运动时的变形程度,从而实现平滑的形变效果。IK(反向动力学)约束:通过操控骨骼末端来控制整个骨骼链条的姿态(如:角色开枪后,枪的震动带动手和胳膊的抖动)。
2024-12-11 00:23:45
526
原创 【Rive】波动文字
本文将使用文本修改器(Text Modifiers)做文字动画,实现文字波动效果。按以下步骤可以创建一个 Modifier Group 和 Range。部分参数的释义如下。RangeFalloff本节完整资源详见 →。
2024-12-10 00:10:07
594
原创 【Rive】事件
Rive 中事件监听器(Listener)、状态动画(Timeline)、过度动画、关键帧都可以抛出自定义事件,并且状态动画和过度动画可以在动画开始和结束的时机抛出事件。Rive 中可以创建一个监听器,监听抛出的自定义事件。需要注意:绑定的元素只能是画板,才能监听自定义事件。Android 中可以通过 RiveAnimationView 的 addEventListener 方法添加动画监听器,用于监听状态动画和过渡动画的开始和结束时机,实现动画开始和结束时的事件回调;也可以监听 Rive 事件触发的时机
2024-12-09 21:33:10
1070
原创 【Rive】Android与Rive交互
①时间线说明:Color_Red、Color_Green、Color_Blue 都只对颜色参数做动画,并且都只有一帧,对应的颜色分别是红、绿、蓝;Scale_Idle、Scale 都只对缩放参数做动画,Scale_Idle 只有一帧,值为 0,Scale 里有 3 帧,值分别为 100%、120%、100%。③Scale状态机说明:当 Trigger_Scale 被激活时,会触发一次缩放动画,Scale→Scale_Idle 过渡条件的 Exit Time 设置为 100%。文本操作的官方介绍详见 →。
2024-12-09 19:11:08
1089
1
原创 【Rive】混合动画
中介绍了 Rive 中动画的基础概念和一般动画的制作流程,本文将介绍混合动画的基础概念和一般制作流程。Unity 中混合动画介绍详见→。混合动画是指同一时刻多个动画按照一定比例同时执行,这些动画控制的动画参数往往是相同的参数。与动画图层不同,动画图层是指多个动画同时执行,互不干扰,这些动画控制的动画参数往往是不同的参数。在动画状态机窗口右键,在弹出的菜单栏中选择【Add State】创建一个新的动画节点,选中创建的动画节点,在右侧窗口选择动画混合选项卡,如下。
2024-12-07 21:50:21
485
原创 【Rive】Rive在Android上的简单应用
Rive 是一款强大的矢量图编辑器,可以设计图形、也可以制作动画。Rive 提供了矩形、圆形、三角形、多边形、星形、钢笔、文字等工具来绘制各式各样的矢量图形;提供了平移、旋转、缩放等工具对矢量图形进行各种变换;提供了骨骼、约束、时间线、状态机、过渡条件、事件监听器等工具来制作各种交互复杂、动作炫酷的动画。
2024-12-03 21:04:59
1553
1
原创 【Kotlin】select简介
协程的 select 是一种用于异步操作的选择器,它允许同时等待多个挂起函数的结果,并在其中一个完成时执行相应的操作。能够被 select 的事件都是 SelectClause,在 select.kt 中有定义,如下。
2024-04-28 01:27:49
1090
2
原创 【Kotlin】Channel简介
Channel 是一个并发安全的阻塞队列,可以通过 send 函数往队列中塞入数据,通过 receive 函数从队列中取出数据。当队列被塞满时,send 函数将被挂起,直到队列有空闲缓存;当队列空闲时,receive 函数将被挂起,直到队列中有新数据存入。Channel 中队列缓存空间的大小需要在创建时指定,如果不指定,缓存空间默认是 0。
2024-04-27 18:19:21
2008
5
原创 【Kotlin】Flow简介
Flow 是 Kotlin 标准库中的一个新的异步流处理框架,旨在简化异步数据流的操作和处理,它提供了一种声明式的方式来处理数据流。Flow 中一些接口调用有些类似 Sequence(详见 →),协程的使用详见 →。Flow 有以下特性和概念。:Flow 允许以一种非阻塞的方式处理一系列的值或事件,这使得在处理大量数据或涉及 IO 操作时能够更加高效。:只有在收集器(collector)订阅(或启动)了之后才会开始发射(emit)数据。
2024-04-24 00:08:34
3815
2
原创 【Kotlin】协程
相较于 C# 中的协程(详见 →),Kotlin 中协程更灵活,难度更大。协程是一种并发设计模式,用于简化异步编程,它允许以顺序化的方式表达异步操作,避免回调地狱等问题。使用协程,可以将异步操作的代码像同步代码一样写,而无需显式地管理线程。在 Kotlin 中,协程由 kotlinx.coroutines 库提供支持。它使用 suspend 修饰符来标记挂起函数(即可暂停执行并稍后恢复执行的函数),这使得编写异步代码更加直观和简单。协程和线程具有以下异同点。
2024-04-17 00:50:06
1740
3
原创 【Kotlin】委托模式
Kotlin 中可以通过 by 关键字实现委托,包括类委托和属性委托,属性委托包含:by T、by lazy、by Delegates.observable、by ::T、by map
2024-04-02 00:16:31
778
原创 【Kotlin】Sequence简介
序列(Sequence)是 Kotlin 中为方便操作集合及其元素而定制的接口,是一个延迟获取数据的集合,只有需要元素时才会生产元素。在处理大量数据时,序列可以显著地提升性能。Sequence 类似 Java 中的 Stream,详见 →。Sequence 有中间操作和终端操作,如下。中间操作终端操作。
2024-03-30 12:15:47
1417
原创 【Kotlin】Array简介
创建数组、初始化数组、访问数组元素、遍历元素、拼接数组、内容比较、包含判断、翻转元素、打乱元素顺序、元素排序、可变长参数函数、统计函数、二维数组
2024-03-24 16:27:54
1541
原创 【Kotlin】扩展属性、扩展函数
Kotlin 提供了扩展类或接口的操作,而无需通过类继承或使用装饰器等设计模式,来为某个类添加一些额外的属性或函数,我们只需要通过一个被称为扩展的特殊声明来完成。我们可以将那些第三方类不具备的功能强行进行扩展,方便我们的操作。类的扩展是静态的,实际上并不会修改它们原本的类,也不会将新成员插入到类中,仅仅是将我们定义的功能变得可调用,使用起来就像真的有一样。Kotlin 提供了一些泛型扩展函数(在 Standard.kt 中),如:apply、also、run、let、takeIf、takeUnless等
2024-03-20 21:48:12
1924
1
原创 【Kotlin】运算符函数、解构函数、中缀函数
说明:如果类中同时定义了 plus 和 plusAssign 运算,a += b 就会产生歧义,因为 a += b 等价于 a = a + b,编译器不知道是执行 plus 函数还是 plusAssign 函数,就会编译报错,其他运算符同理。中缀函数是使用 infix 关键字标记的函数,在使用时,可以省略点和括号,如:位运算 shl 就是一个中缀函数。函数必须满足以下条件。中缀函数调用的优先级低于算术运算符、类型转换和 rangeTo 运算符,高于布尔运算符(&&、||、is)。
2024-03-13 23:16:07
1268
1
原创 【Kotlin】类和对象
Kotlin 是面向对象编程语言,与 Java 语言类似,都有类、对象、属性、构造函数、成员函数,都有封装、继承、多态三大特性,不同点如下。Java 有静态(static)代码块,Kotlin 没有;Java 有静态(static)函数,Kotlin 没有;Java 构造函数名与类名相同,Kotlin 构造函数名为 constructor;Kotlin 有初始化代码块(init),Java 没有;Kotlin 有主构造函数,Java 没有。
2024-03-08 23:52:46
1647
1
原创 【Kotlin】Lambda表达式
Lambda 表达式中,不能直接使用 return 语句返回,需要结合标签一起使用,否则会编译报错(内联函数除外,详见 →。尾随 Lambda 表达式中,可以使用外层函数的名字作为 return 的标签名,也可以在 {} 前面自定义标签名。说明:当外层函数的最后一个参数不是函数类型,前面的某个参数是函数类型时,必须将 {} 写到 () 里面。说明:当外层函数的最后一个参数是函数类型时,可以将 {} 提到 () 外面,该语法称为“当只有一个参数时,可以使用 it 简化 Lambda 表达式,如下。
2024-03-03 23:15:02
744
原创 【Kotlin】函数
Kotlin 的内联(inline)函数可以使用 reified 关键字具化类型参数,允许在函数体内部检测泛型类型,因为这些类型信息会被编译器内嵌在调用点。但是,这只适用于内联函数,因为内联函数中的类型信息在编译时是可知的,并且实际类型会被编译到使用它们的地方。如下,Int 是 Number 的子类,Number 引用可以指向 Int 对象,但是 Data 引用不能指向 Data 对象,Data 引用也不能指向 Data 对象,该现象称为抗变。
2024-03-01 01:03:46
1526
原创 【Kotlin】流程控制
Kotlin 中选择结构主要包含 if -else、when 语句,并且可以返回结果。Kotlin 中循环结构主要包含 for、while、do-while 循环结构。另外,continue 语句可以控制跳过某次循环,break 语句可以控制跳出循环体。
2024-02-19 23:36:42
1483
1
原创 【Kotlin】变量和基本数据类型
本文介绍了Kotlin中整型(Int、Byte、Short、Long等)、浮点型(Float、Double)、字符型(Char)、字符串型(String)等基本数据类型变量及其运算符、函数等。
2024-02-08 00:17:59
2237
1
原创 【Kotlin】Kotlin环境搭建
Kotlin 是一种现代但已经成熟的编程语言,由 JetBrains 公司于 2011 年设计和开发,并在 2012 年开源,在 2016 年发布 v1.0 版本。在 2017 年,Google 宣布 Kotlin 正式成为 Android 开发语言,这进一步推动了 Kotlin 的普及和发展。Kotlin 旨在解决 Java 语言在编码效率和代码质量方面存在的问题,并且与 Java 语言完全兼容。
2024-02-05 00:58:57
3211
1
原创 【Filament】材质系统
本文主要介绍 Filament 的材质系统,官方介绍详见 →。。需要注意的是,Unity 世界空间是左手坐标系,OpenGL 和 Filament 的世界空间是右手坐标系,Filament 的世界空间坐标轴如下。读者如果对 Filament 不太熟悉,请回顾以下内容。
2024-01-16 01:05:24
1711
原创 【Filament】壁纸
本文将使用 Filament 制作壁纸。Android 中要实现自定义壁纸,需要继承 WallpaperService 和 WallpaperService.Engine,并在 onCreateEngine 方法中返回自定义 Engine 的实例。@Override@Override@Override} else {@Override读者如果对 Filament 不太熟悉,请回顾以下内容。Filament环境搭建绘制三角形绘制矩形绘制圆形绘制立方体纹理贴图。
2024-01-08 22:30:14
890
原创 【Filament】基于物理的光照(PBR)
自定义Blinn Phong光照模型中实现了基础的自定义光照,与现实的光照还是有些差别,本文将实现更逼真的光照效果,即基于物理的光照(PBR)。读者如果对 Filament 不太熟悉,请回顾以下内容。Filament环境搭建绘制三角形绘制矩形绘制圆形绘制立方体纹理贴图立方体贴图(6张图)加载obj和fbx模型自定义Blinn Phong光照模型。
2024-01-06 18:38:23
1278
原创 【Filament】自定义Blinn Phong光照模型
光照元素主要有环境光(ambient)、漫反射光(diffuse)、镜面反射光(specular),基础的光照模型主要有兰伯特(Lambert)光照模型、冯氏(Phong)光照模型和改进的冯氏(Blinn Phong)光照模型。
2024-01-06 01:13:45
1223
原创 【Filament】加载obj和fbx模型
3D 模型的常用格式主要有 obj、fbx、gltf 等,Filament 中的 filamesh.exe 工具可以将 obj、fbx 格式转换为 filamesh 格式,然后再加载显示。对于 gltf 格式模型,可以通过 ModelViewer 加载显示,这不在本文的讨论范围内。1)filamesh 简介filamesh 工具的官方介绍如下。Caution!
2024-01-05 01:35:08
1753
RuntimeShader应用
2025-03-16
libgdx实现2D粒子效果
2025-01-25
Android中基于Rive实现眼睛互动动画
2024-12-12
基于Rive骨骼动画实现绳摆动画
2024-12-11
Android中监听Rive事件回调案例
2024-12-10
Android中使用Rive实现文字波动特效
2024-12-10
Android与Rive交互应用案例
2024-12-09
Rive基于Android和Rive实现秒表
2024-12-07
Rive在Android上的简单应用
2024-12-03
使用AIDL实现进程间通讯简单案例(更新版)
2024-05-19
基于Filament实现壁纸
2024-01-08
Filament基于物理的光照(PBR)
2024-01-06
Filament自定义Blinn Phong光照模型
2024-01-06
Filament加载obj和fbx模型
2024-01-05
Filament立方体贴图(6张图)
2023-12-25
Filament纹理贴图
2023-12-23
Filament绘制立方体
2023-12-22
Filament绘制圆形(更新版)
2023-12-22
Filament绘制圆形
2023-12-21
Filament绘制矩形
2023-12-19
Filament绘制三角形
2023-12-18
libGDX加载G3DJ模型
2023-11-28
libGDX立方体手动旋转
2023-11-26
libGDX Mesh立方体贴图(6张图)
2023-11-25
libGDX Mesh纹理贴图
2023-11-25
libGDX使用Mesh绘制立方体
2023-11-25
libGDX使用Mesh绘制圆形
2023-11-25
libGDX使用Mesh绘制矩形
2023-11-25
使用Mesh绘制三角形
2023-11-25
基于libGDX实现接水游戏
2023-11-25
基于AssetBundle实现资源热更新(更新版)
2023-11-17
Libgdx全套工具包,包含gdx-setup、Particle Editor、fbx-conv、Texture Packer等
2023-11-13
基于 Unity3D 的 2 ~ 10 阶魔方实现(Windows+Android)
2023-11-05
libGDX 项目 Setup Tool (gdx-setup)
2023-09-23
Unity3D 人物行走 2D 动画
2023-09-13
UI Toolkit数据动态绑定
2023-09-12
Unity3D切换样式主题
2023-09-05
Unity3D水面特效
2023-08-22
Unity3D程序纹理简单应用
2023-08-21
Unity3D消融特效(更新版)
2023-08-14
python绘图,如何让坐标轴不自动显示加上一个数
2020-04-07
Visual C++中Gellery文件夹文件夹为空
2020-04-03
卡尔曼滤波能否做多步轨迹预测?
2020-02-06
二级和三级标题缩进不对,怎么使三级标题缩进在二级标题里面
2020-01-16
TA创建的收藏夹 TA关注的收藏夹
TA关注的人