Unity自学之旅01
Unity自学之旅01
- 📝 Unity基础操作
- 面板基础介绍(补充)
- GameObject 是什么?如何获取?
- 创建C#脚本(补充)
- 通过名称获取
- 通过标签获取
- 设置公共变量
- 通过类型获取
- 预制体和材质基础
- 预制体
- 材质
- 光照基础(理论)
- 动画基础
- 代码动画
- Animation和Animator
- 📎 参考文章
📝 Unity基础操作
面板基础介绍(补充)
一、Hierarchy 面板
- 功能:
- 显示当前场景中的所有游戏对象,包括游戏对象的层次结构。
- 可以创建新的游戏对象,通过点击
Create
菜单,选择不同的类型,如 3D 对象、2D 对象、光照、UI 元素等。 - 可以对游戏对象进行重命名、复制、删除操作,还可以通过拖放操作来改变对象的层次关系,例如将一个子对象拖放到另一个父对象下,以创建父子关系。
- 游戏对象的顺序会影响渲染顺序,通常列表中靠上的对象会先渲染,可能会影响遮挡关系。
二、Scene 面板
- 功能:
- 是场景的主要编辑窗口,允许开发者可视化地查看和操作场景中的游戏对象。
- 可以选择不同的视图模式,如透视视图、正交视图,以不同的角度观察场景。
- 可以使用各种工具,如移动工具、旋转工具、缩放工具、矩形工具等,来操作游戏对象的位置、旋转和大小。
- 提供了一个导航工具,可以缩放、平移和旋转场景视图,以便更好地查看场景的不同部分。
- 可以使用
Gizmos
显示一些辅助信息,如光照范围、碰撞器范围等,方便调试和编辑。
三、Game 面板
- 功能:
- 是游戏的预览窗口,显示游戏运行时的效果,包括渲染的场景、UI 元素、动画等。
- 可以在不同的分辨率和显示比例下测试游戏,检查游戏在不同设备上的显示效果。
- 可以通过点击播放按钮来运行游戏,查看游戏的实际运行效果,并且可以在游戏运行时暂停、单步执行,以便调试和优化。
四、Project 面板
- 功能:
- 存储了项目的所有资源,包括预制体、材质、纹理、脚本、动画、音频等。
- 可以创建文件夹,将不同类型的资源分类存储,便于管理和查找。
- 可以通过搜索功能快速找到所需的资源,还可以将资源从
Project
面板拖放到Hierarchy
或Scene
面板,将资源添加到场景中,如将预制体实例化到场景中,将材质应用到对象上。
五、Inspector 面板
- 功能:
- 当在
Hierarchy
或Scene
面板中选中一个游戏对象或在Project
面板中选中一个资源时,Inspector
面板会显示该对象或资源的详细信息。 - 对于游戏对象,会显示其所有组件,如
Transform
、Renderer
、Collider
等,可以修改这些组件的属性,如调整Transform
的位置、修改Renderer
的材质。 - 对于资源,会显示其特定的属性,如材质的颜色、纹理的属性等,可以对其进行修改和编辑。
- 当在
六、Animator 面板
- 功能:
- 主要用于管理动画控制器(Animator Controller)。
- 可以创建和编辑动画状态机,添加动画状态,设置状态之间的过渡条件。
- 可以查看和编辑动画参数,如
float
、int
、bool
、trigger
等,这些参数可以用来控制动画的切换和行为。
七、Animation 面板
- 功能:
- 用于创建和编辑动画剪辑(Animation Clip)。
- 可以设置关键帧,为不同的属性添加关键帧,如为
Transform
的位置、旋转、缩放添加关键帧,以实现物体的运动。 - 可以使用曲线编辑器调整关键帧之间的插值曲线,使动画更加流畅和自然。
八、Console 面板
- 功能:
- 显示 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)组件上,例如
MeshRenderer
、SkinnedMeshRenderer
等,从而使游戏对象在场景中呈现出特定的外观效果。默认是白色!!!
创建材质:在Assets中创建一个文件夹,命名为Materials用于归类区分,右键→create→Material,里面有很多可以设置的属性,现在简单的改变颜色即可。点选场景中的物体/组件,将材质组件拖拽进去即可。
光照基础(理论)
一、光照的基本类型
- 方向光(Directional Light):
- 方向光模拟了一个距离非常远的光源,比如太阳。它可以照亮整个场景,光线可以看作是平行的。
- 在 Unity 中,创建一个方向光可以通过在
Hierarchy
面板中点击Create -> Light -> Directional Light
。 - 特点:
- 具有方向,会对场景中的所有物体产生均匀的光照效果,产生清晰的阴影,常用于室外场景,因为太阳光线可以看作是平行光。
- 其
Transform
组件的旋转决定了光线的方向。
- 点光源(Point Light):
- 点光源从一个点向四周发射光线,类似于灯泡。
- 创建方式:在
Hierarchy
面板中点击Create -> Light -> Point Light
。 - 特点:
- 有位置,光线向四周发散,强度会随着距离的增加而衰减。
- 可以设置范围(Range)属性,决定光的有效范围,超出范围的物体不会被照亮。
- 可以设置强度(Intensity)、颜色(Color)等属性,影响光照效果。
- 聚光灯(Spot Light):
- 聚光灯从一个点发出,呈锥形照射,类似于手电筒或舞台灯光。
- 创建:在
Hierarchy
面板中点击Create -> Light -> Spot Light
。 - 特点:
- 有位置和方向,有一个锥形的照射范围,可以设置角度(Spot Angle)来控制照射的角度大小。
- 同样可以设置范围、强度、颜色等属性。
二、光照的属性
- 强度(Intensity):
- 决定了光源的明亮程度,范围从 0(完全不亮)到 8(非常亮)。可以在光源的
Inspector
面板中修改。 - 不同类型的光源可以根据需要调整强度,例如,对于方向光,通常会使用较低的强度,而对于点光源和聚光灯,可以根据需要调整到较高的值。
- 决定了光源的明亮程度,范围从 0(完全不亮)到 8(非常亮)。可以在光源的
- 颜色(Color):
- 决定了光源的颜色,可在
Inspector
面板中选择。可以选择纯色,也可以使用渐变颜色。 - 可以通过改变颜色来营造不同的氛围,如使用暖色调营造温馨场景,冷色调营造神秘或寒冷场景。
- 决定了光源的颜色,可在
- 阴影(Shadows):
- 可以选择是否产生阴影,以及阴影的类型(硬阴影或软阴影)。
- 对于需要真实感的场景,开启阴影可以增强立体感,但会增加性能开销。例如,方向光开启阴影后,会使场景中的物体在地面上产生清晰的阴影,聚光灯开启阴影可以使锥形光照范围内的物体产生相应的阴影。
三、光照与材质的交互
- 不同的材质对光照的反应不同,这取决于材质的属性和使用的 Shader。
- 例如,使用
Standard
Shader 的材质,其Metallic
(金属性)和Smoothness
(光滑度)属性会影响物体对光照的反射效果。 - 高金属性的材质会产生更强烈的反射,高光滑度的材质会有更集中的高光反射。
- 例如,使用
- 当光照照射到物体上时,根据材质的属性和光照类型,会产生不同的效果。
- 方向光照射到粗糙材质上,会产生漫反射效果;照射到光滑金属材质上,会产生高光反射和镜面反射效果。
四、全局光照(Global Illumination,GI)
- 全局光照是一种高级的光照技术,考虑了光线在场景中的多次反射和散射,使场景更加真实。
- Unity 提供了多种全局光照的实现方式,包括实时光照和烘焙光照。
- 实时光照:
- 实时计算光线在场景中的传播和反射,提供最真实的光照效果,但性能开销大,适合光照效果变化频繁的场景,如动态场景或场景中的可移动物体较多时。
- 烘焙光照:
- 预先计算光照信息并存储为光照贴图(Lightmap),在运行时使用这些预先计算好的信息,性能开销小,但不适合动态光照变化的场景,常用于静态场景。
- 可以在
Lighting
面板中设置全局光照的模式和参数,例如,在Lighting
面板中勾选Baked GI
启用烘焙光照,然后点击Generate Lighting
按钮来生成光照贴图。
- 实时光照:
五、性能考虑
- 实时光照需要大量的计算,会影响性能,特别是多个实时光源和开启阴影时。
- 对于移动平台或性能较低的设备,要谨慎使用实时光照,尽量减少实时光源的数量。
- 烘焙光照可以提高性能,但需要额外的光照贴图存储和加载时间,并且不适用于动态物体。
动画基础
代码动画
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不可以同时存在!