VR 工业组装案例
VR工业组装案例
一、创建动画控制器
1. 新建一个新的场景。
2. 在Hierarchy面板在单击右键,在弹出的面板中选择 3D Object->Cube,创建一个Cube对象。

3. 选中上面创建的 Cube 对象,点击 Window->Animation->Animation 按钮,创建一个动画控制器。

4. 再弹出的动画控制器面板,点击 “Create” 按钮,创建一个动画片段。


二、动画原理
2.1 帧
动画的原理与电影的原理相同,是由一些连续的静态图片构成的,这些图片以一定的速度连续播放,(播放的速度称为帧率)根据人眼有视觉暂留的特性,就会认为画面是连续运动的,这些静态的图片就是帧

2.2 帧率
是指每秒钟显示多少帧图像,通常以“帧每秒”(FPS)来衡量。帧率决定了视频、游戏或动画的流畅度和细腻程度。(Unity动画的帧率是60FPS)
常见的帧率有:
- 24 FPS:电影行业的标准帧率,适用于大多数电影和剧集。
- 30 FPS:常用于电视节目、网络视频、部分游戏和一些流媒体平台。
- 60 FPS:常见于高质量游戏和高清视频,能提供更加流畅的画面。
- 120 FPS、144 FPS、240 FPS等:高端游戏和专业电竞中使用。
三、动画片段
3D物体,你可以选择在Unity内部进行K帧制作,也可以使用外部软件制作的动画(如:3Dmax、Maya、Blender等)。

内部K帧:
- 打开时间轴窗口。
- 选中需要制作动画的3D物体。
- 在时间轴中创建一个新的动画片段。
- 通过添加关键帧来定义物体的运动轨迹。
外部导入的动画:
- 将带有动画的3D模型以FBX格式导入Unity。
- 在导入设置中,确保勾选了Import Animation选项。
- Unity会自动生成与模型关联的动画片段,无需单独创建。
四、动画状态机
1.给物体创建动画时候会自动创建。



2. 创建多个动画片段。

3. 动画层级:为动画添加更多的层级,层级高的动画播放会覆盖低层级的。

4. 参数:为动画状态机添加控制状态切换的参数。

5. 点击参数面板中的 +号,创建状态切换参数。


6. 添加切换连线。


7. 选中上面绘制的“连线”,设置动画切换参数。



8. 选中动画片段,设置动画播放是否循环。

五、切换动画播放
1. 设置动画播放参数。
animator.SetTrigger("需要触发的动画参数");
2. 新建一个C#脚,命名为“TestAnimation”(代码如下)。
using System.Collections;
using System.Collections.Generic;
using UnityEngine;public class TestAnimation : MonoBehaviour
{private Animator animator;private void Awake(){animator = transform.GetComponent<Animator>();}private void Update(){if(Input.GetKeyDown(KeyCode.Alpha0)){animator.SetTrigger("待机动画");}if(Input.GetKeyDown(KeyCode.Alpha1)){animator.SetTrigger("移动动画");}}
}
3. 将 TestAnimation 脚本,挂载我们创建的动画对象上。

4. 运行Unity进行测试。

六、工业组装案例实现
素材下载链接!!!!
| https://csdnres.oss-cn-beijing.aliyuncs.com/VR%E5%B7%A5%E4%B8%9A%E7%BB%84%E8%A3%85%E6%A1%88%E4%BE%8B.zip |
6.1 导入资源
1. 新建一个脚本,命名为 “CameraManager” ,用来管理相机漫游功能(代码如下)。
using UnityEngine;/// <summary>导览相机</summary>
public class CameraManager : MonoBehaviour
{private Transform tourCamera;public float moveSpeed = 1.0f;public float rotateSpeed = 90.0f;public float shiftRate = 2.0f;// 按住Shift加速private Vector3 direction = Vector3.zero;private Vector3 speedForward;private Vector3 speedBack;private Vector3 speedLeft;private Vector3 speedRight;private Vector3 speedUp;private Vector3 speedDown;private void Start(){if (tourCamera == null) tourCamera = gameObject.transform;}private void Update(){if (Application.isEditor){getDirection();tourCamera.Translate(direction * moveSpeed * Time.deltaTime, Space.World);}}private void getDirection(){if (Input.GetKeyDown(KeyCode.LeftShift)) moveSpeed *= shiftRate;if (Input.GetKeyUp(KeyCode.LeftShift)) moveSpeed /= shiftRate;speedForward = Vector3.zero;speedBack = Vector3.zero;speedLeft = Vector3.zero;speedRight = Vector3.zero;speedUp = Vector3.zero;speedDown = Vector3.zero;if (Input.GetKey(KeyCode.W)) speedForward = tourCamera.forward;if (Input.GetKey(KeyCode.S)) speedBack = -tourCamera.forward;if (Input.GetKey(KeyCode.A)) speedLeft = -tourCamera.right;if (Input.GetKey(KeyCode.D)) speedRight = tourCamera.right;if (Input.GetKey(KeyCode.E)) speedUp = Vector3.up;if (Input.GetKey(KeyCode.Q)) speedDown = Vector3.down;direction = speedForward + speedBack + speedLeft + speedRight + speedUp + speedDown;if (Input.GetMouseButton(1)){tourCamera.RotateAround(tourCamera.position, Vector3.up, Input.GetAxis("Mouse X") * rotateSpeed * Time.deltaTime);tourCamera.RotateAround(tourCamera.position, tourCamera.right, -Input.GetAxis("Mouse Y") * rotateSpeed * Time.deltaTime);direction = v3RotateAround(direction, Vector3.up, Input.GetAxis("Mouse X") * rotateSpeed * Time.deltaTime);direction = v3RotateAround(direction, tourCamera.right, -Input.GetAxis("Mouse Y") * rotateSpeed * Time.deltaTime);}}private Vector3 v3RotateAround(Vector3 source, Vector3 axis, float angle){Quaternion q = Quaternion.AngleAxis(angle, axis);return q * source;}
}
2. 新建一个新的场景,并在 Main Camera 对象上挂载 “CameraManager” 脚本。

