选自过去1~2周 自己所看到外文内容:https://twitter.com/unity3d 和各种其他博客来源吧

csdn 的东西, 不想吐槽, 笔记的拷贝  还需要重新传图片,  代码排版等问题, 垃圾~

1、 看到 “Unity Asynchronous完全理解学习小组” 视频的笔记

参考视频和文章

  • 工作线程 - YouTube
  • 使用UniTask(UniRx.Async)在Unity中进行Deep Dive async / await - YouTube
  • 利用Observable进行异步处理 - YouTube
  • async / await如何工作 - YouTube
  • 关于内存节省和加速协议的新cc - Unity,或其在UniRx 5.3.0中的反映

异步处理的基础知识

特点

  • 处理不会立即返回结果
  • 您无需等待功能完成即可执行以下操作
  • 异步处理不一定是多线程的
  • 协同程序是单线程和异步的
  • 有并发执行和并行执行,同时CPU共享,每个CPU实现并行
  • 处理结束时发出消息
  • 收到邮件的收件人会做一些事情
  • 发出一条OnNext或Error消息

问题点

  • 处理执行结果
  • 串行/并行处理
  • 错误处理
  • 取消执行
  • 控制执行上下文(多线程控制)
  • 写愚蠢是无法控制的

错误处理

  • 将其发布在日志上并完成
  • 要重试
  • 回到另一个过程
  • 放弃处理
  • 抓住失败

2、 [Unity]我在iOS中将架构从Universal更改为ARM 64,并检查了可以减少多少Xcode构建时间

Architecture

构建時間

任务数

Universal

240 秒

291

ARM64

140 秒

161

*任务数量是Xcode顶部显示的数字

【Unity】我尝试通过减少Android上的Target Architectures来缩短构建时间

  • Unity版本:2018.3.7f1
  • 脚本编写后端:IL2CPP
  • 构建系统:Gradle
  • 使用空Unity项目进行验证

Architecture

构建時間

ARMv7 + x86

55 秒

只有 ARMv7

71 秒

[Unity]我试着看看通过减少Android上的Target Architectures可以减少多少应用程序容量

  • Unity版本:2018.3.7f1
  • 脚本编写后端:IL2CPP
  • 构建系统:Gradle
  • 使用空Unity项目进行验证

Architecture

容量

ARMv7 + x86

12.7 MB

只有 ARMv7

6.63 MB

3、 [Unity] “SpriteAtlasUtility.PackAllAtlases” 可以打包指定的SpriteAtlas

using UnityEditor; using UnityEditor.U2D; using UnityEngine.U2D; public static class Example { [MenuItem( "Tools/Hoge" )] private static void Hoge() { var path = "【SpriteAtlas的路径】"; var atlas = AssetDatabase.LoadAssetAtPath<SpriteAtlas>( path ); var atlases = new []{ atlas }; SpriteAtlasUtility.PackAtlases( atlases, BuildTarget.Android ); } }

https://docs.unity3d.com/2018.2/Documentation/ScriptReference/U2D.SpriteAtlasUtility.PackAtlases.html

[Unity]“SpriteAtlasUtility.PackAllAtlases”可以打包Unity项目中的所有SpriteAtlas

using UnityEditor; using UnityEditor.U2D; public static class Example { [MenuItem( "Tools/Hoge" )] private static void Hoge() { SpriteAtlasUtility.PackAllAtlases( BuildTarget.Android ); } }

https://docs.unity3d.com/2018.2/Documentation/ScriptReference/U2D.SpriteAtlasUtility.PackAllAtlases.html

4、 [Unity] Unity 2018.1 新功能在 iOS / Android 上使用 “GUIUtility.systemCopyBuffer”,可以将字符串复制到剪贴板

using UnityEngine; public class Example : MonoBehaviour { private void Awake() { GUIUtility.systemCopyBuffer = "皮卡丘"; } }

5、[Unity] Unity 2018.3新功能“Application.consoleLogPath”可以获取控制台日志的输出目标路径

using UnityEngine; public class Test : MonoBehaviour { private void Awake() {; Debug.Log( Application.consoleLogPath ); } }

平台

文字列

Windows编辑器

C:/Users/【用户名称】/AppData/Local/Unity/Editor/Editor.log

Android的

【空字符串】

iOS版

【空字符串】

https://docs.unity3d.com/2018.3/Documentation/ScriptReference/Application-consoleLogPath.html

6、 [Unity] Unity 2018.3新功能 “render outside safe area” 您可以设置安全区域外的绘图是否在Android缺口终端上完成

