Unity学习笔记(二)

资源

资源文件

Assets 目录下的文件,称为资源
常见类型:

  • 模型文件 Model (*.fbx)
  • 图片文件 Texture (*.jpg / png / psd / tif)
  • 音频文件 AudioClip (*.mp3 / wav / aiff)
  • 脚本文件 Script (*.cs)
  • 材质文件 .mat, 场景文件 .unity

目录式的资源管理,和 Windows 类似
几个操作:

  • 在文件夹窗口查看 ,Show In Explorer
  • 添加、删除目录
  • 添加资源文件,文件会被拷贝到项目中
  • 复制资源 ,CTRL+D
  • 缩略图比例调节 、列表模式

Meta ,描述文件
每一个资源文件 / 文件夹,都对应一个 *.meta 描述文件

场景文件

场景文件 *.unity ,记录了场景中的节点数据。场景文件包含:

  • 场景全局设置
  • 节点
  • 节点下的组件
  • 每个组件的参数值

一个场景代表一个关卡,可以创建多个场景
几个操作:

  • 添加场景
  • 打开场景
  • 编辑场景,保存 CTRL + S

资源包

资源包 Unity Package ,即对Assets下的资源打包

  • 选择一个资源文件,或者一个目录
  • 右键 ,Export Package ..
  • 生成 *.unitypackage 资源包

导入资源包:直接把 *.unitypackage 拖到 Project 窗口

资源商店

资源商店 Asset Store , https://assetstore.unity.com
也可以在 Unity 打开,Window | Asset Store

有一些免费 或 收费的资源 ,包含 模型、材质纹理等。

父子关系

轴心

轴心 Pivot ,指一个物体的操作基准点
对于基本体来说,轴心点默认位于几何中心
轴心 Pivot 可以在任意位置,不一定是在几何中心 (Center)
注意:轴心的位置是可以在建模软件中任意指定的。

父子关系

父子级,指两个物体之间的关系。
在 Hierarchy 窗口中,

  • 拖动物体 B ,到 物体 A 下
  • 子物体会随着父物体一并移动
  • 删除父物体时,子物体一并删除
  • 相对坐标:Transform中子物体的坐标,是相对于父物体的。

空物体

空物体 EmptyObject ,即空对象、空节点。只有Transform,无其他数据。

  • 添加一个空物体
  • 空物体不可见,( 没有网格 )
  • 空物体也有坐标,可以移动
  • 空物体的作用:
    • 作为父节点,用于节点的组织和管理
    • 用于标记一个位置
      GameObject,其实是一个节点 / 容器
      一般所谓的‘物体’,即有形状的东西,对应的 Mesh

Global 与 Local

  • Global ,即世界坐标系

    • 以世界中心为轴
    • 6个方向代表:上下 东西 南北
  • Local ,即本地坐标系

    • 以物体自身为轴
    • 6个方向代表:上下 前后 左右

y轴称为 up ,z轴称为 forward ,x 轴称为 right
一般地,要求模型的正脸与 Z 轴方向一致

Pivot 与 Center

Pivot ,轴心
Center ,几何中心

  • 一般来说,物体的轴心并不在几何中心处

组件

组件概述

组件 Component ,是为GameObject提供功能的部件。Inspector中每个折叠菜单对应一个组件。例如:

  • Light ,光源
  • Mesh Filter ,网格过滤器
  • Mesh Renderer ,网格渲染器

添加 / 删除组件

  • 添加一个组件:Inspector-Add Component
  • 删除一个组件:Inspector-右键Component-Remove Component
  • 组件,代表一个功能。需要什么功能,就添加什么组件

AudioSource组件

AudioSource 组件,用于播放音乐/音效

  1. 添加一个音乐文件,*.mp3 / wav / aiff
  2. 创建一个物体
  • Add Component ,Audio | Audio Source
  • 将音乐文件拖到 AudioSource-AudioClip 属性
  • Scene窗口上方,选 Toggle Audio On 播放音乐

Transform组件

Transform 组件,用于定义物体的位置、旋转、缩放等基本参数。

物体的基本参数:
Position ,位置 ( 相对坐标 )
Rotation ,旋转 ( 欧拉角 )
Scale ,缩放

Transform 组件的特点:

  • 基础组件,所有物体都有
  • 该组件不能被删除

摄像机

