自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

scott.cgi

键盘敲击,字符闪耀,迭代疯狂,编译流畅——持续迭代,无情测试——我把逻辑和诗歌灌入电光火石般奔腾流淌的指令集

  • 博客(185)
  • 收藏
  • 关注

原创 MojoTween:使用「Burst、Jobs、Collections、Mathematics」优化实现的Unity顶级「Tween动画引擎」

工欲善其事,必先利其器——MojoTween助您实现动人特效。

2023-09-08 13:15:44 685

原创 「游戏引擎Mojoc」(1)简介

Mojoc 是一个开源(MIT License),跨平台,使用C语言编写的游戏引擎。基于OpenGLES3的渲染和C99的语法写成。目前,可以跨平台工作在Android和IOS上,也很容易扩展到其它平台。GitHub地址:scottcgi/Mojoc核心理念保持简单,追求简单,简单充满了力量。而简单的背后,是更多的思考,实践与重构。主要特性所有的代码实现,只是用了C语言和...

2017-10-23 10:20:37 2177

原创 「Unity3D」解决2022的PackageManager无法显示官方插件Burst和Collections的最新版本

实际上,在2020或2021版本中,可以看到两者的最新版本是。操作加载成功之后,就可以看到最新的插件版本了。非常奇怪Unity2022版本的。的最新版本,但是官方文档已经。那么解决的办法就是,手动添加。会发现插件的注册地址是。,并且可以正确安装。

2023-01-15 14:39:55 1396 2

原创 「Unity3D」设置真机满帧率(60Hz,90Hz,144Hz等)运行

如果想要Unity的真机包,满帧率运行,有两个地方需要配合设置。第一个,是图形质量(Quality)下的垂直同步(VSync Count)选择——Every B Blank。第二个,是使用代码控制运行时的帧率。Application.targetFrameRate = -1;...

2021-07-16 11:10:27 4777 3

原创 「Unity3D」真机Burst闪退崩溃:Unable to find internal function Unity.Burst.LowLevel.BurstCompilerServices

Unity,在开启了[BurstCompile]之后,编辑器可以正常运行,但在真机上会闪退,日志显示:Unable to find internal function Unity.Burst.LowLevel.BurstCompilerServices::GetOrCreateSharedMemory这是因为开启了打包选项中,剥离代码的高级水平,如下图事实上,在官方文档中就指出,High Stripping Level需要使用link.xml来定制,代码具体的剥离规则。When you sel

2021-07-16 10:55:53 1371

原创 「Unity3D」MojoUnity-TextPro:一个简洁高效的UGUI-Text图文混排(带事件处理)的扩展实现

MojoUnity-TextPro是一个UGUI-Text的一个扩展,使用<Quad/>标签实现了图文混排,以及图片添加事件处理。功能特点:实现简洁,算法高效。图片和事件可序列化到Unity Inspector上。自定定义图片标签。容易集成,容易使用。支持Unity 2018及以上版本。使用示例自定义插入标签序列化图片设置序列化事件设置运行实例实现原理**简单概括:**使用<quad/>在Text中占位,根据图片的大小动态设置<qu

2021-06-07 16:07:55 835 1

原创 「Unity3D」MojoUnity-Shake:使用PerlinNoise实现Unity通用的震动(抖动)特效工具

MojoUnity-Shake是一个动画工具,可以效果逼真地抖动float vector2 vector3类型的数值。它使用协程实现了Smooth和PerlinNoise算法,并且扩展了Transform,可以一行代码完成Position Scale Rotation的抖动动画。功能特点:两种高效算法实现,抖动效果丝滑。一行代码简单使用。可以自由扩展,实现任何组件对象的属性抖动效果。使用了BurstCompile优化。支持Unity 2018及以上版本。使用示例Position XYZ

2021-04-23 21:55:00 613

原创 「Unity3D」MojoUnity-Editor:一个简单通用的Unity属性面板(Inspector)和窗口(Window)的扩展

MojoUnity-Editor是UnityEditor的一个扩展,它可以简单快速地自定义Unity的属性面板(Inspector)和窗口(Window),它使用了一种全新的方式——跳过很多繁琐的细节,来控制Unity界面上属性的绘制与交互。具体你可以使用以下特性,来构建你复杂的属性面板和窗口:自定义属性的显示格式。自定义属性的交互逻辑。自定义数组和对象的现实和交互。自定义分组和嵌套分套的显示。自定义窗口的显示和交互。自定义窗口数据的读写。使用示例源码下载Github:

2021-04-14 17:01:15 884 2

原创 IOS 控制GLKView绘制区域,适配“刘海”不绘制

与其控制GLKView的大小,或是在游戏层面避开“刘海”,不如直接控制window大小剔除“刘海”区域,view层使用通用的绘制方案。class AppDelegate: UIResponder, UIApplicationDelegate { var window: UIWindow? func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplic

2021-02-08 19:58:04 395

原创 C# 利用元组(ValueTuple)在「堆栈」上创建数组的一个方法

通常,new[]出的数组在堆上,struct可以在堆栈上,但不能使用index索引访问,而想要在堆栈上使用index索引,可以给struct添加get索引方法,:public object this [int index] { get { throw null; }}亦或是,使用元组来进行转换,如:// ValueTuple实现了ITuple接口var values = (ITuple) (1, 2, 3);for (var i = 0; i < values.Lengt

2021-02-03 14:21:59 578

原创 「Unity3D」UGUI Text <quad/> 使用详解:一种实现图文混排的策略

首先,我们看一下官方说明。This is only useful for text meshes and renders an image inline withthe text.关键词在于:text meshes 和 image inline ——这说明,<quad/>设计是用在TextMesh而不是Text,并且它是一个文本内嵌图片,即可以自动图文混排。其次,看一下官方例子。<quad material=1 size=20 x=0.1 y=0.1 width=0.5 he

2021-01-31 12:42:25 4787 2

原创 「Unity3D」解决VS断点Could not insert breakpoint ‘xxx’: The breakpoint could not be bound问题

项目重命名,或是复制一个项目过后,可能会出现无法断点,或是仍然断点“复制”项目的问题,我们需要让unity重新生成断点信息文件。删除目录 “项目/Library/ScriptAssemblies” 里面所有的文件。然后,重启unity会自动生成里面文件。最后,第一次断点,需要等待unity项目运行,断点才会生效。...

2021-01-10 11:14:06 1228

原创 「Unity3D」使用ISerializationCallbackReceiver接口,序列化Dictionary数据

Unity无法自动序列化Dictionary数据结构,解决思路是,我们将Dictionary的数据存储在可以序列化的结构里(如List),然后通过Dictionary与可序列化结构的互操作,来完成Dictionary的存储与加载,而这个互操作的时机,就是ISerializationCallbackReceiver接口的实现。第一步实现ISerializationCallbackReceiver接口,我们需要继承MonoBehaviour,然后接口回调才会在需要的时候触发。第二步接口需要实现两个函数,

2021-01-07 15:50:37 734

原创 C# 使用md5查找文件夹内重复的文件

思路:通过文件的md5值和大小,判断文件是否相同。using System.Collections.Generic;using System.Security.Cryptography;using System.IO;public static class FileTool{ // 文件检索目录 private const string DirPath = ""; // 重复文件的存放目录 private const string SameFilesP

2020-12-03 21:54:24 1152

原创 「Unity3D」极简调用IOS Obj-C代码实现原生分享

如题,本文将会给出完整可运行的代码,以及注意事项。第一步,编写IOS端的分享代码。只有一个实现文件:SocialShare.mmextern "C"{ // 提供给Unity调用 void IOSSocialShare(const char* cText, const char* cUrl, const char* cTexData) { // 文字 NSString* textStr = [NSString stringWithUTF8

2020-11-28 21:29:46 627

原创 人工智能学习资料整理:从入门到全面了解

视频[链接] 吴恩达—机器学习(网易云课堂,入门,中文)[链接] 吴恩达—深度学习(网易云课堂,进阶,中文)[链接] 3Blue1Brown—深度学习(哔哩哔哩,深入浅出讲解,中文字幕)[链接] 谷歌—机器学习(官网,入门+运行,中文/英文)书籍[链接] 神经网络与深度学习—Neural Networks and Deep Learning(在线阅读,深入细节,英文)[链接] 深度学习—Deep Learning(在线阅读、PDF、购买书籍,基础教科书,中文/英文)[链接] 神经网络与

2020-07-31 20:55:30 433

原创 Unity3D RectTransform使用详解:布局、属性、方法

主要内容布局: Anchors,Pivot,Anchor Presets属性: offsetMax,offsetMin,sizeDelta,rect方法: SetInsetAndSizeFromParentEdge,SetSizeWithCurrentAnchorsAnchorsAnchors是在子类锚在父类上的点,因此如果没有父类,那么RectTransform属性面板上的Anc...

2020-05-09 15:15:12 1878

原创 No cached version of com.android.tools.build:gradle 3.6.1 available for offline mode解决方法

在Mac上的解决方法,按照以下步骤操作:第一, 在项目的build.gradle中添加 classpath 'com.android.tools.build:gradle:3.6.1' 。第二, 在gradle-wrapper.properties中,添加distributionUrl=https\://services.gradle.org/distributions/gradle-6.2....

2020-03-08 21:28:28 8241 11

原创 MojoJS-Animation:一个超级简洁高效的JS动画引擎,也是一个通用的Tween动画框架

MojoJS-Animation是一个简洁、高效、强大的开源JS动画引擎(Github),其功能和实现有如下特点:支持CSS Style和Transform动画。支持队列和并发动画。支持多个元素的组动画。支持动画延迟执行。支持组动画完成的事件回调(不是单个元素完成回调)。支持可配置的动画链式调用。支持标准和自定义的Tween缓动算法。首先,看两个直观的实现效果,第一个是Tran...

2020-01-29 17:48:53 1077

原创 从面向对象角度(非__proto__角度),全面解读——JS中函数与对象、Object与Function、以及原型链与继承

本文,将会抛开__proto__的存在,转而从JS语言面向对象设计的层面,去全面解读函数与对象、Object与Function、以及原型链与继承。主题目录如下:类与对象的概念JS中的对象JS中的objectJS中的函数JS中的函数与objectJS中的对象与native codeJS函数的newJS函数的prototypeJS内置函数的命名JS中的原型链JS中的继承JS...

2019-09-30 20:02:34 327

原创 更新完XCode10.3出现Failed to find or create execution context for description错误

啥也不说了,更新了XCode10.3新本版,然后原来可以编译的工程,就出现了Failed to find or create execution context for description <IBCocoaTouchPlatformToolDescription: 0x7fa8bad9a6f0>错误,而且没有解决的tip,重启XCode或是项目依旧如此,简直莫名其妙。解决的方法有...

2019-07-24 09:06:45 771

原创 IOS Swift重载preferredScreenEdgesDeferringSystemGestures属性,解决手势触摸延迟问题

自从IOS有了手势之后,在全屏的app中,屏幕的4个边缘都会默认触发系统的手势操作,然后才会把事件传递给app处理。首先触发系统的edge手势,在某些app中没有什么问题,比如返回上一级。但在有些app中,比如全屏游戏,就会带来触摸延迟——非常明显,亦或是误触Home回到了主页。IOS官方给出的解决方案就是,在UIViewController中重载preferredScreenEdgesDefe...

2019-07-21 10:16:16 2850

原创 Android OpenSLES error “too many objects” 和 “Error after prepare: 1” 问题的解决方式

在使用NDK直接调用OpenSLES实现音频的时候,很容易出现以下两种错误:(1) E/libOpenSLES(25131): Too many objects(2) E/libOpenSLES: Error after prepare: 1第一个, 是SLPlayItf对象没有及时销毁,不同的平台SLPlayItf同时支持的数量不同,大约是2-10左右,所以音频播放完成之后,需要及时销毁...

2019-03-08 20:50:10 1189

原创 Android 报错 E/libEGL: validate_display:99 error 3008 (EGL_BAD_DISPLAY) 问题的解决

在自己手动调用OpenGL的程序里,logcat总是显示E/libEGL: validate_display:99 error 3008 (EGL_BAD_DISPLAY)错误,但是不会影响程序正常的运行。在网上所搜了半天,不少人都遇到了这个问题,但都没有给出确切的原因和答案。经过一番断点排查,最终我定位到了这个错误提示的根源所在:当EGL没有初始化完成的时候,就调用了OpenGL的函数,就会...

2018-12-28 14:24:01 17228 2

原创 Github Pages + jekyll 全面介绍极简搭建个人网站和博客

文章目录第一步,建立Github仓库第二步,设置仓库开启Github Pages第三步,使用Github内置主题第四步,jekyll的目录结构第五步,jekyll的模板编程语言Liquid的使用第六步,_config.yml配置第七步,_layout模板配置本文将会全面介绍一下如何使用Github pages + jekyll搭建个人站点,所谓极简的意思就是不用使用git和本地构建jekll服务...

2018-11-30 13:54:29 3330 1

原创 「Unity3D」(12)EditorWindow使用ScriptableObject绘制界面

通常绘制EditorWindow需要手动一个个手动绘制控件和布局,但是联想到Inspector可以根据SerializedObject对象自动绘制和布局,那么如果我们可以根据SerializedObject对象来控制EditorWindow的显示,然后在此之上再进行一些自定义工作,岂不是会方便快捷很多。本文将会介绍,如何使用ScriptableObject对象的Inspector绘制,来填充E...

2018-06-04 15:12:08 3359 2

原创 「游戏引擎Mojoc」(10)Android NDK通用JNI调用Java代码封装

Mojoc提供了一个通用的工具类,来调用Android Java代码,以实现特定平台的功能。这个工具类封装了JNI使用的繁琐细和上下文对象的获取,提供了简单直接的API专注于Java类和方法的访问,并且实现了任意类型Java方法的调用。本文将会介绍以下几点:NDK NativeActivity的JNI上下文对象获取。JNI中JNIEnv指针的使用和理解。根据路径获取Java类对象。...

2018-05-20 20:19:56 475

原创 「Unity3D」(11) Inspector FadeGroup动画嵌套问题和实现Tween Ease效果

本文将讨论面板属性Inspector的动画,也就是BeginFadeGroup与EndFadeGroup,嵌套使用问题的形成和解决。以及如何应用Tween Ease的各种效果到Inspector动画控制上。FadeGroup动画嵌套当一对[BeginFadeGroup, EndFadeGroup]嵌套在,另一对[BeginFadeGroup, EndFadeGroup]之中的时候,会产...

2018-03-23 12:07:29 1007

原创 「Unity3D」(10)自定义属性面板Inspector详解

通常情况是不需要扩展属性面板的,也就是Inspector,但如果需要开发定制的工具和插件,那么就需要扩展属性面板来完成需求。本文会对自定义扩展Inspector进行全面的介绍。工具类和概念的介绍自定义Inspector有两个层面,第一个是扩展已有属性的功能,第二个是按照意图增加新的面板功能。扩展已有的功能,包括替换显示文字,动态控制可见性,增加动画,错误提示,数据的校验和限制等等。增加...

2018-03-05 11:45:57 21502 6

原创 「MojoUnityJson」C#实现超级简单和高效的JSON解析器

MojoUnityJson是使用C#实现的JSON解析器 ,算法思路来自于游戏引擎Mojoc的C语言实现Json.h。借助C#的类库,可以比C的实现更加的简洁和全面,尤其是处理Unicode转义字符(\u开头)的解析,C#的StringBuilder本身就支持了Unicode码点(code point)。MojoUnityJson使用递归下降的解析模式,核心解析代码只有450行(去掉空行可能只

2018-01-22 22:46:32 1248 1

原创 「游戏引擎Mojoc」(9)C使用二分查找实现泛型字典映射

字典映射是最基础,最重要的数据结构,通常会利用哈希表来实现。Mojoc提供了另外一种形式的实现,通过数组和二分查找策略,来完成字典数据的映射。源代码在这里:ArrayStrMap.h。原理字典映射的核心在于,如何把一个字符串,通过某个策略映射到一个唯一的标识上。利用hash算法生成hash code,然后映射到数组index上就是一种方法。Mojoc ArrayStrMap的思路很简单

2018-01-05 17:59:23 559

原创 「Unity3D」(9)自定义编辑器菜单扩展总结

添加菜单[MenuItem("Tools/MyOption")]private static void MyOption(){ // 自定义菜单Tools}[MenuItem("Tools/Sub/MyOption")]private static void MyOption(){ // 子菜单}[MenuItem("Window/AAAOption")]private

2017-12-19 15:31:29 1878

原创 「Unity3D」(8)Rigidbody2D卡顿问题和重心旋转模拟

本文主要讨论,在Unity中使用物理引擎Physics2D的三个方面的内容:如何让Rigidbody2D物理模拟看起来更加的顺滑。介绍几个造成运动卡顿的原因和解决方法。针对Rigidbody2D的重心旋转模拟。让运动更加顺滑最直接的方法,就是设置Rigidbody2D的Interpolate属性,面板属性提供了下拉选项,有None,Interpolate,Extrapolate。官方文档介绍

2017-12-13 22:45:24 4916

原创 「Unity3D」(7)协程使用3种算法实现CameraShake震屏

本文主要讨论CameraShake震屏的实现思路,但不仅限于震屏,震动算法可以震动任意属性,比如Position,Scale,Rotation,Color等等。思路震动,就是围绕某个固定点的波动,最后在回归固定点的过程。这个波动的模拟,有千千万万种,这里主要介绍3种,Random(随机),Periodic(周期函数Sin,Cos),PerlinNoise(柏林噪声)。另外,在视觉预期上,震动过程是一

2017-12-06 13:14:43 2303

原创 「游戏引擎Mojoc」(8)C实现泛型ArrayList

泛型ArrayList是基础的数据结构,然而在C的标准库里并没有提供,所以需要自己手动实现一个。Mojoc的ArrayList实现经过了实践的测试,达到了稳定和高效的状态,源码ArrayList.h。本文主要介绍实现思路和一些特性,Mojoc的泛型ArrayList主要完成了以下几个功能:存取放任意数据类型。动态内存扩展。针对栈数据与堆数据不同的存储策略。一组简洁的数据操作接口。利用宏进行

2017-12-03 16:58:00 495

原创 「Unity3D」(6)协程使用IEnumerator的几种方式

Unity 使用StartCoroutine(IEnumerator)来启动一个协程。参数IEnumerator对象,通常有三种方式获得。第一种方式,也是最常用方式,是使用带有yield指令的协程函数。private IEnumerator Start(){ yield return null;}解读一下这个yield return的几种情况:return StartCoroutine

2017-11-16 13:26:17 9455

原创 「Unity3D」(5)CanvasGroup功能和Fade动画

CanvasGroup 对于UGUI来说,提供了十分重要的便利功能,并且能够受益于Unity实现的性能优化。从命名来看Group明显是针对“批量”操作的一个概念。对于复杂的UI界面,会有意想不到的效果和效率。Alpha 能够控制所有子节点UI元素的透明度。无论界面多么的复杂,只要是Graphic的子类,都能够被控制。这省去了针对各个元素,运行时的遍历,或是设计时的配置。Interactable

2017-11-13 21:57:20 3008

原创 「Unity3D」(4)使用AnimBool自定义Inspector动画效果

Unity自己的组件,Inspector面板都有动画效果,本文将会结合UGUI中ImageEditor的动画效果,介绍一下Inspector动画效果如何实现。UGUI的源码,这里获取 UGUI,ImageEditor。首先看一下,ImageEditor面板的动画效果。ImageType的切换,会有动画显示不同的内容区域。对应源码我们看到,每个动画都要对应一个AnimBool对象。...

2017-11-08 09:56:14 2233 1

原创 「Unity3D」(3)事件系统和EventSystem详细解读

Unity的事件系统提供了多种使用方式,又和物理碰撞结合在一起,所以同样使用Unity事件处理,就能写出各种各样的风格。很多项目还会自己对事件在进行一次封装,有的还会使用第三方插件。无论是手势插件还是UI插件,都是要建立在事件系统之上的,这些插件都会各自针对事件进行封装。所以,混乱,未知,冲突在所难免。本文针对Unity2017的版本,对事件系统进行梳理和解读,然后对EventSystem的使用和最

2017-11-06 14:50:04 25202 1

原创 「Unity3D」(2)射线检测与EventSystem判断UI点击

按照传统的做法,EventSystem用做UI的事件处理,射线检测用做非UI碰撞的判断,但需要手动添加Collider。EventSystem使用了,GraphicRaycaster组件来检测UI元素的事件,其底层还是使用了射线来检测碰撞的。虽然UI组件CanvasGroup有一个BlocksRaycasts功能,但其阻挡的是UI组件之间的射线穿透。GraphicRaycaster的源码中有 var

2017-11-04 16:30:20 9749

空空如也

空空如也

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

TA关注的人

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