首页 > 其他分享 >【Unity编辑器】开发技巧

【Unity编辑器】开发技巧

时间:2022-11-26 18:00:12浏览次数:59  
标签:技巧 渲染 编辑器 着色器 Unity GPU 顶点 屏幕 CPU

生命周期

顺序

Awake-OnEnable-Start-FixedUpdate-Update-FixedUpdate-OnGUI-OnDisable-OnDestroy

UI

Image

Image & Raw Image


Image

Raw Image

图片源

Sprite

Texture

主要功能

常规交互;

tiling、filling等。

UV Rect,实现图片的偏移等;

可以借助render texture实现将摄像机拍摄图像投射到图片上的功能。


Texture & Image & Sprite


Sprite

Image

Texture

描述

精灵图,是Unity中Assets的一种,2D图像。

图片,是UI系统中的概念。

材质,是Unity中Assets的一种

Sprite是将Texture应用在平面的mesh上得到的对象。

如果是2D的项目,Image导入进来的时候就是Sprite格式的;如果是3D的项目,Image导入进来的时候就是Texture格式的。


Rect Transform & Transform


Rect Transform

Transform

适用对象

2D的UI

3D世界中的物体

属性

多了pivot、长宽、anchors

只有位置、旋转、缩放

在不同分辨率下保持一致性

保证UI的一致性:

  • 屏幕分辨率的自适应
  • 摄像机的size
  • Scaler Canvas中的Scale with screen size
  • Rect Transform

渲染顺序

  • Camera的Depth
  • Sorting Layer
  • Order in Layer

物理系统

物理移动方式


Transform

Character Controller

RigidBody

NavMeshAgent

移动方式

transform.Translate(Vector3)

cc.Move(Vector3)

rigidBody.AddForce(Vector3)

agent.SetDestination(targetPosition)

特点

设定移动距离

移动一段距离

添加一个某方向的力

设定导航方向

注意RigidBody和CharacterController不可以同时使用。


旋转和定位

Transform中用欧拉角的方式显示方向,但是实际存储中用的是四元数。



动画系统

动画的种类:关节动画、骨骼动画、帧动画


AI导航系统


Shader

渲染流程

GPU的图形处理流水线:顶点处理-光栅化-纹理贴图-像素处理-光栅化引擎进行输出

Render Pipeline

  • 应用阶段(CPU):
  • 准备好需要渲染的数据
  • 剔除不可见
  • 设置渲染状态(包括使用的材质、纹理、shader)
  • 输出渲染图元渲染图元可以是点、线、三角形等
  • 几何阶段(GPU):决定绘制的图元是什么,怎样绘制,在哪里绘制。重要人物就是将顶点坐标变换到屏幕空间中
  • 顶点着色器(转换位置、顶点着色)
  • 裁剪、屏幕映射
  • 输出屏幕空间的二维顶点信息、每个顶点对应的深度值,着色等相关信息
  • 光栅化阶段(GPU):用几何阶段产生的数据来产生屏幕上的像素,并且渲染出最终的图像。
  • 三角形设置
  • 三角形遍历(输出片元列表)
  • 片元着色器(插值处理)
  • 逐片元操作(模板测试、深度测试、混合)

顶点着色器

位于渲染管线的几何阶段,顶点着色器的输入来自CPU,顶点着色器的处理单位是顶点,也就是输入进来的每一个顶点都会调用一次顶点着色器。

  • 完成的工作:
  • 坐标变换:把顶点坐标从模型空间转换到齐次裁剪空间。之后硬件会做透视除法,最终得到归一化的设备坐标。
  • 逐顶点光照
  • 输入后续阶段所需的数据。

屏幕映射

这一步的输入是顶点着色器传入的变换后的齐次裁剪空间坐标,仍然是三维的。屏幕映射会将这个三维的齐次裁剪空间坐标转换成二维的屏幕坐标。

MipMap & LOD

  • LOD: levels of details, 可以将高模和低模的模型结合成一个lod的模型,实现距离近的精度高,距离远的显示低模的效果。
  • 缺陷:增加了内存
  • Mipmap:2D图片的的LOD,无序自己上传模型,可使用内嵌函数实现近清晰远模糊的效果。

LightMap

可以将静态光源的信息(颜色,阴影,方向等)存储到texture上,渲染静态的物体时,无需进行多个light pass,直接从texture中进行​​采样​​计算即可。

