当前位置: 首页 > article >正文

Unity自学之旅01

Unity自学之旅01

  • 📝 Unity基础操作
    • 面板基础介绍(补充)
    • GameObject 是什么?如何获取?
      • 创建C#脚本(补充)
      • 通过名称获取
      • 通过标签获取
      • 设置公共变量
      • 通过类型获取
    • 预制体和材质基础
      • 预制体
      • 材质
    • 光照基础(理论)
    • 动画基础
      • 代码动画
      • Animation和Animator
  • 📎 参考文章

📝 Unity基础操作

面板基础介绍(补充)

在这里插入图片描述

一、Hierarchy 面板

  1. 功能
    • 显示当前场景中的所有游戏对象,包括游戏对象的层次结构。
    • 可以创建新的游戏对象,通过点击 Create 菜单,选择不同的类型,如 3D 对象、2D 对象、光照、UI 元素等。
    • 可以对游戏对象进行重命名、复制、删除操作,还可以通过拖放操作来改变对象的层次关系,例如将一个子对象拖放到另一个父对象下,以创建父子关系。
    • 游戏对象的顺序会影响渲染顺序,通常列表中靠上的对象会先渲染,可能会影响遮挡关系。

二、Scene 面板

  1. 功能
    • 是场景的主要编辑窗口,允许开发者可视化地查看和操作场景中的游戏对象。
    • 可以选择不同的视图模式,如透视视图、正交视图,以不同的角度观察场景。
    • 可以使用各种工具,如移动工具、旋转工具、缩放工具、矩形工具等,来操作游戏对象的位置、旋转和大小。
    • 提供了一个导航工具,可以缩放、平移和旋转场景视图,以便更好地查看场景的不同部分。
    • 可以使用 Gizmos 显示一些辅助信息,如光照范围、碰撞器范围等,方便调试和编辑。
      在这里插入图片描述

三、Game 面板

  1. 功能
    • 是游戏的预览窗口,显示游戏运行时的效果,包括渲染的场景、UI 元素、动画等。
    • 可以在不同的分辨率和显示比例下测试游戏,检查游戏在不同设备上的显示效果。
    • 可以通过点击播放按钮来运行游戏,查看游戏的实际运行效果,并且可以在游戏运行时暂停、单步执行,以便调试和优化。
      在这里插入图片描述

四、Project 面板

  1. 功能
    • 存储了项目的所有资源,包括预制体、材质、纹理、脚本、动画、音频等。
    • 可以创建文件夹,将不同类型的资源分类存储,便于管理和查找。
    • 可以通过搜索功能快速找到所需的资源,还可以将资源从 Project 面板拖放到 HierarchyScene 面板,将资源添加到场景中,如将预制体实例化到场景中,将材质应用到对象上。

五、Inspector 面板

  1. 功能
    • 当在 HierarchyScene 面板中选中一个游戏对象或在 Project 面板中选中一个资源时,Inspector 面板会显示该对象或资源的详细信息。
    • 对于游戏对象,会显示其所有组件,如 TransformRendererCollider 等,可以修改这些组件的属性,如调整 Transform 的位置、修改 Renderer 的材质。
    • 对于资源,会显示其特定的属性,如材质的颜色、纹理的属性等,可以对其进行修改和编辑。

六、Animator 面板

  1. 功能
    • 主要用于管理动画控制器(Animator Controller)。
    • 可以创建和编辑动画状态机,添加动画状态,设置状态之间的过渡条件。
    • 可以查看和编辑动画参数,如 floatintbooltrigger 等,这些参数可以用来控制动画的切换和行为。
      在这里插入图片描述

七、Animation 面板

  1. 功能
    • 用于创建和编辑动画剪辑(Animation Clip)。
    • 可以设置关键帧,为不同的属性添加关键帧,如为 Transform 的位置、旋转、缩放添加关键帧,以实现物体的运动。
    • 可以使用曲线编辑器调整关键帧之间的插值曲线,使动画更加流畅和自然。

八、Console 面板

  1. 功能
    • 显示 Unity 运行时的日志信息,包括错误消息、警告消息和普通日志。
    • 可以帮助开发者调试代码和查找问题,当代码中使用 Debug.Log 输出信息时,会显示在 Console 面板中。
    • 可以筛选不同类型的消息,如仅查看错误消息或警告消息,以便更有针对性地解决问题。

GameObject 是什么?如何获取?

在 Unity 中,GameObject 是最基本的对象,它是所有 Unity 场景中实体的基础。可以把它想象成一个容器,能够容纳各种组件(Component),这些组件共同决定了该 GameObject 的行为和外观。

例如,一个 GameObject 可以添加 Transform 组件来确定其在场景中的位置、旋转和缩放,添加 Renderer 组件来决定其如何显示,添加 Collider 组件来处理碰撞等等。

