Unity基础笔记(5)—— Unity渲染基础与动画系统

news/2024/5/17 19:04:26/文章来源:https://www.cnblogs.com/dukenone/p/16704670.html

Unity渲染基础与动画系统

Unity渲染基础

一、摄像机

1. 摄像机概念

  • 和现实中的摄像机很接近,Unity 中 Camera 组件负责将游戏画面拍摄然后投放到画面上
  • Camera 拍摄到的画面决定了 Game 面板的画面
  • 创建场景的时候,Unity 会默认创建一个摄像机,所以我们点击 Game 面板才有画面
  • 在游戏中摄像机一般是会移动的,比如第一人称游戏中摄像机会一直跟随我们的操作,摄像机的移动效果其实也是基于摄像机游戏物体的 Transform 来实现的

2. 摄像机常用设置

  1. BackGround:背景颜色,前提是不使用 Skybox

  2. Culling Mask:可以看到哪些游戏物体

  3. Field Of View:视野大小

  4. Clipping Planes:画面拍摄的最小距离以及最大距离

  5. 摄像机快速定位:我们在 Scene 面板中使用漫游的方式找到一个合适的视角,希望摄像机同样是这个视角。

    GameObject -> Align With View

    快捷键:Ctrl + Shift + F

  6. 绝大多数情况下,我们开发游戏主要会控制摄像机的移动、旋转来达到摄像机跟随、移动等效果,摄像机本身的属性一般是一开始就设置好的,所以我们现阶段不在代码中测试相机的属性修改。

二、灯光

1. 灯光的概念

  • 和现实中灯光的概念一致,灯光主要影响明暗程度以及阴影
  • 现实中存在很多种不同的光源,比如太阳、手电筒、电灯、萤火虫等等,Unity中模拟了现实中不同光源发射的灯光并将其内置成了组件的形式的存在,这就是灯光组件。

2. 灯光设置

  • 因为灯光属于常用游戏资源,在层级面板中右键 -> 创建 -> 灯光,可以选择多种类型的灯光

  • Directional:平行光,类似太阳,整个游戏世界都会被照亮。平行光的位置不会对 光影造成影响,反而是旋转会影响阴影位置。

  • Spot:聚光灯

  • Point:点光源

  • Area:面积光源,比较特别,必须烘培、只对静态物体有效。

    灯光烘培操作:Window -> Rendering -> Lighting

  • 静态物体:Game 场景中不会变化、渲染上不会实时计算的游戏物体

  • 灯光烘培:提前渲染好的,之后不再改变

3. 灯光常用属性

  1. Type:灯光类型

  2. Range:灯光范围

  3. Mode:渲染模式

    • 实时:动态的计算灯光
    • 烘培:一开始就确定好灯光,后面游戏物体走过来身上不会有光
    • 混合:静态物体一开始也确定好灯光,后面游戏物体走过来身上也会有光
  4. Intensity:灯光强度

  5. Shadow Type:阴影类型

    • No Shadows:无阴影

    • Hard Shadows:硬阴影,边角更分明,没有过渡层

    • Soft Shadows:软阴影,边缘会虚化

      (下面两个常用属性只在硬阴影和软阴影类型下才会出现)

      • Strength:阴影强度
      • Bias:倾斜,阴影与实际物体的偏移

三、Shader 概念

1. 渲染管线

渲染管线实际就是“渲染的流水线”,Unity 中主要有:

  • Builder-In Render Pipeline(内置渲染管线):默认的渲染管线
  • Universal Render Pipeline(通用渲染管线):性能较好
  • HD Render Pipeline(高清渲染管线):以画面为主,偏向高端机器和影视的渲染管线

目前阶段不需要深刻理解,可以粗暴地理解成有几种“渲染模式即可。

2. Shader 介绍

  • Shader 是渲染管线的算法片段,用于告诉图形硬件如何计算和输出图像
  • Shader 的制作一般基于某个渲染管线,不具备通用性
  • Shader 可以让模型展现出不同的效果,比如风格化、水等等

