Unity常用类和组件总结(持续更新)

1.Time

void Update()
    {
        //1.时间缩放
        //时间停止
        Time.timeScale = 0;
        //时间正常
        Time.timeScale = 1;
        //二倍速
        Time.timeScale = 2;
        //unity已经开始的时间
        Debug.Log(Time.time);
        //不受timeScale影响的 unity已经开始的时间
        Debug.Log(Time.unscaledTime);
        
        //2.帧间隔时间
        //就是一帧用多长时间
        //60帧就是一秒循环60次 1/60 平均每帧循环16.66ms
        //那120帧就是 1/120
		//常用于计算路程
        //timeScale = 0时 Time.deltaTime = 0
        Debug.Log(Time.deltaTime);
        //timeScale = 0时 Time.unscaledDeltaTime不受影响
        Debug.Log(Time.unscaledDeltaTime);
        //当unity暂停时不动,受timeScale影响,使用deltaTime
        //当unity暂停时不动,不受timeScale,使用unscaledDeltaTime
    }

2.位移

//位移
        //1.方向* 速度 * 帧间隔时间
        this.transform.position += transform.forward * 2f * Time.deltaTime;
        //2.使用API:Translate 
        //第一个参数也是方向* 速度 * 帧间隔时间
        //第二个参数是相对于世界坐标 还是自己的坐标

        //情况1:自己的面朝向向量 相对于世界坐标
        //那移动起来就是面朝自己方向的(不会使用)
        this.transform.Translate(transform.forward * 2f * Time.deltaTime,Space.World);

        //情况2:世界的面朝向向量 相对于世界坐标
        //那移动起来就是面朝世界方向的(会使用)
        this.transform.Translate(Vector3.forward * 2f * Time.deltaTime, Space.World);

        //情况3:自己的面朝向向量 相对于自己 那移动起来是很奇怪的(不会使用)
        //因为transform.forward 是相对于世界坐标的自己的面朝向向量
        //然后再相对于自己的坐标进行二次偏移
        this.transform.Translate(transform.forward * 2f * Time.deltaTime, Space.Self);

        //情况4:世界的面朝向向量 相对于自己的坐标
        //那移动起来就是面朝自己方向的(会使用)
        this.transform.Translate(Vector3.forward * 2f * Time.deltaTime, Space.Self);
    }

3.角度和旋转

		//角度
        //相对于世界坐标角度
        Debug.Log(this.transform.eulerAngles);
        //相对父对象角度
        Debug.Log(this.transform.localEulerAngles);

        //1.使用API旋转
        //第二个参数相对于世界还是自己 不填默认为自己
        this.transform.Rotate(new Vector3(10,10,10),Space.Self);

        //2.相对于某个轴进行旋转
        //第二个参数:转的角度
        //第三个参数:相对于世界还是自己
        this.transform.Rotate(new Vector3(10, 10, 10),10 * Time.deltaTime ,Space.Self);

        //3.相对于某一个点转
        //第一个参数:相对于哪个点
        //第二个参数:相对于哪个轴
        //第三个参数:转的角度
        this.transform.RotateAround(Vector3.zero, Vector3.up, 10 * Time.deltaTime);

4.看向

void Update()
    {
    	//看向一个点 相对于世界坐标系
        this.transform.LookAt(Vector3.zero);
        //看向一个目标 需要传入目标的transform即可
    }

5.随机数

void Start()
    {
        //Unity中的随机数
        //int左包含 右不包含 也就是0 1 
        int random = Random.Range(0, 2);
        //float左右都包含
        float randomF = Random.Range(1.1f, 2.1f);
    }

6. 刚体
在这里插入图片描述

(1)Mass:质量,质量越大惯性越大
(2)Drag:空气阻力,比如从空中下落,drag越大下降越慢
(3)Angular Drag:扭矩阻力,就是旋转物体时收到的空气阻力的大小
(4)Use Gravity:是否受重力影响,重力就是字面意思,不受重力就不会下落
(5)Is Kinematic:是否开启运动学。如果勾选,物体就不会收到力的作用。
(6)Interpolate:暂时没使用过
(7)Collision Detection:暂时没使用过
(8)Constraints:约束刚体运动。选择勾选后,物体会被选择地停止在XYZ轴的移动,以及选择地停止在XYZ轴的旋转。

