Unity3d 周分享(9期 2018.12.31)

本文汇总了Unity3d的若干技术要点,包括遮挡剔除对性能的影响,Unity2017.1中摄像机的Frustum Culling优化,后台编译脚本,适配iPhone X的安全区域扩展,Unity导出Android Gradle项目回调,消除CS0649警告,Unity3D LogCat扩展,编辑器扩展功能,自动属性的SerializeField使用,以及更多实用工具和技巧。
摘要由CSDN通过智能技术生成

作为搞技术类博客的csdn居然能在点击发表文章 内容全部丢失,不是第一次遇到了 ,弄一个文章浪费多长时间。  

-------------------------------------------------

选自过去1~2周的内容: https://twitter.com/unity3d   和各种其他来源吧   

懒得重新弄了, 抱歉~

 

1)、 今天看到 文档中提到

If you enable Occlusion Culling it can significantly increase performance, but it occupies more disk space and RAM because the Unity Umbra integration bakes the occlusion data during the build and Unity needs to load it from disk to RAM while loading a Scene.

如果启用遮挡剔除,它可以显着提高性能,但它占用更多磁盘空间和RAM,因为Unity Umbra集成在构建期间烘焙遮挡数据,Unity需要在加载场景时将其从磁盘加载到RAM。

不仅仅静态、动态批处理有这个问题~~~

 

2)、 Unity摄像机的 Frustum Culling 视锥体剔除。

在Unity 2017.1 中做了优化, 只会剔除Camera关心的层, 这个也是首先进行的步骤。

其中还提供了 :Camera.layerCullDistances https://docs.unity3d.com/ScriptReference/Camera-layerCullDistances.html?_ga=2.247849863.1202346539.1545618055-1366382285.1535636176 针对指定层设置剔除距离~~

 

3) 您可以在更改脚本后进行编译, 而无需将焦点返回到Unity编辑器。 “UnityCompileInBackground ”

https://github.com/baba-s/unity-compile-in-background

 

例如,如果在Visual Studio中编辑并保存代码, 可以直接编译, 不用等回到Unity中。

 

 

4)、 UGUI 扩展 'Unity-SafeAreaCanvas',可以使用对应iPhone X / XS安全区域的画布

https://github.com/nkjzm/Unity-SafeAreaCanvas

 

 

 

 

 

另外一个比较有用的项目:

https://github.com/Syy9/GameViewSizeChanger

“GameViewSize Changer”,可以在游戏视图中查看iPhone X / XS的安全区域

 

 

 

5)、 Unity在导出 Android的Gradle项目时调用“IPostGenerateGradleAndroidProject” 回调

 

https://docs.unity3d.com/ScriptReference/Android.IPostGenerateGradleAndroidProject.html

using UnityEditor.Android; using UnityEngine; public class Example : IPostGenerateGradleAndroidProject { public int callbackOrder { get { return 0; } } public void OnPostGenerateGradleAndroidProject( string path ) { Debug.Log( path ); } }

 

在生成Gradle项目和构建开始之间的期间 触发回调

调用Internal 构建 方式 不会被调用

 

 

 

6)、 如何使Console 窗口中显示的“warning CS0649: Field is never assigned to”警告无效

using UnityEngine; public class Example : MonoBehaviour { [SerializeField] private GameObject m_gameObject; private void Awake() { Debug.Log( m_gameObject ); } }

Unity Console窗口中会显示警告,因为尚未初始化应用SerializeField属性的变量 。

因此,将名为“csc.rsp”的文件添加到Unity项目中 。 写上内容 -nowarn:0649

在“csc.rsp”文件中描述的状态下编译时,不会输出上述警告

 

由于可能无法输出重要警告,我认为使用时应注意

 

 

警告不仅仅在 Unity中, 那么在 Visual Studio 上:

using UnityEngine; public class Example : MonoBehaviour { [SerializeField] private int m_value; private void Start() { Debug.Log( m_value ); } }

上面显示警告。

因此,将此脚本添加到Unity项目的“Editor”文件夹中,

关闭Visual Studio并从Unity再次启动Visual Studio。

 

using SyntaxTree.VisualStudio.Unity.Bridge;

using System.IO;

using System.Linq;

using System.Text;

using System.Xml.Linq;

using UnityEditor;

 

[InitializeOnLoad]

public static class ProjectFileHook

{

static ProjectFileHook()

{

ProjectFilesGenerator.ProjectFileGeneration += OnGeneration;

}

 

private static string OnGeneration( string name, string content )

{

var document = XDocument.Parse( content );

var ns = document.Root.Name.Namespace;

var list = document.Root

.Descendants()

.Where( x => x.Name.LocalName == "PropertyGroup" )

.Descendants()

.Where( x => x.Name == ns + "NoWarn" )

;

 

foreach ( var xe in list )

{

xe.Value = xe.Value + ";0649";

}

 

var stream = new Utf8StringWriter();

document.Save( stream );

 

return stream.ToString();

}

 

private sealed class Utf8StringWriter : StringWriter

{

public override Encoding Encoding { get { return Encoding.UTF8; } }

}

}

 

警告不会在Visual Studio中输出

由于可能无法输出重要警告,我认为使用时应注意

https://developercommunity.visualstudio.com/content

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值