Shader入行并不是必需知识,但是对这些名词一定要有概念,知道其作用以及如何使用即可。

3. Shader 下载和使用

Shader 可在 Asset Store 中下载

使用方式:我们可以将 Shader 附加给材质球,然后材质球附加给网格渲染器。

Unity 本身也内置了一些基本 Shader

四、粒子系统

1. 粒子介绍

游戏中,下雨、下雪、法球以及一些技能效果都是基于粒子完成的。

游戏开发中,大多数情况下由特效师来完成粒子的制作。

我们重点要学习的是如何使用美术提供的粒子,而不是制作粒子。

2. 粒子常用属性

在层级面板中,右键 -> Effects -> Particle System,可以创建一个粒子游戏物体

这个游戏物体身上有一个 Particle System组件,基于这个组件可以完成粒子的创作,这个组件里面的大多数知识我们都不需要学习,但是有几个重要的参数,我们要关注一下:

  • Duration:持续时间,指多少秒后就不再发射粒子,但是不会导致已经发射的粒子消失
  • Looping:是否循环
  • Start Lifetime:粒子发射出去后,这颗粒子的存活时间
  • Play On Awake:是否立刻播放粒子
  • Stop Action:结束事件,选择 Destory 则播放完毕销毁自己

Unity动画系统

一、动画系统介绍

1. 游戏动画

游戏中的动画,一般指的其实是模型的动作,而动作主要是服务视觉,我们在数据计算上一般并不依赖动作,实际的攻击计算等一般还是使用碰撞体。

重点学习的是,如何给角色配置动作、如何切换动作、代码控制动作等等。

2. Unity 动画

模型和动作
  • 非人形角色,比如一个章鱼怪,它的动作基本上是完全为了这一个模型来设计的,无法复用到其他模型
  • 人形角色,符合标准的都可以复用,基于 Avatar
角色动作组成
  • 游戏物体上挂载 Animator 动画组件
  • Animator 组件上持有 Controller(动画控制器),Controller 上配置好动作以及动作切换逻辑
  • 利用 Animator 组件来播放动画以及切换动画

二、Unity内制作动画

选择一个具备 Animator 组件的游戏物体后切换到 Animation 面板,点击录制按钮,对物体的各方面属性进行操作,即可进行简单动画的制作。

在编辑具有 Animator 组件的父物体时,可以同时编辑子物体来实现动画的同步,而不需要单独修改子物体的动画。

三、Animator Controller