Main Camera 组件 ,负责拍摄游戏画面。

  • 调整窗口布局,Window-layouts-2 by 3,使Scene / Game 并排显示
  • 选中摄像机,观察镜头范围
  • 摄像机的 Z 轴指向,即为拍摄方向
  • 拍到的画面,呈现在 Game 窗口中,即为玩家最终所见画面

调整摄像机的角度 ,两种方法:

  1. 手动移动、旋转摄像机 ,调整Camera位置,这种方法误差较大,且操作教繁琐。
  2. Align with View ,与3D视图对齐,推荐此方法。
    • 先在3D视图里摆好角度,此为观察者视角
    • 然后选中 Main Camera ,点击GameObject - Align with View
    • 此时,摄像机视角与观察者视角完全相同

脚本

脚本的使用

脚本 Scripts ,用于驱动游戏逻辑。
使用脚本:

  1. 添加一个脚本
    • 右键,Create | C# Script
    • 文件名必须规范,文件名即为类名 。如SimpleLogic
  2. 双击在 VS 中打开脚本,检查类名与文件名是否一致

  3. 在 VS 中编辑代码,添加一行打印输出

    1
    2
    3
    4
    void Start()
    {
    Debug.Log("** 我的第一个脚本");
    }

其中,Debug 类是 Unity API 中的一个工具类

  1. CTRL + S ,保存代码 ,并闭 VS
  2. 编译。编译过程是自动的。保存脚本,回到Unity时会自动重新编译。
  3. 挂载脚本。有两种办法:
    • 点 Add Component ,选 Scripts | Simple Logic
    • 或者,直接将脚本拖到 Inspector 窗口的最下方,较为快捷
  4. 运行游戏
    • 点击 Game 窗口上方 Play 按钮,运行游戏
    • 在 Console 窗口中,观察输出
    • 若 Console 窗口未显示,则 Window | General | Console 调出此窗口
    • 再次点击 Play,停止游戏

注意点:

  1. C# 文件名必须和类名一致,否则无法挂载
    若要修改类名,应在 VS 中右键重命名
  2. 脚本必须挂载到GameObject上,才会被调用。

当前物体

在SimpleLogic.cs中,获取当前物体

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
using System.Collections;
using System.Collections.Generic;
using UnityEngine; // 导入Unity包

public class SimpleLogic : MonoBehaviour // SimpleLogic继承MonoBehaviour
{
// 初始化时调用1次
void Start()
{
Debug.Log("** 开始测试..");

GameObject obj = this.gameObject;
string name = obj.name;
Debug.Log("** 物体名字:" + this.gameObject.name);

Transform tr = this.gameObject.transform;
Vector3 pos = this.gameObject.transform.position;
Debug.Log("** 物体的位置 :" + pos.ToString("F3")); // 保留3位小数
}

// Update is called once per frame
void Update()
{

}
}
  • this : 当前脚本组件
  • this.gameObject : 当前物体
  • this.gameObject.name : 当前物体的名字
  • this.gameObject.transform : 当前物体下的Transform 组件
    为了简化书写,也可写作 this.transform ,效果相同

API 中的大部分类型,来自于 UnityEngine
导入Unity包
using UnityEngine;
包中重要的类:

  • 基类 MonoBehaviour
  • 游戏物体 GameObject
  • 变换组件 Transform
  • 三维向量 Vector3

物体的坐标

  • transform.position : 世界坐标。物体相对于世界中心点的坐标,即绝对坐标

  • transform.localPosition : 本地坐标。物体相对于父物体的坐标,即相对坐标

  • 一般常使用的是 localPosition ,与 Inspector 中的坐标值一致

  • 为简化书写,以下两种写法是等效的:
    this.gameObject.transform.position
    this.transform.position
    其中,this.transform 指向的就是 this.gameObject.transform

  • Vector3 类型,即三维向量,含 x y z 三个分量 ( float )。如上述示例中,可通过pos.x来调用

    1
    2
    Vector3 pos = this.transform.position;
    Debug.Log("** 物体的x坐标 :" + pos.x);
  • 设置物体的坐标:
    this.transform.localPosition = new Vector3(1.5f, 0, 2.0f);
    其中,float 型的数值,在书写时应以 f 结尾

播放模式

Edit Mode ,编辑模式
Play Mode ,播放 / 运行 模式

在播放模式下,

  • 实时显示场景中的物体 和 属性
  • 播放模式下的修改是不可保存的,通常用于调试。如果此时保存,会弹出errorMsg: You must exit play mode to save the scene!
0%