7.锚点和轴心点
轴心点:代表一个物体的中心点
锚点:锚点属于父物体,一个四箭头风车。那物体的轴心点相较于锚点的距离就是物体XY的值
如何实现屏幕适配?
假设我们想将一个物体一直放在左上角,无论屏幕分辨率如何变化都在左上角,我们应该将锚点设置为左上角,同时将中心点也设置为左上角,再将物体本身设置到左上角即可。
如何理解?
物体的XY值就是物体的轴心点 相较于 锚点的距离。
1.假如屏幕分辨率为1920x1080,此时锚点在正中心,而物体放在右上角,当屏幕分辨率变化为3840x2160时,轴心点相较于锚点的距离(XY值)仍然是固定不变的,那很明显不变是不对的。
在这里插入图片描述
在这里插入图片描述
2.当锚点和轴心点重合的时候,XY值为0,当屏幕分辨率变化时,XY值仍然是0,但物体永远在这个锚点的位置上
在这里插入图片描述
在这里插入图片描述
3.总结:不能距离锚点太远,最好轴心点和锚点之间距离很近,这样就不会因为屏幕分辨率变化时,物体因为上个屏幕分辨率固定的XY值 而导致错误。(如有理解误区请指正)

8.Canvas
在这里插入图片描述在这里插入图片描述

9.动画
1.老动画
(1)对物体添加Animation组件
(2)再添加Animation中的动画(此时默认就是老动画系统 )
(3)打开新创建的Animation 会发现只有Wrap Mode 它决定了动画的播放方式
Once、Loop、Clamp Forever(播放结束停在最后一帧 并且会一直播放最后一帧)、PingPong(从头到尾 从尾到头的播放)

//老动画系统
        if(Input.GetKeyDown(KeyCode.Alpha1))
        {
            anim.Play("New Animation");
        }
        if (Input.GetKeyDown(KeyCode.Alpha2))
        {
            anim.Play("New Animation2");
            //anim.CrossFade(); 过渡
            //anim.PlayQueued(); 前一个播放完 再播放下一个
            //anim.CrossFadeQueued(); 两种结合
        }