Animator Controller 是一个配置文件

  • 动画片段设置

    点击动画文件后,检查面板中可以设置该动画片段的参数。

    • Loop Time:动画是否循环播放
    • Loop Pose:是否循环姿势,让头尾连接更平滑
  • Animator 面板

  • 状态面板

    当我们选择一个状态后,检查面板中会出现这个状态的一些参数

    • Motion:这个状态具体要播放的动画文件
    • Speed:动画的播放速度,float类型
    • Mirror:镜像动画,动画左右相反
    • Transitions:该状态参与的状态转换
      • Solo:当两个状态之间有多个条件时仅此一条生效
      • Mute:禁用
  • 状态切换

  • 参数面板

    状态之间的连线,点击具体某根线后,检查面板中可以设置状态切换的具体参数。

    • Has Exit Time:播放完毕才能切换
    • Conditions:条件参数,也就是这条线什么时候起效果
  • 代码控制

    游戏运行之后,动画会自行从入口开始执行,但是我们可以获取 Animator 组件后修改参数,使动画切换。

    • 修改参数的值:SetInteger("Run", 1),对应的还有 SetBool、SetTrigger、SetFloat
    • 获取参数的值:`GetInteger("Run"),对应的还有 GetBool、GetFloat
    • Speed:整体的播放速度
    private Animator animator;
    void Start()
    {animator = GetComponent<Animator>();
    }void Update()
    {if (Input.GetKeyDown(KeyCode.Space)){animator.SetTrigger("跳");}
    }
    

四、模型资源与动画设置

大多情况下,我们需要使用美术人员提供的模型以及动画资源。在学习过程中,可以在Unity官方商店下载来使用。

Unity常用模型格式:fbx

大多数模型是先建好白模,然后贴上有贴图的材质球,最后放到project面板中变为预制体来使用的。

五、人形动画的复用性

人形角色的骨骼结构是一致的,所以具备动作的复用性。

但是这种复用是有条件的,也就是:

Avatar 映射文件:人形动作中才使用,映射人体的位置对应什么游戏物体,这样动作文件从才能正确的工作,基于此可以让动作复用

六、动画事件

自建动画:在 Animation 中添加事件

模型动画:在模型中找到动画片段,添加事件

七、角色控制器组件

1. 角色控制器概述

目前所学到的角色移动方式,主要是基于 Transform 以及 Rigidbody.MovePostion.

但 Transform 不具备物理特性,而 Rigidbody 却不稳定,很容易被弹开、穿模。

利用角色控制器组件实现角色移动是第三种方式,也是最容易上手的角色移动方式。

2. 常用属性

  • Slope Limit:控制角色最大的爬坡斜率
  • Step Offset:控制角色可以迈上最大的台阶高度
  • Skin Width:在角色的外围包裹一层”皮肤“,这层皮肤的厚度,就相当于角色身上透明的衣服,如果 Skin Width 设置为1米,那么角色当然就会“浮空”1米,一般保持默认即可。
  • Min Move Distance:最小移动距离,默认是1毫米,如果该数值过大但代码中单位移动速度很慢,角色就不会动
  • Center / Radius / Height:角色控制器组件在 Scene 面板中体现为一个“胶囊碰撞器”的形状,这也导致其他的碰撞体我们并不需要,Center 为胶囊中心点位置,Radius 为半径,Height 为高度。

3. 角色控制器控制角色移动

  • 角色控制器组件所在的游戏物体身上不需要碰撞体和刚体
  • 常用属性
    • isGrounded:是否在地面上
  • 常用方法
    • Move(Vector3 dir):和 Transform.Translate 雷同,没有重力,需要传递的是一个方向,数值的大小影响移动速度,所以需要乘上 Time.deltaTime.
    • SimpleMove(Vector3 speed):会应用重力,需要传递的是一个速度,并且本身就是按照时间来计算的,数值大小虽然也会影响移动速度,但是不会被帧率影响,所以不需要乘 Time.deltaTime.

八、案例:3D角色移动

使用角色控制器组件来控制角色位移,并且播放正确的待机或移动动画。

public class CharacterMoveTest : MonoBehaviour
{private CharacterController characterController;private Animator animator;void Start(){characterController = GetComponent<CharacterController>();animator = GetComponent<Animator>();}void Update(){//Demo1();Demo2();}// 实现基于自身坐标系的移动,不考虑旋转void Demo1(){float h = Input.GetAxis("Horizontal");float v = Input.GetAxis("Vertical");if (h != 0 || v != 0){animator.SetBool("IsWalk", true);}else{animator.SetBool("IsWalk", false);}Vector3 dir = new Vector3(h, 0, v);// 返回以transform为参考的方向,得到角色自己的前方dir = transform.TransformDirection(dir);characterController.SimpleMove(dir);}// 实现了旋转,但没有向后转身的操作,且该方法只适合固定相机在角色背后的情况private void Demo2(){float h = Input.GetAxis("Horizontal");float v = Input.GetAxis("Vertical");if (h != 0 || v != 0){animator.SetBool("IsWalk", true);}else{animator.SetBool("IsWalk", false);}Vector3 dir = new Vector3(0, 0, v);// 返回以transform为参考的方向,得到角色自己的前方dir = transform.TransformDirection(dir);characterController.SimpleMove(dir);transform.eulerAngles = new Vector3(0, transform.eulerAngles.y + h * Time.deltaTime * 120, 0);}
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.luyixian.cn/news_show_9605.aspx

如若内容造成侵权/违法违规/事实不符,请联系dt猫网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【算法刷题】链表篇-链表的回文结构

文章目录题目要求方法1&#xff1a;思路代码方法2代码题目要求 链接&#xff1a;链表的回文结构_牛客题霸_牛客网 (nowcoder.com) 1 -> 2 -> 3 -> 2 -> 1 1 -> 2 -> 2 -> 1 上面两个是回文结构 方法1&#xff1a;思路 1.遍历链表&#xff0c;把结点对应的…

网络安全基础——对称加密算法和非对称加密算法(+CA数字证书)

目录 一、数据传输时的安全特性 二、对称加密算法&#xff1a; 三、非对称加密算法 四、对称加密和非对称加密 — 融合算法&#xff1a; 五、CA数字证书&#xff1a; 一、数据传输时的安全特性 ———————————————————————————————————…

分布式进化算法

1 多解优化问题 多解优化问题是指一类具有多个最优解的复杂优化问题。多峰优化问题和多目标优化问题都是两类典型的多解优化问题&#xff0c;它们之前的统一关系&#xff0c;即都具有多个最优解。多峰优化问题要求算法找到多个具有相同适应度值得最优解&#xff0c;多目标优化问…

SpringBoot的核心原理(扒笔记记录)

这一课的主要重点&#xff1a; 自动装配以及starterJDBC数据库连接池ORM、JPA、MyBatis、Hibernate这样相关的一些技术 从Spring到SpringBoot 我们在工作中都可能用过了SpringBoot&#xff0c;特别是最近几点&#xff0c;Java开发者大军里的一员&#xff0c;我们一般可能上手就…

卷积神经网络相比循环神经网络具有哪些特征

CNN卷积神经网络结构有哪些特点&#xff1f; 局部连接&#xff0c;权值共享&#xff0c;池化操作&#xff0c;多层次结构。 1、局部连接使网络可以提取数据的局部特征&#xff1b;2、权值共享大大降低了网络的训练难度&#xff0c;一个Filter只提取一个特征&#xff0c;在整个…

Docker容器互联

前言&#xff1a; 虽然每个docker容器之间都能通过ip来进行互联&#xff0c;但当容器重新启动&#xff0c;ip就会被重新分配给重新启动的容器&#xff0c;这时同个容器由于重启导致ip不一样了&#xff0c;这时就会导致开发和运维的困难程度大大增加&#xff0c;这时候就要考虑…

springboot+学生信息管理 毕业设计-附源码191219

学生信息管理的设计与实现 摘 要 科技进步的飞速发展引起人们日常生活的巨大变化&#xff0c;电子信息技术的飞速发展使得电子信息技术的各个领域的应用水平得到普及和应用。信息时代的到来已成为不可阻挡的时尚潮流&#xff0c;人类发展的历史正进入一个新时代。在现实运用中&…

Maven下的依赖管理

依赖管理一. 使用坐标引入jar包二. 快捷方式导入jar包的坐标三. 自动导入设置四. 依赖范围一. 使用坐标引入jar包 使用坐标引入jar包的步骤&#xff1a; 在项目的 pom.xml 中编写 标签在 标签中 使用 引入坐标定义坐标的 groupId&#xff0c;artifactId&#xff0c;version 点…

用于文化遗产的VQA(基于ArtPedia数据集)

艺术 文化遗产领域 VQA parper 阅读 Visual Question Answering for Cultural Heritage 文章目录艺术 文化遗产领域 VQA parper 阅读前言方法visual Question Answering with visual and contextual questionsQuestion Classifier ModuleContextual Question Answering Module…

vue3 | HighCharts实战自定义封装之径向条形图

1.前言 目前正在做vue3的数据可视化项目&#xff0c;vue3的组合式api写法十分方便&#xff0c;可以有各种玩法&#xff0c;有兴趣的同学可以看我个人主页的其他文章。难点是在网上找了一圈的有关径向条形图的示例都没有好的解决方案&#xff0c;决心亲自下手&#xff0c;在其中…

CSP2021初赛游记

csp2022开打,把去年的游记找出来,在这里补了 CSP2021初赛游记 早上7:30去省初门口等crxis,可以和他一起做地铁去,然而最后也就3个学生,准确来说是3个学生加1个家长在等。我当时在微信里和老师说:" 老师你快点过来呀 人好多啊 一大群人在催你 浩浩荡荡 人山人海 局面…

WebKitX ActiveX 5.0.0.15221 Crack

WebKitX ActiveX 封装了 Chromium Embedded Framework (CEF3) 以用于 OLE/COM 语言。Chromium Embedded Framework 封装了 WebKit Blink HTML5 Renderer 和 Google V8 JavaScript Engine。这是一个用于商业用途的生产级稳定组件&#xff0c;将真正在您的桌面和终端应用程序中添…

内网渗透之Msf-Socks代理实战(CFS三层靶场渗透过程及思路)

前言 作者简介&#xff1a;不知名白帽&#xff0c;网络安全学习者。 博客主页&#xff1a;https://blog.csdn.net/m0_63127854?typeblog 内网渗透专栏&#xff1a;https://blog.csdn.net/m0_63127854/category_11885934.html 网络安全交流社区&#xff1a;https://bbs.csdn.ne…

【操作系统】文件系统

文章目录硬盘1 - 基本组成2 - 存储机制Linux文件系统1 - 常见文件类型2 - 文件系统的组成2.1 - 定义2.2 - 作用2.3 - 常见类型2.4 - 分配文件系统3 - 数据存储 层次3.1 - inode表3.2 - Datablock3.3 - Superblock3.4 - GDT 全局描述表4 - 虚拟文件系统 - VFS5 - 软链接与硬链接…

三十页论文与代码已更新 2022数学建模国赛C题 古代玻璃制品的成分分析与鉴别

完整文档获取方式在文章最后 完整文档获取方式在文章最后 完整文档获取方式在文章最后 问题一分析:请在观看问题一分析前先观看附件1数据集的分析与处理(在面包多附件处进行下载)。针对问题1,问题1分为三小问。 首先,需要对玻璃文物的表面风化与其玻璃类型、纹饰和颜色的…

【机器学习】最大期望算法(EM)

1. 什么是EM算法 最大期望算法&#xff08;Expectation-maximization algorithm&#xff0c;又译为期望最大化算法&#xff09;&#xff0c;是在概率模型中寻找参数最大似然估计或者最大后验估计的算法&#xff0c;其中概率模型依赖于无法观测的隐性变量。 最大期望算法经过两…

day10_类和对象的入门

软件存在的意义就是为了解决现实世界当中的问题&#xff0c;它必然模拟现实世界&#xff0c;也就是说现实世界中有什么&#xff0c;软件中就对应有什么。面向对象编程思想中关注点是“对象”或者“事物”&#xff0c;那么在编程语言当中要想创建对象则必须先有类&#xff0c;那…

C/C++语言的服务器LS调研 (Language Server 实现代码索引 跳转定义 智能提示等功能)

LS是什么 先说一下LSP&#xff08;Language Server Protocol&#xff09;&#xff0c;它是语言服务器协议&#xff0c;是一种被用于编辑器或集成开发环境 与 支持比如自动补全&#xff0c;定义跳转&#xff0c;查找所有引用等语言特性的语言服务器&#xff08;LS&#xff0c;(…

Prometheus系列第五篇一核心一ClientLib[java]系统架构

文章目录系统架构架构图架构说明源码架构总结文本协议详细介绍系统架构 架构图 架构说明 类说明CollectorRegister所有Collector的容器,exporter从CollectorRegister获取所有的Metrics度量信息Collector一个Collector为一个metrics的收集器,收集该metrics的labels对应的所有l…

MySQL查询性能优化七种武器之链路追踪

MySQL优化器可以生成Explain执行计划&#xff0c;我们可以通过执行计划查看是否使用了索引&#xff0c;使用了哪种索引&#xff1f; 但是到底为什么会使用这个索引&#xff0c;我们却无从得知。 好在MySQL提供了一个好用的工具 — optimizer trace&#xff08;优化器追踪&…