【All-In-One】Unity知识从无到有
  EFTJ6596AiAP 2023年11月02日 135 0

Part 1 计算机基础部分

参见这篇总结:​​https://blog.51cto.com/u_15639010/5860957​


生命周期

顺序

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

网络部分

状态同步 & 帧同步

【All-In-One】Unity知识从无到有_数据

【版权声明】本文内容来自摩杜云社区用户原创、第三方投稿、转载,内容版权归原作者所有。本网站的目的在于传递更多信息,不拥有版权,亦不承担相应法律责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@moduyun.com

  1. 分享:
最后一次编辑于 2023年11月08日 0

暂无评论

EFTJ6596AiAP