当前位置: 首页 > news >正文

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帧:

  1. 打开时间轴窗口。
  2. 选中需要制作动画的3D物体。
  3. 在时间轴中创建一个新的动画片段。
  4. 通过添加关键帧来定义物体的运动轨迹。

外部导入的动画:

  1. 将带有动画的3D模型以FBX格式导入Unity。
  2. 在导入设置中,确保勾选了Import Animation选项。
  3. 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. 调整“视频播放”画布大小和位置信息。

http://www.dtcms.com/a/532424.html

相关文章:

  • 网络运维管理
  • 使用STM32H723VGT6芯片驱动达妙电机
  • 【计算机通识】进程、线程、协程对比讲解--特点、优点、缺点
  • 专业做俄语网站建设上海建设公司注册
  • 南京营销型网站制作建设一个网站需要什么手续
  • POPAI全球启动仪式成功举办|AI×Web3全球算力革命启航
  • PCB笔记
  • C++ 类的学习(六) 虚函数
  • leetcode 2043 简易银行系统
  • 网站插件代码怎么用哪个网站上做自媒体最好
  • 【LeetCode100】--- 97.多数元素【思维导图+复习回顾】
  • Wasserstein 距离简介
  • 南宁网站建设外包vs做的网站如何
  • 【C++】前缀和算法习题
  • GitHub等平台形成的开源文化正在重塑加特
  • 基于单片机的家庭防盗防火智能门窗报警系统设计
  • 响应式网站建设的未来发展网络规划与设计就业前景
  • 【图像处理】图像错切变换
  • Docker环境离线安装-linux服务器
  • 软件设计师知识点总结:结构化开发
  • 持续改变源于团队学习
  • Unity安装newtonsoft
  • Spring Boot3零基础教程,整合 Redis,笔记69
  • 凡科网站官网登录入口wordpress 列表模板
  • 读论文AI prompt
  • 《Ionic 平台:全面解析与深入探讨》
  • 网站做淘宝客有什么要求微网站的优势
  • FFmpeg 基本数据结构 AVStream分析
  • kafka数据同步一致性问题
  • 淘宝网站的建设内容网站建设的平台