Unity3d 周分享(18期 2019.6.1 )

这篇博客汇总了Unity3d的最新技术分享,包括Unity与Android Studio的混合使用经验、Scriptable Render Pipeline (SRP)、处理卡通渲染的技巧、阴影实现方式的探讨以及Unity中的性能优化方法。内容涉及Unity的自定义渲染管道、阴影技术、Unity Chan卡通渲染Shader、Unity的假空值机制、Draw Call与SetPass Call的优化,以及资源管理和内存分析工具的使用。此外,还提到了Unity Delayed Asset、音频播放优化、屏幕适配、性能监测和编辑器扩展等实用技巧。
摘要由CSDN通过智能技术生成

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

 

1、

1)Unity x Android Studio混用經驗分享---Laird / 果思設計 資深工程師 【台湾】

2)關於Unity快速搭建3D場景的最最最入門小技巧---Wei J / CyberTail Games Co-founder

3)如何處理出好看的卡通渲染---Kuro / 火炬 共同創辦人

https://www.youtube.com/watch?v=ZazQ9MiGEXk

常见两种方式, Android 导出 jar, .aar 为文件到Unity中作为Plugins用, 或者Unity Export Project 工程然后 安卓开发。 作者分享的是第二种。

 

 

 

2、SRP ScriptableRenderPipeline

https://github.com/Unity-Technologies/ScriptableRenderPipeline

 

 

 

 

https://unity.com/srp

利用Unity的功能自己写一个 :

https://catlikecoding.com/unity/tutorials/scriptable-render-pipeline/custom-pipeline/

https://github.com/keijiro/Retro3DPipeline

 

 

3、 在Unity中阴影的实现方式:

https://luumoon.github.io/2018/02/28/Planar-Shadow-%E5%AE%9E%E7%8E%B0%E5%8F%8A%E5%BA%94%E7%94%A8/

1) Unity自带阴影

2)Projector Shadow方式

其中有插件,如Dynamic Shadow Projector (免费)。

https://zhuanlan.zhihu.com/p/42433900 看评论好像这种方案的性能并没好出太多~~

3)Planar Shadow

听说是镇魔曲游戏使用这个方案

  1. https://forum.unity.com/threads/shader-sharing-the-most-simple-shadow-shader-planar-projection-shadowing.319830/
  2. https://github.com/ozlael/PlannarShadowForUnity
  3. http://qiankanglai.me/2016/12/23/planar-shadow/index.html

4)Unity 2017 Tutorial - Blob Shadow Projector - Fake Shadow - YouTube

就是使用Unity提供的 Projector 组件, 做假的阴影, 正常如果游戏地面平台 可以使用一个假的阴影模型, 但是效果很差。 但是都说Projector有些性能问题。 比如Unity Standard Assets 中有 Effects.unitypackage -》 Projectors -》 BlobShadowProjector.prefab

5) 直接使用一个假的模型片 (不动的npc, 小范围移动的怪(地要平),这个模型片也要高于地面一些, 简单粗暴,可以考虑使用, Unity动态合批,这种阴影都可以合并为一个DC) Unlit/Transparent shader就行

 

 

4、 Unity Chan的卡通渲染Shader, UTS已經到2.0.6版了,作者小林信行也把它和Aura 2, 一套製作環境光源和霧氣的套件整合,重新賦予2014年所發佈的演唱會專案新的感覺。

想做VTuber類型專案,一定要研究這個Shader。

https://www.youtube.com/watch?v=UqHwICpl5ps&feature=share

UTS2 v.2.0.6 : https://github.com/unity3d-jp/UnityChanToonShaderVer2_Project

Aura 2 - Volumetric Lighting & Fog :https://assetstore.unity.com/packages/tools/particles-effects/aura-2-volumetric-lighting-fog-137148

 

 

 

 

 

Unite Beijing 2018的一段Unity烘焙光照演說,仔細說明了參數設定與光照烘焙注意事項,非常值得一聽。

https://www.youtube.com/watch?v=5s2V_E125co&fbclid=IwAR1oZ3AtCq8t-3cP5QrKTXNY1UCLmTFIlbpCTGuPJFjWIV12lV6Mus7Vsfw

