1、基础知识:
标题栏
菜单栏
工具栏:变换工具、gizmos切换、播放控件、层列表、布局列表
功能窗口
2、资源及资源类型:在project里面能够create的资源。project面板可以对资源进行组织管理,创建资源,搜索资源。
3、模型和角色动画:
角色动画创建过程时:创建角色模型、骨骼设置、蒙皮、烘焙动画。
maya、3dmax创建的模型、动画,用插件输出(fbx、obj)或者软件自己的格式(max、blend),unity自身转换。
maya、3dmax创建的模型、动画,需要把IK/FK动画烘焙为关键帧动画,然后导入到unity中,才能识别。关键帧动画能够节省很多计算资源,因为IK/FK运动学动画是每一帧都会涉及到运动学计算的。
maya、3dmax创建的模型、动画,可以全部导入到unity中,然后分割;或者按照一定的命名规则,先分割再导入到untiy中。
4、材质和着色器:
材质和着色器都是属于资源类型,在project面板中create,或者外部导入,纹理即图片,不能使用unity创建,但是可以通过ps等图形处理软件创建编辑之后,导入到unity中使用。
Mesh Renderer组件:包含材质、着色器、纹理(贴图)的选项和参数设置
可以这样理解:纹理+着色器=材质
2D纹理:一张2D贴图
movie纹理:视频(mov/mpg/mpeg/mp4/avi/asf)通过quick time导入之后,被unity自动转换为ogg theroa格式。即动画纹理,之后可以像普通纹理一样使用。
5、声音文件:
声音资源存放于project面板中,可以通过component中的audio listener和audio source组件进行使用。
6、prefab预设:
prefab预设:就是把设计好的游戏物体存为一个备份,当需要生成多个实例化物体时可以直接拷贝使用,避免了重复造轮子的问题。
重用性和运行实例化:创建预设的instance
实例的继承性:修改预设属性,所有的实例会跟着改变。
实例的重载:单独修改实例,则只会对此实例生效。
7、游戏物体使用组件来丰富功能,组件使用project里面的资源来设置属性。
8、scene视图操作;
透视模式persp、正交模式iso
snap移动,按住ctrl键拖动物体,以一定的增量来移动。
表面移动,ctrl+shift拖动物体,一个物体在另一个物体表面移动。
顶点吸附:v键激活移动物体顶点,选择好之后拖动,可在另一个物体的顶点上移动。
9、灯光和摄像机:
灯光类型:spot(聚光灯)、directional(方向光)、point(点灯光)、area(区域光)
10、unity脚本的使用:
5*Time.deltaTime:每秒5度或者5米,和unity的帧速率无关。deltaTime记录了上一帧执行完成的时间。 1/FPS 这里的FPS是实时变化的。
11、C#脚本:test01.cs test02.cs
test01.cs引用test02.cs变量
需要把变量定义为public static类型,然后可以直接引用 test02.var;test02.cs
可以在test02中定义方法(读写变量的实现),然后在test01中调用test02的方法即可实现
在test02中定义静态方法public static test02 instance;并在Awake中赋值为this,在test01中调用此方法test02.instance.var即可
test01和test02属于同一个GameObject:直接调用getcomponent获取脚本组件
test01和test02不属于同一个GameObject:可以通过定义test02所属GameObject的tag,然后在test01中FindGameObjectWithTag或者直接在test01中Find而不定义tag
12、GameObject的获取:
通过脚本里面定义public的GameObject的变量,然后在Inspector面板中拖动另一个GameObject获取
通过在脚本里面Find函数实现(直接Find或者给GameObject定义tag,然后通过Findtag来获取)
13、脚本使用:
脚本里面的时间控制:
time类
yield WaitForSecond(5);//等待5s钟之后再次返回执行。
脚本里面的随机数产生:random类
脚本物体间通信方式:
GameObject.SendMessage:向自身的脚本中发送消息。参数为函数名和函数的参数
GameObject.BroadcastMessage:向自身及子物体的脚本中发送消息
GameObject.SendMessageUpwards:向自身及父物体的脚本中发送消息
使用delegate委托特性来实现。
用一段代码来理解事件/委托机制的用法:下面的代码是点击中文,显示中文名字,点击英文,显示英文名字:
using UnityEngine;
using System.Collections;
public class TestDelegate : MonoBehaviour
{
//定义一个委托(格式是不是很类很像),用来指向我们某个函数。(c++里面的指针函数)
//param参数是名字
private delegate void DebugString(string param);
///
/// 输出中文名字
///
public void DebugNameOfChina(string str)
{
Debug.Log("中文名字:" + str);
}
///
/// 输出英文名字
///
public void DebugNameOfEnglish(string str)
{
Debug.Log("English Name:" + str);
}
//定义一个委托的变量事件
private DebugString handlerDebugString;
void OnGUI()
{
if (GUILayout.Button("输出中文名字"))
{
//我想输出中文名字的话就给handlerDebugString 赋值成输出中文名字的这个函数DebugNameOfChina
handlerDebugString = DebugNameOfChina;
handlerDebugString("丁小未");
}
else if (GUILayout.Button("Debug English Name"))
{
//我想输出英文名字的话就给handlerDebugString 赋值成输出中文名字的这个函数DebugNameOfEnglish
handlerDebugString = DebugNameOfEnglish;
handlerDebugString("DingXiaowei");
}
}
}