创建C#脚本(补充)

在这里插入图片描述

通过名称获取

GameObject.Find() 方法通过名称查找场景中的 GameObject。

在这里插入图片描述

需要注意的是,GameObject.Find() 方法在场景中查找对象时,如果场景中存在多个相同名称的对象,它只会返回第一个找到的。而且它在性能上相对较差,不适合频繁调用,尤其是在场景对象较多的情况下.

通过标签获取

使用 GameObject.FindGameObjectWithTag() 方法可以通过标签查找 GameObject。

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

设置公共变量

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

通过类型获取

使用 Object.FindObjectOfType<T>() 可以查找场景中第一个具有特定类型组件的 GameObject。

预制体和材质基础

预制体

在 Unity 中,预制体(Prefab)是一种可复用的游戏对象模板。它允许开发者创建一个完整的游戏对象,包括该对象的所有组件和子对象,然后将其存储为一个资源文件。预制体可以被多次实例化,并且对预制体的修改会自动应用到所有其实例上。

通俗的讲,就是比方说游戏中通用的一个组件,如桌子,方桌子,圆桌子,木桌,石桌,都是桌子,功能都一样,只是外观不一样。又或者是森林中的树木,只是位置,面向方向不同。很灵活的概念哈哈哈。

例子:在地图中摆放四个一样的“炮塔”。

在这里插入图片描述

在这里插入图片描述

拖拽四次,然后修改位置参数便达到了想要的效果

在这里插入图片描述

接着使用预制体完成一些练习

在这里插入图片描述

材质

在 Unity 中,材质(Material)是用来定义游戏对象外观的资源,它决定了物体如何与光照交互,以及物体表面的颜色、纹理、透明度等视觉属性。材质会被应用到渲染器(Renderer)组件上,例如 MeshRendererSkinnedMeshRenderer 等,从而使游戏对象在场景中呈现出特定的外观效果。默认是白色!!!

在这里插入图片描述

创建材质:在Assets中创建一个文件夹,命名为Materials用于归类区分,右键→create→Material,里面有很多可以设置的属性,现在简单的改变颜色即可。点选场景中的物体/组件,将材质组件拖拽进去即可。

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

光照基础(理论)

一、光照的基本类型

  1. 方向光(Directional Light)
    • 方向光模拟了一个距离非常远的光源,比如太阳。它可以照亮整个场景,光线可以看作是平行的。
    • 在 Unity 中,创建一个方向光可以通过在 Hierarchy 面板中点击 Create -> Light -> Directional Light
    • 特点:
      • 具有方向,会对场景中的所有物体产生均匀的光照效果,产生清晰的阴影,常用于室外场景,因为太阳光线可以看作是平行光。
      • Transform 组件的旋转决定了光线的方向。
  2. 点光源(Point Light)
    • 点光源从一个点向四周发射光线,类似于灯泡。
    • 创建方式:在 Hierarchy 面板中点击 Create -> Light -> Point Light
    • 特点:
      • 有位置,光线向四周发散,强度会随着距离的增加而衰减。
      • 可以设置范围(Range)属性,决定光的有效范围,超出范围的物体不会被照亮。
      • 可以设置强度(Intensity)、颜色(Color)等属性,影响光照效果。
  3. 聚光灯(Spot Light)
    • 聚光灯从一个点发出,呈锥形照射,类似于手电筒或舞台灯光。
    • 创建:在 Hierarchy 面板中点击 Create -> Light -> Spot Light
    • 特点:
      • 有位置和方向,有一个锥形的照射范围,可以设置角度(Spot Angle)来控制照射的角度大小。
      • 同样可以设置范围、强度、颜色等属性。

二、光照的属性

  1. 强度(Intensity)
    • 决定了光源的明亮程度,范围从 0(完全不亮)到 8(非常亮)。可以在光源的 Inspector 面板中修改。
    • 不同类型的光源可以根据需要调整强度,例如,对于方向光,通常会使用较低的强度,而对于点光源和聚光灯,可以根据需要调整到较高的值。
  2. 颜色(Color)
    • 决定了光源的颜色,可在 Inspector 面板中选择。可以选择纯色,也可以使用渐变颜色。
    • 可以通过改变颜色来营造不同的氛围,如使用暖色调营造温馨场景,冷色调营造神秘或寒冷场景。
  3. 阴影(Shadows)
    • 可以选择是否产生阴影,以及阴影的类型(硬阴影或软阴影)。
    • 对于需要真实感的场景,开启阴影可以增强立体感,但会增加性能开销。例如,方向光开启阴影后,会使场景中的物体在地面上产生清晰的阴影,聚光灯开启阴影可以使锥形光照范围内的物体产生相应的阴影。

