导读:前置笔记(由浅入深).Unity 游戏开发、01 基础篇.2 场景操作.3D场景.Q 手型工具(鼠标中键):上下左右移动场景.ALT + 鼠标左键:以视图为中心旋转.鼠标右键:以观察者为中心旋转.SHIFT + Gizmo方块:Y轴归位.物体节点 + F:观察者定位至物体.窗口布
Unity 游戏开发、01 基础篇
3D项目一般窗口布局如下
全局光照GI(Glballlumination)(编辑模式下才能生成)
按住CTRL(默认0.25单位增量)
一个物体的顶点(Vertex)与另外物体的顶点重合
选择一个物体按住 V,** 拖动一个顶点**至其他模型的顶点上
打开 shaded wireframe 可以看到各个模型的顶点
球形预览: 材质包含了 光照计算 ,光线不同角度照射时,显示效果不同
不同贴图的功能
着色器是一个程序,一个算法。会综合考虑以下因素
决定物体表面的实际显示效果,着色(上色、染色)。默认材质选择的是标准着色器算法
标准着色器算法里确定了顶点坐标与贴图对应关系(不同三角面对应贴图中的不同位置)
天空盒也是一种材质
public GameObject target;
void Start()
{
Vector3 pos = target.transform.position;
pos.y = 0;
transform.LookAt(pos);
}
导入Unity后,模型的 Axis、Pivot、Size 都是确定的,最好在建模软件中修改 ,也可以用空节点套子节点,调整子节点模型方向与空节点Z轴对齐
创建 Animation | 检查器选项 | Debug模式 | 勾选 Legac
拖动至物体节点,添加 Animation 组件
选中动画物体节点,在 Animation 窗口(Window | Animation | Animation )添加属性
可以添加子节点的属性
细节
默认插值计算的动画曲线不是直线(匀速运动),Animation | Curves 看到各属性字段对应的曲线变化
修改曲线过渡
进入 Recording Mode
左侧选中 Position.x,仅显示 x 属性的曲线
编辑关键帧,右键 Both Tangent | Linear 改为线性(匀速运动)
其他操作:添加、删除关键帧,Tangent 曲线手柄等
当播放到某一帧时,触发一个回调方法
在时间轴下灰色部分右键 | Add Animation Event (左侧按钮)
事件调用的函数可以获取一个参数
Unity - Scripting API: AnimationEvent (unity3d.com)
public void DropOnGround(float time)
{
Debug.Log(time);
}
如果不自动播放,可以通过API获取Animation组件手动播放动画列表
private void Start() => GetComponent<Animation>().Play();
Mecanim 一个基于状态机控制的动画系统
状态机:用算法控制一个有多种状态的事物或系统,在各种状态间切换的机制
一个人物模型可能有以下几种状态:idle、walk、jump、swim、attack,不同的状态有不同的动作
Entry 是状态的起点,默认状态 显示为橙色
利用 状态参数 控制状态机的运行
路径属性 Has Exit Time (退出时间)
⭐ 当前路径若同时设置退出时间与条件,时间到时会先检查条件,条件满足再退出,不满足的话当前路径会失效,后续再满足条件也不会走这条路
private Animator animator;
private void Start()
{
animator = GetComponent<Animator>();
}
private void Update()
{
// animator.SetBool("isDancing", Input.GetKey(KeyCode.Space));
if (Input.GetKeyDown(KeyCode.Space))
animator.SetBool("isDancing",
!animator.GetBool("isDancing"));
}
进入状态、每次Update、退出状态 时的回调;状态节点 | Add Behaviour
Has Exit Time 触发 OnStateExit , OnStateExit 先于条件检测 发生
override public void OnStateEnter(Animator animator, AnimatorStateInfo stateInfo, int layerIndex)
{
Debug.Log("进入了 Dancing 状态");
}
override public void OnStateExit(Animator animator, AnimatorStateInfo stateInfo, int layerIndex)
{
animator.SetBool("isDancing",false);
}
可以通过获取状态机的变量值进行判断
访问状态机当前层次正在播放的状态节点
添加一个新的状态变量,在关键节点利用状态机行为 修改
public float walkSpeed = 0; public float rollSpeed = 0;
private Animator anim;
private void Awake()
{
anim = GetComponent
private void Update() { if (anim.GetBool(“Walk_Anim”)) transform.Translate(0,0,walkSpeed * Time.deltaTime);
bool flag = anim.GetCurrentAnimatorStateInfo(0).IsName("closed_Roll_Loop");
if (flag)
transform.Translate(0,0, rollSpeed * Time.deltaTime);
}
地表
Create | Terrain Layer
指定 Diffuse 主帖图;Normal 法线贴图
Terrain 组件 | Paint Terrain | Edit Terrain Layers
第一个表面是默认表面
花草
Grass Texture 自动扭转对准摄像机,远了不渲染
植树同理(预制体,3D物体)
造山
挖坑
地表最低海拔为0,要挖坑必须先抬高地势
上一篇:产品代码都给你看了,可别再说不会
下一篇:大佬们 有没有unity游戏开发