注意 存在类似的问题: https://issuetracker.unity3d.com/issues/android-render-outside-safe-area-setting-doesnt-work-with-portrait-or-landscape-orientation 由Unity 2019.2修正

参考: https://twitter.com/NishizakiMakoto/status/1077905123429347329/photo/1

7、 【Unity】我尝试创建一个函数来获取Android上外部缓存存储区的路径

UnityEngine.Application.temporaryCachePath

using UnityEngine; public static class AndroidUtils { public static string GetExternalCacheDir() { using ( var player = new AndroidJavaClass( "com.unity3d.player.UnityPlayer" ) ) using ( var activity = player.GetStatic<AndroidJavaObject>( "currentActivity" ) ) using ( var file = activity.Call<AndroidJavaObject>( "getExternalCacheDir" ) ) { if ( file == null ) return string.Empty; return file.Call<string>( "getAbsolutePath" ); } } }

using UnityEngine; public class Test : MonoBehaviour { private void Awake() { Debug.Log( AndroidUtils.GetExternalCacheDir() ); } }

/ storage / emulated / 0 / Android / data / [包名] /cache

【Unity】我尝试创建一个函数来获取Android上外部数据存储区的路径

UnityEngine.Application.persistentDataPath

using UnityEngine; public static class AndroidUtils { public static string GetExternalFilesDir() { using ( var player = new AndroidJavaClass( "com.unity3d.player.UnityPlayer" ) ) using ( var activity = player.GetStatic<AndroidJavaObject>( "currentActivity" ) ) using ( var file = activity.Call<AndroidJavaObject>( "getExternalFilesDir", null ) ) { if ( file == null ) return string.Empty; return file.Call<string>( "getAbsolutePath" ); } } }

using UnityEngine; public class Test : MonoBehaviour { private void Awake() { Debug.Log( AndroidUtils.GetExternalFilesDir() ); } }

/storage/emulated/0/Android/data/【包名】/files

[Unity]获取用户无法在Android上访问的内部数据存储区域的路径的功能

using UnityEngine; public static class AndroidUtils { public static string GetFileDir() { using ( var player = new AndroidJavaClass( "com.unity3d.player.UnityPlayer" ) ) using ( var activity = player.GetStatic<AndroidJavaObject>( "currentActivity" ) ) using ( var file = activity.Call<AndroidJavaObject>( "getFilesDir" ) ) { if ( file == null ) return string.Empty; return file.Call<string>( "getAbsolutePath" ); } } }

using UnityEngine; public class Test : MonoBehaviour { private void Awake() { Debug.Log( AndroidUtils.GetFileDir() ); } }

/data/data/【包名】/files

/data/user/0/【包名】/files

[Unity]获取用户无法访问Android内部缓存存储区域的路径

using UnityEngine; public static class AndroidUtils { public static string GetCacheDir() { using ( var player = new AndroidJavaClass( "com.unity3d.player.UnityPlayer" ) ) using ( var activity = player.GetStatic<AndroidJavaObject>( "currentActivity" ) ) using ( var file = activity.Call<AndroidJavaObject>( "getCacheDir" ) ) { if ( file == null ) return string.Empty; return file.Call<string>( "getAbsolutePath" ); } } }

using UnityEngine; public class Test : MonoBehaviour { private void Awake() { Debug.Log( AndroidUtils.GetCacheDir() ); } }

/data/data/【包名】/cache

/data/user/0/【包名】/cache

8、[Unity]编辑器扩展,在iOS构建之后将“DWARF”设置为Xcode项目的“调试信息格式”

using UnityEditor; using UnityEditor.Callbacks; using UnityEditor.iOS.Xcode; public static class Example { [PostProcessBuild] private static void OnPostProcessBuild( BuildTarget buildTarget, string path ) { if ( buildTarget != BuildTarget.iOS ) return; var projectPath = PBXProject.GetPBXProjectPath( path ); var project = new PBXProject(); project.ReadFromFile( projectPath ); var targetName = PBXProject.GetUnityTargetName(); var targetGuid = project.TargetGuidByName( targetName ); var configGuid = project.BuildConfigByName( targetGuid, "Debug" ); project.SetBuildPropertyForConfig( configGuid, "DEBUG_INFORMATION_FORMAT", "dwarf" ); project.WriteToFile( projectPath ); } }

  • 如果你把「Debug」设置为 「DWARF」等

在第19行 "Debug" 部分 "Release" 总和 "ReleaseForProfiling" ,

"ReleaseForRunning"

  • 如果有必要, 「DWARF with dSYM File」

https://forum.unity.com/threads/enable-dsym-through-onpostprocessbuild.415678/