3. 导入素材提供的“UI”文件,全选所有UI图片,将Texture Type 改成 Sprite(2D and UI)。

4. 在 Assets 单击右键,再弹出的面板中点击 Import Package->Custom Package... 按钮,导入“工业模型.unitypackage”。


6.2 搭建UI和场景
1. 将 “工业模型” 拖放到 Hierarchy(层级) 视图。

2. 将 Main Camera 位置调整为(0,1.2,-4)。

3. 创建一个 Canvas 命名为“UIRoot”。

4. 创建一个Image,将 Source Image 设置为“StartButton1”。并调整图片宽和高设置为(350,350)并命名为“背景”。


5. 将上面创建的 “背景” 对象,复制2份,分别命名为“外圆”、“内圆”,并将“外圆”的 Source Image 设置为 “StartButton2”,“内圆”的Source Image 设置为 “StartButton2”。

6. 创建一个 Text,命名为“标签”,文本内容设置为“开始组装”,并调整合适的字体大小。


7. 新建一个空对象,命名为“开始组装按钮”。


8. 调整 “开始组装按钮” 的宽度和高为合适大小。

9. 将 “背景”、“外圆”、“内圆”、“标签” 4个对象,设置为“开始组装按钮”的子对象。

10. 给“开始组装按钮”对象,添加 Button 组件。

6.3 开始组装按钮添加动画
1. 的选中上面创建的 “开始组装按钮” 对象,点击 Window->Animation->Animation 按钮。创建一个动画控制器,命名为“开始组装按钮动画”。

2. “外圆” 对象,在60帧的位置,记录关键帧,逆时针旋转360度。

3. “内圆” 对象,在60帧的位置,记录关键帧,顺时针旋转360度。

4. 平滑 “外圆”、“内圆” 的运动曲线,让其匀速运动。

5. 完成后的效果如下。

6.4 拆解工业模型
1. 将 “工业模型” 的零件,通过位移工具和旋转工具 随意摆放到桌面右边位置。

6.4 制作零件动画
1. 选择 “cube 8” 零件,创建动画片段,并命名为“cube 8_待机”。


2. 在 “cube 8_待机” 动画片段,0帧地方,插入一个关键帧。

3. 新建一个新的动画片段,命名为“cube 8_组装”。


4. 制作 “cube 8” 零件,的位移和旋转动画。让其组装会原来的位置。

5. 将动画循环播放取消掉。
6. 在动画状态机中新建2个属性,命名为“待机”和“组装”。


7. 设置状态机的触发条件。

8. 新建一个C#脚本,命名为“ClickModel”,用来管理点击模型时候播放“组装”动画(代码如下)。
using System.Collections;
using System.Collections.Generic;
using UnityEngine;public class ClickModel : MonoBehaviour
{private Animator animator;private void Awake(){animator = transform.GetComponent<Animator>();}private void OnEnable(){animator.SetTrigger("待机");}private void OnMouseDown(){animator.SetTrigger("组装");}
}
9. 将“ClickModel”脚本,挂载到“cube 8”对象上。

10. 给“cube 8”添加,”Box Collider” 组件。
11. 按照上面的步骤将剩下的零件都制作一遍。
七、添加按钮事件
1. 将 “工业模型” 默认隐藏,并显示“UIRoot”。

2. 给 “开始组装按钮” 添加 Button 组件。


3. 设置按钮点击事件(如下图所示)。



八、播放声音
1. 在工业模型上添加“Audio Source” 组件。

2. 设置一个AudioClip。



九、播放视频
1. 新建一个“Canvas”,命名为“视频播放”。

2. 将 Canvas 的 Render Mode 调整为“World Space”。

3. 在“视频播放”画布上,创建一个“Raw Image”。


4. 在 Raw Image 对象上,Video Player,并设置 Video Clip。

5. 调整“视频播放”画布大小和位置信息。