2.新动画
(1)对物体添加Animator组件
(2)创建动画时 会保存动画 同时自动创建一个Animator 并关联到组件当中
(3)此时Animation中的参数和老动画不一样
Loop Time(循环播放)、LoopPose无缝循环动画(添加过渡)、Cycle Offset(循环动画在哪个时间开始的一个周期偏移数)
3.骨骼
(1)单张图片的骨骼编辑:首先将图片的Sprite Mode设置为Multiple,通过Skinning Editor对图片进行三部曲:骨骼划分-蒙皮-设置权重(使用自动蒙皮可以跳过),通过双击图片设置骨骼信息,最重要的是设置父节点和名字的设置,然后自动生成蒙皮,Apply后对图片添加Sprite Skin,通过CreatBones生成骨骼信息,再设置动画就可以实现效果。
(2)图集图片的骨骼编辑:首先将图片的Sprite Mode设置为Multiple,通过Sprite Editor中的Slice对图片进行切割,再进行三部曲,最后放到场景中分别设置图片的父节点,添加Sprite Skin,CreatBones生成骨骼信息即可
(3)PSB图片的骨骼编辑:ps就是PhotoShop保存图片的文件格式。
1.在Unity中需要引入2D PSD Improter,这种图片会将人物分成几部分,并且位置也会设置好。
2.在Unity中会多出Sprite选项,可以选择具体的部分
3.自动蒙皮可能会出错,比如手臂移动会影响身体的变形,所以要使用权重中Bone Influence减去那些不需要的骨骼(可以设置骨骼与图片的关联关系)。
4.对于没有设置骨骼信息的装饰品,也可以通过Bone Influence加上一些骨骼一起移动
5.辫子和头是分离的,不希望出现辫子移动时影响头部,那就可以通过权重中Weight Brush(笔刷)先去看哪些点是不想随着辫子一起移动的,再去找到这些点需要一起移动的骨骼,双击,再通过右下角的Size设置笔刷大小,Hardness设置强度,最后去点击那些受影响的点即可。
6.拖入场景时需要有个空对象作为父物体,可以方便调整图片(因为图片有偏移)
(4)IK反向动力学:通过子节点影响父节点。正向动力学就是父节点影响子节点。当想要指向性的功能,射击,拾取物品等等可以使用IK。
4.Rig操纵页签:替身
在这里插入图片描述
Node:静态物体适用
Lagacy:老动画使用
Generic:不规则图形
Humanoid:人形适用
Avatar Definition
Creat from this model,根据此模型生成Avatar化身信息,Configure,打开Avarar配置信息,可以选择调整Avatar的参数 还能观察肌肉表现 设置肌肉配置
Muscles:Reset 重置所有信息
Copy,指向另一个模型上设置的Avatar化身信息,Soure,复制一个具有相同骨架的Avatar信息
5.Animation动画页签:单个动画
Anim Comperssion
在这里插入图片描述
Clips:切割动画,通过Start 和 End决定哪些帧是完整的动画,可以通过±的方式切割或者删除
动画剪辑基础设置
LoopMatch代表是否能进行循环匹配 从第一帧和结束帧是否可以无缝连接
Cycle Offset:动画起始的偏移
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
Curves:曲线设置
Events:动画事件,可传参
Mask:约束哪些部位不受影响
6.3D动画
(1)Animator中 Apply Root Motion:是否影响动作的位移
(2)Animator中连线 Can Transition:是否过渡到自己(任意状态所连线的取消勾选)
(3)动画分层遮罩(层级参数)
1.权重
2.Mask(单独创建一个Mask遮罩(Avatar Mask)然后设置动画中Mask部分可以控制人物不受哪些动作的影响)
3.Blending混合方式(一般使用Override 覆盖其他层动画)
4.Sync是否同步其他层(可以选择一层复制到该层 但其中的动画都是没有动画文件的 需要手动关联
5.Timing折中计算动画时长 不勾选会使用原始层级的动画时长(建议勾选)
6.假设我们有一层为待机动画,第二层权重为1,在该层设置跑步动画,当Unity运行时,这两层会同时执行,如何避免呢?那就可以在第二层建立一个空动画,另一个为跑步动画,当条件满足时再去执行跑步动画,这样在运行时,默认播放的就是待机动画,而第二层始终连线的为空动画,条件不满足不会执行跑步动画。
7.代码使用Sync,通过设置权重即可启用该层

		animator.SetInteger("Speed", (int)Input.GetAxisRaw("Vertical"));
        //得到层级索引 设置权重
        animator.SetLayerWeight(animator.GetLayerIndex("name"),1);

7.动画1D混合 2D混合 允许多个动画混合在一起使动画平滑混合
在这里插入图片描述

(1)1D:可以通过一个参数控制动作的变化
(2)2D Simple Directional:简单定向模式,在不同方向时使用,比如 前后左右走
(3)2D Freeform Directional:自由形式定向模式,也可以在不同方向时使用,同时可以有多个运动方式,比如 向前走 向前跑
(4)2D Freeform Caetesian:自由形式笛卡尔坐标,运动不表示不同方向时使用,比如不拐弯 不左转
(5)Direct:表情系统使用
2D在使用时,通过改变PosX和PosY的坐标,决定动作变化
8.动画子状态机 (某一个状态是由多个动作组成的复杂状态 就可以使用子状态机)
Creat Sub-State Machine可以创建一个动画子状态机,里面可以去设置动画,最后需要去选择连接到上一层的默认动画 或者 上一层的某一个动作(只有内部连接了才有效 上一层连接只是展示 如果内部未连接 上一层连接也是灰色的)
9.动画目标匹配(角色播放动画后 手或者脚必须到达某个位置 就需要使用该API)
(1)animator.MatchTarget(目标位置,目标角度,想要匹配的骨骼位置,位置角度权重,开始位移动作的百分比,结束位移动作的百分比)
(2)可能出现的问题:调用时动画不能处于过渡阶段,解决方法是给动画添加事件,这个事件设置的时间点不能处于过渡阶段内
10.状态机行为脚本(可以在某一个进入状态下(进入 退出 保持)进行一些逻辑处理)
类似于动画事件 这个方法更准确 不需要考虑当前是否处于过渡状态
在这里插入图片描述
11.状态机复用
Animotor Override Controller,关联想要复用的状态机文件,关联动画文件即可
12.角色控制器
在这里插入图片描述
在这里插入图片描述
**加粗样式**
在这里插入图片描述
10.导航寻路系统
1.导航网格生成组件(Windos-AI-Navigation)
(1)标记哪些是需要生成地形的 哪些地形之间可以跳跃 设置为Navigation Static
(2)设置烘焙参数 阶梯参数 跳跃参数 设置特定的Area区域 设置Agents代理参数
在这里插入图片描述
在这里插入图片描述
Area:名字 寻路消耗
Agents:代理参数
2.导航网格寻路组件
在这里插入图片描述

void Update()
    {
    	//通过鼠标左键控制人物在屏幕上的移动
        if(Input.GetMouseButtonDown(0))
        {
            RaycastHit hit;
            if(Physics.Raycast(Camera.main.ScreenPointToRay(Input.mousePosition),out hit, 1000))
            {
                agent.SetDestination(hit.point);
            }
        }
    }

3.导航网格外连接组件(可以控制对象跳跃的起点和终点)
(1)设置一个起点 一个终点 添加一个组件Off Mesh Link
(2)绑定起点终点 设置参数
在这里插入图片描述
4.导航网格动态障碍物组件
(1)为需要进行动态阻挡的物体添加脚本NavMeshObstacle组件
(2)设置参数
雕刻功能可以在烘焙的时候,不生成障碍物区域的网格;不开启雕刻功能的话,还会生成网格,如果使用速度去判断动画的话,可能会出错,因为人物始终会朝向目标点行走,速度始终不为0,动画也始终是行走状态,像是"物理障碍物"。
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值