9、 [Unity]在iOS构建编辑器 Xcode项目 关闭 “Enable Bitcode”

using UnityEditor; using UnityEditor.Callbacks; using UnityEditor.iOS.Xcode; public static class Example { [PostProcessBuild] private static void OnPostProcessBuild( BuildTarget buildTarget, string path ) { if ( buildTarget != BuildTarget.iOS ) return; var projectPath = PBXProject.GetPBXProjectPath( path ); var project = new PBXProject(); project.ReadFromFile( projectPath ); var target = project.TargetGuidByName( "Unity-iPhone" ); project.SetBuildProperty( target, "ENABLE_BITCODE", "NO" ); project.WriteToFile( projectPath ); } }

https://support.unity3d.com/hc/en-us/articles/207942813-How-can-I-disable-Bitcode-support-

10、 [Unity]一个脚本,可以计算包含指定文件夹中包含的所有文件的依赖关系的哈希值

https://gist.github.com/baba-s/6e4877f68514a96b7c5ce7b4c3852c8f#file-assetdirhashsample-cs

11、 [Unity]通过在iOS上禁用 加速度传感器 Accelerometer 来提高性能

https://docs.unity3d.com/Manual/iphone-iOS-Optimization.html

https://docs.unity3d.com/Manual/iphone-performance.html

12、 [Unity]“EditorUtility.CollectDependencies”,可以获取依赖于指定资产的所有资产

using UnityEditor; public static class Example { [MenuItem( "Tools/Hoge" )] private static void Hoge() { var objects = Selection.objects; var dependencies = EditorUtility.CollectDependencies( objects ); Selection.objects = dependencies; } }

https://docs.unity3d.com/2017.4/Documentation/ScriptReference/EditorUtility.CollectDependencies.html

看上方模型的依赖: 您可以获得此模型作为数组所依赖的纹理,材质,脚本,着色器,网格等

比如我看一个Prefab 的 : GameObjects, Transform等组件的包含。 与 Assets -> Select Dependences 有区别

13、【Unity】如何通过编辑器扩展更改Lighting窗口中Baked Global Illumination的开/关