DrawCall

含义:CPU调用图像编程接口、以及命令GPU进行渲染的操作。

为什么DarwCall会影响帧率:每一次CPU向GPU发送内容的时候,包含数据、状态、命令等,在这一阶段,CPU需要完成的准备工作是很多的,但是GPU的渲染能力很强,因此往往是GPU渲染速度快于CPU的命令提交速度。如果DrawCall数量太多,CPU就会过载。

减少DrawCall的解决方案:批处理

由于合并是需要时间的,所以批处理更适合不会动的静态物体;如果是动态的物体,每一帧都需要重新进行合并之后再发送给GPU。

其他避免的方案:避免使用很小的网格,避免使用过多的材质。

合批

资源管理

PlayerPrefs

  • 原理:将关键数值用键值对的形式保存在本地
  • 存储位置:
  • Window平台:
  • HICU\Software[公司名称][产品名称] 项下的注册表中
  • 其中公司名称和产品名称是在“Project Settings”中设置的名称
  • Win+R运行——regedit——HKEY_CURRENT_USER——SOFTWARE——Unity——UnityEditor——公司名——产品名
  • Android:
  • /data/data/包名/shared_prefs/pkg-name.xml
  • IOS:
  • /Library/Preferences/[应用ID].plist
  • 适合场景:没有服务器的单机游戏
  • 优缺点
  • 优点:简单方便
  • 缺点:支持的数据类型太少,且每一个key只能存储一个值

动态加载资源的方式

  • Instantiate
  • AssetBundle
  • Resources.Load
  • AssetDatabase.Loadasset


标签:技巧,渲染,编辑器,着色器,Unity,GPU,顶点,屏幕,CPU
From: https://blog.51cto.com/u_15639010/5889119

相关文章

  • 四级技巧
    1.完全听懂的不要写了2.同一个单词3遍还听不出来就过3.能读懂,但听不懂→音变(连读/缩度/弱读):跟读10遍 4.听力速度跟不上→背关键句子5.看着关键词复述......
  • 【unity】socket聊天室
    前言之前接触过多人联机游戏的开发,但使用的是现成的框架。今天来使用.NET原生的socket来做一个聊天室。关于SocketSocket是什么Socket是为了方便使用TCP/IP协议栈而抽......
  • VBA 技巧二
    PublicSub技巧()'保存并关闭工作薄DimwbAsWorkbookSetwb=ThisWorkbook'可指定任意工作簿wb.Closesavechanges:=FalseSetwb=Nothing......
  • Shell调试技巧【转】
    转载自:Shell调试技巧首先,调试要比编写代码困难得多,因此,如果你尽可能聪明的编写代码,你就不会在调试的时候花费很多精力.BrianKernighanBash并不包含调试......
  • Linux基础第二章:文件压缩归档及文本编辑之神vi编辑器
    一、文件压缩及归档1、文件压缩2、归档3、解压 二、文本编辑之神vi编辑器1、vi介绍2、vi的三种模式3、vi的保存与退出(重点)4、vi使用技巧①命令模式下②末行模式......
  • Flyway Teams Edition or MySQL upgrade required: MySQL 5.6 is no longer supported
    运行项目的时候出现org.springframework.beans.factory.BeanCreationException:Errorcreatingbeanwithname'flywayInitializer'definedinclasspathresource[o......
  • .net数据库连接池配置技巧(默认值)
    以连接字符串关键字控制ConnectionPoolConnectionString属性是SQLConnection对象的一个属性,它支持一个连接串/值对,这个对是用于调整connectionpool行为的。下表是Connec......
  • VBA 技巧一
    PublicSub技巧()#判断单元格是否有公式DimmyRangeAsRangeSetmyRange=Range("A1")'指定任意单元格IfmyRange.HasFormula=TrueThen......
  • WordPress编辑器支持Word自动上传
    ​ 1.4.2之后官方并没有做功能的改动,1.4.2在word复制这块没有bug,其他版本会出现手动无法转存的情况本文使用的后台是Java。前端为Jsp(前端都一样,后台如果语言不通得自己......
  • WordPress编辑器支持Word图片粘贴
    ​ 百度ueditor新增的将word内容导入到富文本编辑框的功能怎么没有啊,...ueditor实现word文档的导入和下载功能的方法:1、UEditor没有提供word的导入功能,只能说是粘贴复......