三、光照与材质的交互

  1. 不同的材质对光照的反应不同,这取决于材质的属性和使用的 Shader。
    • 例如,使用 Standard Shader 的材质,其 Metallic(金属性)和 Smoothness(光滑度)属性会影响物体对光照的反射效果。
    • 高金属性的材质会产生更强烈的反射,高光滑度的材质会有更集中的高光反射。
  2. 当光照照射到物体上时,根据材质的属性和光照类型,会产生不同的效果。
    • 方向光照射到粗糙材质上,会产生漫反射效果;照射到光滑金属材质上,会产生高光反射和镜面反射效果。

四、全局光照(Global Illumination,GI)

  1. 全局光照是一种高级的光照技术,考虑了光线在场景中的多次反射和散射,使场景更加真实。
  2. Unity 提供了多种全局光照的实现方式,包括实时光照和烘焙光照。
    • 实时光照
      • 实时计算光线在场景中的传播和反射,提供最真实的光照效果,但性能开销大,适合光照效果变化频繁的场景,如动态场景或场景中的可移动物体较多时。
    • 烘焙光照
      • 预先计算光照信息并存储为光照贴图(Lightmap),在运行时使用这些预先计算好的信息,性能开销小,但不适合动态光照变化的场景,常用于静态场景。
    • 可以在 Lighting 面板中设置全局光照的模式和参数,例如,在 Lighting 面板中勾选 Baked GI 启用烘焙光照,然后点击 Generate Lighting 按钮来生成光照贴图。

五、性能考虑

  1. 实时光照需要大量的计算,会影响性能,特别是多个实时光源和开启阴影时。
    • 对于移动平台或性能较低的设备,要谨慎使用实时光照,尽量减少实时光源的数量。
  2. 烘焙光照可以提高性能,但需要额外的光照贴图存储和加载时间,并且不适用于动态物体。

动画基础

代码动画

public class ItemRotation : MonoBehaviour
{
    public int RotationSpeed = 100;
    private Transform itemTransform;

    void Start()
    {
		    // 获取当前组件的transform
        itemTransform = this.GetComponent<Transform>();
    }

    void Update()
    {
		    // 修改当前gameobject对象的x轴进行旋转
        itemTransform.Rotate(RotationSpeed * Time.deltaTime, 0, 0);
    }
}

在这里插入图片描述

Animation和Animator

Animation 动画窗口,使用时间轴创建和处理动画剪辑。在时间轴上可以录制对象属性的变化,然后通过回放创建出动画效果。
Animator 动画器窗口,使用动画控制器管理这些动画剪辑以及调整动画过渡。

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

接下来,开始录制动画关键帧,一个360度旋转的功能,操控transform的rotation属性即可。双击Pickup_Spin clip.
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

tips: 代码动画与Animation不可以同时存在!

📎 参考文章

在这里插入图片描述


http://www.kler.cn/a/511948.html

相关文章:

  • 【Maven】resources-plugin
  • 【AI论文】生成式视频模型是否通过观看视频学习物理原理?
  • 【神经网络基础】
  • nginx 配置代理,根据 不同的请求头进行转发至不同的代理
  • 深入探索 Vue.js 组件开发中的最新技术:Teleport 和 Suspense 的使用
  • MongoDB 学习指南与资料分享
  • JupyterLab 安装以及部分相关配置
  • WSL 2 自动更新 虚拟 IP 到 window hosts
  • 说说HashMap 的位操作以及HashSet的contains方法复杂度是多少?
  • std::forward实现原理与应用场景
  • Linux之socket编程(上)
  • Excel 技巧14 - 如何批量删除表格中的空行(★)
  • 工业现场数据实时采集:解锁工业智能化转型的关键
  • 深入理解Linux系统内存中文件结构以及缓冲区,模拟实现c语言库文件接口
  • 《重生到现代之从零开始的C++生活》—— 类和对象2
  • 【STM32-学习笔记-14-】FLASH闪存
  • 开源模型应用落地-工具使用篇-Spring AI-高阶用法(九)
  • 力扣203题—— 移除链表元素
  • ovs实现lb负载均衡
  • 外部flash烧写算法学习笔记(一)
  • Linux:EXT2文件系统
  • 分布式 IO 模块:开启药品罐装产线高效生产新纪元
  • 技术面试中的软素质技巧性答复集锦
  • 【HarmonyOS NEXT】鸿蒙三方应用跳转到系统浏览器
  • 将 AzureBlob 的日志通过 Azure Event Hubs 发给 Elasticsearch(3.纯python的实惠版)
  • 第01章 分别使用DCMTK和gdcm库,解析DICOM文件系列的dicom标准数据信息