using UnityEditor; using UnityEditor.SceneManagement; public static class Example { [MenuItem( "Tools/Hoge" )] private static void Hoge() { Lightmapping.bakedGI = !Lightmapping.bakedGI; // GI 设置取决于场景, 因此, 如果要保存所做的更改, 请编写如下所示的代码 // EditorSceneManager.SaveScene( EditorSceneManager.GetActiveScene() ); } }

类似的:

public static class Example { [MenuItem( "Tools/Hoge" )] private static void Hoge() { Lightmapping.realtimeGI = !Lightmapping.realtimeGI; // EditorSceneManager.SaveScene( EditorSceneManager.GetActiveScene() ); } }

14、 [Unity]如何在Windows上将Unity编辑器的Profiler连接到Android时检查要使用的IP地址

adb shell ip route

在Windows上将Unity编辑器的Profiler连接到Android并

通过从Profiler的“输入IP”指定IP地址连接到Android

我之前是到手机系统中, 设置中点击网络 信息, 查看具体的IP地址 。

XXX.XXX.XX / XX dev wlan0 proto内核范围链接src YYY.YYY.YY

在输出字符串的src之后使用IP地址

https://answers.unity.com/questions/1215054/unable-to-connect-profiler-to-android.html

15、 [Unity]如果要打包的精灵不适合Sprite Atlas会发生什么, 就是散图一张放不下, 被放到多张图集上了。

#1 中 和 #2 中是不会合并DC 的

[Unity]即使您使用的是Sprite Atlas,也不会在Frame Debugger中收集绘制调用

因为需要这个设置

16、 [Unity]移动设备支持的最大纹理尺寸 统计(2017年9月)

这个很有意义呀~~~~ 下面是2d游戏引擎论坛中的结论。

https://forum.defold.com/t/supporting-4096x4096-textures-on-different-devices/11683/14

https://webglstats.com/webgl/parameter/MAX_TEXTURE_SIZE

截至2017年9月,大多数移动终端

似乎支持4096 x 4096纹理

  • iOS:iPhone 4S或更高版本,支持iPad 2或更高版本
  • Android:支持98.4%的终端

17、https://qiita.com/3yen/items/ca906b6dec38776d7293 Shader : 尝试实现光学伪装

18、【Unity】如何获取 Hierarchy 中存在的所有游戏对象

方法一、

using System.Linq; using UnityEngine; ... var list = Resources .FindObjectsOfTypeAll<GameObject>() .Where( c => c.scene.isLoaded );

在该方法中,可以获得所有游戏对象,但是

游戏对象的顺序将是无序的

方法2、

using System.Linq; using UnityEngine; ... var list = GameObject .FindObjectsOfType<GameObject>() .Where( c => c.transform.parent == null ) .SelectMany( c => c.GetComponentsInChildren<Transform>( true ) ) .Select( c => c.gameObject ) ;

在该方法中,当存在于根的游戏对象不活动(deactive)时,不能获取游戏对象和子对象,但是

子对象的顺序与层次结构中的顺序相同。

19、[Unity]介绍“SceneViewUIOverlay”,这是一个编辑器扩展,可以在Scene视图的左上角显示缩放系数 https://gist.github.com/aholkner/a4b500a23f56cbcdb4e451cdabfc313e#file-sceneviewuioverlay-cs 而且:

您现在可以在场景视图的左上角查看缩放系数、单击缩放系数将其重置为100%

20、[Unity] Unity 2019.2.0a6新功能, 可以在Editor.log中查看场景转换所用时间的细分

https://twitter.com/PeanutBuffer/status/1105460668340359173/photo/1

LightmapEditorSettings: switching bake backend from 1 to 0. Unloading 26 Unused Serialized files (Serialized files now loaded: 0) UnloadTime: 0.438500 ms Loaded scene 'Assets/Scenes/SampleScene 1.unity' Deserialize: 1.859 ms Integration: 12.342 ms Integration of assets: 0.002 ms Thread Wait Time: 23.432 ms Total Operation Time: 37.635 ms System memory in use before: 63.2 MB. System memory in use after: 63.3 MB.

21、 Shader Graph 如何制作飘动的巨龙

讲者:Kelvin Lo/达哥

LWRP + Shader Graph PBR ShaderGraph 着色器

22、 OpenGL本身是个状态机,可藉由呼叫函式来控制各种状态。话说OpenGL的pipeline真实版相当复杂,还有一些没用过的函式。

23、 本人做了一个无聊的实验“

class Program

{

private static System.Diagnostics.Stopwatch _stopWatch;

static void Main(string[] args)

{

bool testBool = true;

_stopWatch = System.Diagnostics.Stopwatch.StartNew();

for (int i = 0; i < 2000000000; i++)

{

testBool = !testBool;

}

_stopWatch.Stop();

Console.WriteLine(string.Format("?exec?time:?{0:0.000}?(ms)", ((double)_stopWatch.ElapsedTicks / (double)System.Diagnostics.Stopwatch.Frequency) * 1000));

_stopWatch = System.Diagnostics.Stopwatch.StartNew();

for (int i = 0; i < 2000000000; i++)

{

testBool = testBool == false;

}

_stopWatch.Stop();

Console.WriteLine(string.Format("exec?time:?{0:0.000}?(ms)", ((double)_stopWatch.ElapsedTicks / (double)System.Diagnostics.Stopwatch.Frequency) * 1000));

}

}

加减法 快于 乘除法。 乘法快于除法 ~

位运算在有些时候 快于乘除法。

主要就是测试 !取反运算和 == 运算的比较。 还是有收获的

使用Slua 同样做一个测试:

string luacode = @"

local testBool = true;

for i = 1 , 1000000, 1 do

testBool = not testBool;

end

";

string luacode2 = @"

local testBool = true;

for i = 1 , 1000000, 1 do

testBool = testBool == false;

end

";

UnityEngine.Profiling.Profiler.BeginSample(" test 1");

LuaEnv.luaState.doString(luacode);

UnityEngine.Profiling.Profiler.EndSample();

UnityEngine.Profiling.Profiler.BeginSample(" test 2");

LuaEnv.luaState.doString(luacode2);

UnityEngine.Profiling.Profiler.EndSample();

是不是好无聊~~~~ 循环再大点

24、 ContextMenu 属性经常使用 但是 ContextMenuItem 都忘了。

可以在Inspector上的 字段上 右键 菜单中执行一个方法。

https://docs.unity3d.com/ScriptReference/ContextMenuItemAttribute.html

25、 一个Shader , 没有纹理实现如下动画:https://twitter.com/FreyaHolmer/status/1102990949024698368

这是一个圆形网格的例子 - 所有数学定义

•制作0到1范围的重复模式

•将其重新映射到-1到1范围

•读取该向量的长度

•重新映射以控制半径和清晰度

对于圆形排列的圆圈 - 事情变得有点复杂!

•获得片段角度

•圆角并将其转换为方向

•按组半径缩放 - 我们现在有最近的圆心

•获取从圆心到片段的距离

•重新映射

圆圈着色器代码 :

https://gist.github.com/FreyaHolmer/9f68fabca3f20170ce698569176970cb

Unity3d 周分享(13期 2019.3.23 )相关推荐

  1. Unity3d 周分享(19期 2019.6.22 )

    选自过去1~2周 自己所看到外文内容:https://twitter.com/unity3d 和各种其他博客来源吧 1. #UnityTips您知道OnOpenAsset属性吗? 它允许您在项目窗口中 ...

  2. Unity3d 周分享(23期 2019.11.10 )

    选自过去1~2周 自己所看到外文内容:https://twitter.com/unity3d 和各种其他博客来源吧 1\  如何批量删除Unity Missing 组件            Unit ...

  3. Unity3d 周分享(17期 2019.5.18 )

    选自过去1~2周 自己所看到外文内容:https://twitter.com/unity3d 和各种其他博客来源吧 1. [Unity]介绍可以在游戏画面上显示FPS,内存,音频,设备信息的" ...

  4. Unity3d 周分享(14期 2019.4.1 )

    选自过去1~2周 自己所看到外文内容:https://twitter.com/unity3d 和各种其他博客来源吧 1. 看到一个帖子: https://qiita.com/chocho/items/ ...

  5. Unity3d 周分享(18期 2019.6.1 )

    选自过去1~2周 自己所看到外文内容:https://twitter.com/unity3d 和各种其他博客来源吧 1. 1)Unity x Android Studio混用經驗分享---Laird ...

  6. Unity3d 周分享(21期 2019.7.30 )

    选自过去1~2周 自己所看到外文内容:https://twitter.com/unity3d 和各种其他博客来源吧 1. 官方文档中提到一个优化: 不知道性能到底如何~~ Mass object mo ...

  7. Unity3d 周分享(15期 2019.4.14 )

    选自过去1~2周 自己所看到外文内容:https://twitter.com/unity3d 和各种其他博客来源吧 1. 在Unity中 使用 IronPython https://qiita.com ...

  8. Unity3d 周分享(10期 2019.1.19)

    选自过去1~2周的内容: https://twitter.com/unity3d   和各种其他来源吧 1). Unity的库: 2D PSD Importer 有了它,当导入psd 文件时, 文件会 ...

  9. Unity3d 周分享(12期 2019.3.10 )

    选自过去1~2周 自己所看到外文内容: https://twitter.com/unity3d   和各种其他博客来源吧 1).使用Unity + Windows API的非矩形窗口 https:// ...

最新文章

  1. react取消所有请求_React Hooks中取消HTTP请求来避免内存泄漏
  2. linux系统编码修改
  3. 关于页面莫名空白的解决方式
  4. Windows XP修改操作系统属性中注册到中的名字
  5. 正确的 send recv 行为
  6. BIOS不支持导致Linux内核耗电增加
  7. n^n的末位数字(快速幂)
  8. org.hibernate.LazyInitializationException: failed to lazily initialize a collection of role:no sessi
  9. c 写c语言代码编辑器,最好用的c/cpp代码编辑器是vim,没有之一
  10. linux nslookup 解析不到dns_涉及DNS的简单操作,只看这一篇就够了
  11. IBM 确认裁员约 1700 人;华为新款操作系统来了!开通 5G 服务不换卡不换号 | 极客头条...
  12. java css是什么_【狂神说JAVA】CSS(通俗易懂版)
  13. android webview getusermedia,如何从Webview中访问摄像头?
  14. LeetCode No5. 最长回文子串 题解
  15. python 二进制的数为啥带0b?,怎样去掉0b?
  16. 64个数据分析常用术语
  17. vs2022安装详细
  18. 本地搭建start.spring.io
  19. STM32CubeMX Crystal/Ceramic Resontor
  20. 普元 AppServer 7.0 执行startServer.cmd启动,命令行一直启动中,server.log报错:com.primeton.appserver.l7e.exception.Impr

热门文章

  1. sql按时间取去重最近_Sql去重语句
  2. 创建基础 protractor 项目
  3. 学人工智能必备的数学课,再也不怕学AI了
  4. Excel.Application组件使用方法,适合应用于使用EXCEL组件做WEB应用开发。
  5. 十大前端开发框架(转)
  6. centos7 配置虚拟ip
  7. matlab中refcurve,利用matlab中自带的的perfcurve函数评价多分类
  8. SpringCloud【框架】
  9. SpringSecurity基础:自定义登录和登出
  10. Android 禁止状态栏下拉