发现 Unity 使用 Gradle 打安卓(Android)包时出现 OpenJDK 进程不释放内存的问题,导致打几次包机器就内存不足了。 问题复现 使用 Unity 打包安卓 apk,打包方式选择 Gradle,打包时,内存占用如下: 打包完成后,OpenJDK 进程不消失,占用内存也不吐出来: 再次打包……

在 Unity 中使用安卓 AAR/JAR 插件时,如果在主线程中调用安卓 java 方法,可以正常调用,但新开一个线程调用时,将会闪退。这里记录下解决方法。 问题复现 有如下测试代码,生成一个安卓对象,并调用其 JAVA 实例方法 TestFunc。 1.同步调用(正常) 在 Unity 主线程中调用安卓方……

之前经常需要在 Unity 里画贝塞尔曲线与 Catmull-Rom 曲线,当时特意封装了一个工具类,以方便使用。 二阶贝塞尔曲线 二阶贝塞尔曲线由起点、终点,再加一个控制点构成。曲线上任意一点的坐标与当前进度的关系如公式: 代码 public class BezierCurveTool { /// <……

很久之前某 VR 项目需要用手柄控制物体旋转、缩放等功能,并且要求有 MRTK 一样的控制框。简单说说我显示这个框以及计算缩放、旋转的思路。 画边框和控制点 生成的控制框分为两部分,一部分是线条,另一部分是供拖拽使用的控制点。 当物体发生缩放、旋转操作时,线条与控制点实际尺寸不变(即边框的物理大小不变),姿态……

之前需要做拓扑排布与流量展示,我研究了两种算法,其中一种是力导向图排布算法。我简单说说力导向图的思路以及为什么要使用 ComputeShader。 原理展示 我使用立方体代表节点,下面是两种算法的排布预览,本文只讨论后者。 1. 基于领域的排布图(本文不讨论) 2. 3D力导向排布图(排布中,暂未达到最优位置……

这是一个 ComputeShader 结合 Shader 实现粒子喷泉的例子。 通过 ComputeShader 计算喷泉粒子的位置,并通过 Shader 将其绘制出来。 效果 原理 生成指定数量具有随机速度的点数据,ComputeShader 中将其初速度与重力加速度叠加,并根据存活时间粗略计算其位置,之后……

这是一个 ComputeShader 结合 Shader 实现下雪的例子。我们通过 ComputeShader 并行计算每个雪粒子的位置,并通过 Shader 将其绘制出来。 效果 原理 通过 ComputeShder 并行计算每个粒子位置,并将 Buffer 与 Shader 共享,Shader 在对应位置……

很久之前写过一篇关于 VRTK 多 Canvas 画布重叠手柄射线穿透问题的文章,当时才疏学浅,没有找到解决方案。最近虽然不干 VR 了,但偶然研究了下,找到了比较完美的解决方案。 2023 年补充 你的需求真的非 VRTK 不可么? 都 2023 年了,别再抱着 VRTK 不放了,你现在既有现成的 XRI ……

最近在写 BUG 时经常发现 Unity 编辑器停止响应或卡死不动,凭借多年写 BUG 的经验判断,肯定是哪里有个死循环卡住了主线程。 模拟死循环 死循环(endless loop)是一种奇特的生物,它终日潜伏在年久失修的历史代码中,静静地等待出山的机会。 某天,当你无意间修改了某个参数,潜伏已久的死循环就立……

项目上要实现 Unity 真实瞄准镜的功能,其中之一就是反射式红点瞄准镜。本文分析的 Shader 以模拟反射式瞄准镜光学原理的方式实现了较为真实的效果。 效果图 该图展示了从不同角度观看红点瞄准镜的效果。 红点瞄准镜原理 反射式红点瞄准镜的特殊之处在于不管眼睛和照门等是否三点一线,只要看到红点套在目标上,就……

偶然看到一个网站有三维地形展示栏目,描述说用 Unity + 灰度图做的,看着挺有意思,就顺便研究下相关的东西。 效果图 我没有对应的实景贴图,因此使用了粒子的 Shader 做颜色渐变用于演示。 基础知识 1.点线面及Mesh 点构成线,线构成面,面及其相关顶点、额外信息等构成 Mesh。在现代 3d 渲染……