众多技术大牛在Unite Beijing 2018中为开发者带来了精彩的技术演讲,内容涵盖游戏开发、技术美术、工业等多个领域。错过本次大会的开发者也无需担心,Connect为大家整理了文字版演讲实录,让我们看看都有哪些内容吧!

  1. 浅谈伽玛和线性颜色空间
  2. Unity Shader着色器优化
  3. Lightmap烘焙最佳实践
  4. 解析AssetBundle https://www.youtube.com/watch?v=mMjcDjM8Fm8
  5. 玩转移动端大型世界开发 刘伟贤 ─【Unity 議程】Unity MMORPG 遊戲優化https://www.youtube.com/watch?v=Z1zE-AWgYZ4
  6. 基于照片建模的游戏制作流程
  7. Playable API:定制你的动画系统 成亮 ─ 【Unity 議程】利用 Cinemachine 實作遊戲運鏡系統 https://www.youtube.com/watch?v=3hDvBcQZxKQ
  8. Unity工业之路
  9. 使用自定义渲染纹理实现炫酷特效
  10. 未来影像,影向未来
  11. 《崩坏3》:在Unity中实现高品质的卡通渲染(上)
  12. 《崩坏3》:在Unity中实现高品质的卡通渲染(下)
  13. 育碧-《Eagle Flight》背后的研发
  14. 《旅行青蛙》小规模开发的匠心独运
  15. 江毅冰-《从AAA游戏到实时渲染的动画电影》
  16. ProBuilder快速关卡建模实践
  17. 利用Cinemachine快速创建游戏中的相机系统

 

5、

https://connect.unity.com/p/fake-nulle-a-operator-i

运算符 "??" 和 "?." 是假的空

对象存储在内存中的哪个位置?

在我更多地谈论假空值之前,我需要解释一下内存管理的方式以及特定对象存储在内存中的位置。

类的实例instancje (zwykłych)存储在哪里?

下面是我们可以在C#的帮助下创建的典型类的示例。

 class ExampleClass
    {
    }
只要我们引用它们,这些类的实例将保留在内存中。 
  ExampleClass instancja = new ExampleClass();
如果我们没有引用它们,它们将被垃圾收集器删除。这些类的实例将存在于托管内存中
  ExampleClass instancja = new ExampleClass();
        // 我赋值null因此我失去了对ExampleClass实例的引用
        instancja = null;

我赋值null因此我 对ExampleClass类实例的引用

继承自UnityEngine.Object类的类的实例存储在何处?

从UnityEngine.Object 类开始,它们继承:

  • gameObject
  • 所有组件(例如Transform,Rigidbody等)
  • 所有Asset(例如,Texture,ScriptableObject,AudioClip等)

这些对象同时在本机和托管内存中。

它是由什么产生的?

Unity编辑器是用C ++编写的。在这种语言中,已经实现了各个类和编辑器功能的操作。我们无法直接获得各个类的实现。

我们在C#中编写与我们的游戏相关的代码,因为它的简单性(相对于C ++语言)。

我们在脚本中使用的与资产,组件和游戏对象相关的类是包装器,它允许您处理实际位于本机端的实例实例。

下面是GameObject 类的示例。该类不实现gameObjects本身。它允许您管理本机端的gameObject实例并与之通信。

概括

从UnityEngine.Object 类继承的对象实例同时存在于本机和托管内存中,其他对象的实例仅存在于托管内存中。

检查对象是否存在的方法

首先让我讨论UnityEngine.Object 类中的方法。

UnityEngine.Object 上的转换 bool运算符

UnityEngine.Object 类有一个特殊的运算符,允许您检查对象是否存在。

https://docs.unity3d.com/ScriptReference/Object-operator_Object.html

using UnityEngine;
public class FakeNullTest : MonoBehaviour
{
    void Start()
    {
        GameObject gameObject = new GameObject();
        //我们可以直接将对象分配给bool值以检查它是否存在
        bool obiektIstnieje = gameObject;
        // 我们也可以直接否认对象的存在
        bool obiektNieIstnieje = !gameObject;
        // 或者将对象 放在if 中
        if (gameObject)
        {
            Debug.Log(gameObject);
        }
        //而不用直接判空
        //if (gameObject!=null)
        //{
        //}
    }
}

操作符 == 和 !=

要检查对象是否存在,我们还可以使用operator ==或!=

using UnityEngine;
public class FakeNullTest : MonoBehaviour
{
    void Start()
    {
        GameObject gameObject = new GameObject();
      // 我们检查对象是否为null
        if (gameObject!=null)
        {
            Debug.Log(gameObject);
        }
    }
}

方法函数 System.Object.ReferenceEquals() 和 System.Object.Equals()

这是另外两种检查对象是否存在的方法。

但是,正如您将立即看到的那样,对于从UnityEngine.Object 继承的对象,它们并不总是在Unity编辑器中正常工作。以下示例检查gameObject在尚未初始化时是否为null。

我们在编辑器中执行测试。

using UnityEngine;
public class FakeNullTest : Mon
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值