【Hello World向】突破次元界限!运用LeapMotion+Unity实现和IL酱的互动
2014-09-06 05:17
363 查看
最近入了个LeapMotion开始学习VR技术,记录下第一个Hello World向的VR Project.
--------------------成果--------------------
点击打开链接
--------------------使用工具--------------------
引擎:Unity 4.5 Pro
控制器开发包:Leap Motion SDK
模型:あいえるたん
模型转换器:MMD4Mecanim 20140830
动画控制器:UnityChan
插件:HeadLook Control
--------------------预备前的知识笔记--------------------
游戏引擎方面使用的是用的比较顺手的Unity,因为考虑到以后要实现在手机上跑,所以最近开始使用Pro版本。
LeapMotion
LeapMotion 使用的是2个光学传感器和红外线来追踪手,手指以及手型工具的。150度视野范围,有效距离大约为1英寸到2英尺。另外要记住的是LeapMotion使用的是右手笛卡尔坐标系。当光线追踪不到手指的时候(例如翻转手面),LeapMotion内置的虚拟手模型能够根据最后的位置推测出手指的姿势和位置。 最近的V2开发者包已经可以实现手指关节的识别定位,认识许多手势。
MMD4Mecanim
模型使用的是IL酱,格式为PMD格式。Unity本身不支持这种格式,于是用到了Noraさん的MMD4Mecanim 模型转换器。
MMD4Mecanim能够转换所有MMD模型的PMD格式文件,而且VMD动作文件也支持转换。
--------------------开始--------------------
1. 新建新工程,导入HandLook Controller包;MMD4Mecanim包;あいえるたん文件夹;(或者其他MMD模型文件夹,包括贴图文件和pmd文件) UnityChan人物包(需要其中的动画组件); LeapMotion SDK中的 Plugins文件夹直接拖进Unity;(仅支持Unity Pro,免费版会显示licence Error,免费版的操作请参照:For
Unity Standard (free license))
2. 然后就是将人物转换为Unity可支持的fbx格式,具体步骤在MMD4Mecanim说明文档中有图文解释。为了不让人物成T字形僵尸状,拖入UnityChan的动画文件,附到你要使用的模型的动画控制器上(如图)。另外在人物上我们还要添加MMD4Mecanim的一个脚本,叫做:MMD4MecanimModel。
3. 将LeapMotion文件夹中的预设物体HandController拖入Hierarchy。调整位置和范围大小。另外把选择手的模型(本例中选择RiggedRightHand手模型)(如图)
4. 至此,基本设置完毕,但是如果你开始用手去触碰IL酱的话,你会发现她一点反应都没有。那是因为人物模型上各部分还没有添加上碰撞体,而且还要手动打开人物的物理引擎,MMD4Mecanim支持Bullet Physics物理引擎(世界著名开源物理引擎之一)。点击人物,在我们刚添加的MMD4MecanimModel脚本中的Physics,将引擎选择为 Bullet Physics。点击 Process 生成碰撞体。另外把Join Local World 的钩去掉。(如图)
5. 另外因为MMD4Mecanim的特殊性,还需要在我们运用到的RigidHand手模型上添加上脚本MMD4MecanimRigidBody(如图)。现在点击播放,接触人物应该会让人物的头发或者衣服飘动起来了。
6. 到现在差不多已经把这个工程完结了,但是人物完全没有互动的意思嘛,怎么能叫做VR呢。所以为了补足,我们还需要让她对我们的接触有所反应,接下来主要是要做:1. 接触到头部后,会把眼睛眯起来,并且会看向手部。
7. 首先要知道,人物通过MMD4Mecanim导入后,角色的脸部表情控制是通过MMD4Mecanim的Morph来实现的。在开始游戏后,可以试着拖拉这些拖动条来看看有什么变化。(如图)
8. 为了能用代码动态的控制这些参数,MMD4Mecanim运用了一个叫MMD4MecanimMorphHelper的脚本,把它附给人物物体,另外我们需要创建一个新脚本来向这个脚本传输数值。新建一个脚本TouchHair,敲上以下代码:
using UnityEngine;
using System.Collections;
public class TouchHair : MonoBehaviour {
public GameObject airo;
private Animator airoAnim;
private MMD4MecanimMorphHelper airoMorph;
private float timeCount;
private bool touch;
void Start () {
airoAnim = airo.GetComponent<Animator>();
airoMorph = airo.GetComponent<MMD4MecanimMorphHelper> ();
timeCount = 0.0f;
touch = false;
}
// Update is called once per frame
void Update () {
if(touch){
timeCount = timeCount + Time.deltaTime;
if(timeCount > 2.0f){
airoMorph.morphName = "";
airoMorph.morphWeight = 0f;
timeCount = 0.0f;
touch = false;
}
}else{
airoMorph.morphName = "";
airoMorph.morphWeight = 0f;
timeCount = 0.0f;
}
print (timeCount);
}
void OnTriggerEnter(Collider col){
airoMorph.morphSpeed = 0.5f;
airoMorph.morphName = "笑い";
airoMorph.morphWeight = 1.0f;
touch = true;
}
void OnTriggerExit(Collider col){
touch = false;
}
}
9. OK,我们姑且把这个脚本完成了,我们需要把这个脚本附给头部,让头部的碰撞体检测到手进入后(OnTriggerEnter),执行相应代码。首先找到 Coll.6.joint_head物体(如图),添加一个胶囊碰撞体,钩上Is Trigger。 添加上刚才我们创建的TouchHair脚本,并且把人物物体拖进Airo框。
10. 最后一步,我们需要让角色能一直看着我们的手(如果想在手碰到头之后看着手,可以试着把HeadLookController脚本给disenable,在接触后enable它)。我们需要在人物身上添加脚本HeadLookController,设置参数如下图
11. OK,设置完毕。
--------------------注意事项--------------------
本例中简写了许多‘为什么这个样做’的表述,另外因为只是记录性而非教学性的博文,所以是在制作完成品上进行回忆说明。
--------------------接下来的阶段--------------------
接下来是准备实现能够和人物进行对话,实现对答,初步大纲已列好。
--------------------参考文献--------------------
Leap motionとMMD4Mecanimでいろいろ触る
Unity+OculusRift+LeapMotionで3Dキャラクターに触れる
LeapMotionを使って画面の中のミクを撫でてみたよ
--------------------工具链接--------------------
MMD4Mecanim
あいえるたん
Head Look Controller
--------------------更新--------------------
因为CSDN博客需要审核缘故,已将博客搬到自己的博客网站:http://imlewis.com/
--------------------成果--------------------
点击打开链接
--------------------使用工具--------------------
引擎:Unity 4.5 Pro
控制器开发包:Leap Motion SDK
模型:あいえるたん
模型转换器:MMD4Mecanim 20140830
动画控制器:UnityChan
插件:HeadLook Control
--------------------预备前的知识笔记--------------------
游戏引擎方面使用的是用的比较顺手的Unity,因为考虑到以后要实现在手机上跑,所以最近开始使用Pro版本。
LeapMotion
LeapMotion 使用的是2个光学传感器和红外线来追踪手,手指以及手型工具的。150度视野范围,有效距离大约为1英寸到2英尺。另外要记住的是LeapMotion使用的是右手笛卡尔坐标系。当光线追踪不到手指的时候(例如翻转手面),LeapMotion内置的虚拟手模型能够根据最后的位置推测出手指的姿势和位置。 最近的V2开发者包已经可以实现手指关节的识别定位,认识许多手势。
MMD4Mecanim
模型使用的是IL酱,格式为PMD格式。Unity本身不支持这种格式,于是用到了Noraさん的MMD4Mecanim 模型转换器。
MMD4Mecanim能够转换所有MMD模型的PMD格式文件,而且VMD动作文件也支持转换。
--------------------开始--------------------
1. 新建新工程,导入HandLook Controller包;MMD4Mecanim包;あいえるたん文件夹;(或者其他MMD模型文件夹,包括贴图文件和pmd文件) UnityChan人物包(需要其中的动画组件); LeapMotion SDK中的 Plugins文件夹直接拖进Unity;(仅支持Unity Pro,免费版会显示licence Error,免费版的操作请参照:For
Unity Standard (free license))
2. 然后就是将人物转换为Unity可支持的fbx格式,具体步骤在MMD4Mecanim说明文档中有图文解释。为了不让人物成T字形僵尸状,拖入UnityChan的动画文件,附到你要使用的模型的动画控制器上(如图)。另外在人物上我们还要添加MMD4Mecanim的一个脚本,叫做:MMD4MecanimModel。
3. 将LeapMotion文件夹中的预设物体HandController拖入Hierarchy。调整位置和范围大小。另外把选择手的模型(本例中选择RiggedRightHand手模型)(如图)
4. 至此,基本设置完毕,但是如果你开始用手去触碰IL酱的话,你会发现她一点反应都没有。那是因为人物模型上各部分还没有添加上碰撞体,而且还要手动打开人物的物理引擎,MMD4Mecanim支持Bullet Physics物理引擎(世界著名开源物理引擎之一)。点击人物,在我们刚添加的MMD4MecanimModel脚本中的Physics,将引擎选择为 Bullet Physics。点击 Process 生成碰撞体。另外把Join Local World 的钩去掉。(如图)
5. 另外因为MMD4Mecanim的特殊性,还需要在我们运用到的RigidHand手模型上添加上脚本MMD4MecanimRigidBody(如图)。现在点击播放,接触人物应该会让人物的头发或者衣服飘动起来了。
6. 到现在差不多已经把这个工程完结了,但是人物完全没有互动的意思嘛,怎么能叫做VR呢。所以为了补足,我们还需要让她对我们的接触有所反应,接下来主要是要做:1. 接触到头部后,会把眼睛眯起来,并且会看向手部。
7. 首先要知道,人物通过MMD4Mecanim导入后,角色的脸部表情控制是通过MMD4Mecanim的Morph来实现的。在开始游戏后,可以试着拖拉这些拖动条来看看有什么变化。(如图)
8. 为了能用代码动态的控制这些参数,MMD4Mecanim运用了一个叫MMD4MecanimMorphHelper的脚本,把它附给人物物体,另外我们需要创建一个新脚本来向这个脚本传输数值。新建一个脚本TouchHair,敲上以下代码:
using UnityEngine;
using System.Collections;
public class TouchHair : MonoBehaviour {
public GameObject airo;
private Animator airoAnim;
private MMD4MecanimMorphHelper airoMorph;
private float timeCount;
private bool touch;
void Start () {
airoAnim = airo.GetComponent<Animator>();
airoMorph = airo.GetComponent<MMD4MecanimMorphHelper> ();
timeCount = 0.0f;
touch = false;
}
// Update is called once per frame
void Update () {
if(touch){
timeCount = timeCount + Time.deltaTime;
if(timeCount > 2.0f){
airoMorph.morphName = "";
airoMorph.morphWeight = 0f;
timeCount = 0.0f;
touch = false;
}
}else{
airoMorph.morphName = "";
airoMorph.morphWeight = 0f;
timeCount = 0.0f;
}
print (timeCount);
}
void OnTriggerEnter(Collider col){
airoMorph.morphSpeed = 0.5f;
airoMorph.morphName = "笑い";
airoMorph.morphWeight = 1.0f;
touch = true;
}
void OnTriggerExit(Collider col){
touch = false;
}
}
9. OK,我们姑且把这个脚本完成了,我们需要把这个脚本附给头部,让头部的碰撞体检测到手进入后(OnTriggerEnter),执行相应代码。首先找到 Coll.6.joint_head物体(如图),添加一个胶囊碰撞体,钩上Is Trigger。 添加上刚才我们创建的TouchHair脚本,并且把人物物体拖进Airo框。
10. 最后一步,我们需要让角色能一直看着我们的手(如果想在手碰到头之后看着手,可以试着把HeadLookController脚本给disenable,在接触后enable它)。我们需要在人物身上添加脚本HeadLookController,设置参数如下图
11. OK,设置完毕。
--------------------注意事项--------------------
本例中简写了许多‘为什么这个样做’的表述,另外因为只是记录性而非教学性的博文,所以是在制作完成品上进行回忆说明。
--------------------接下来的阶段--------------------
接下来是准备实现能够和人物进行对话,实现对答,初步大纲已列好。
--------------------参考文献--------------------
Leap motionとMMD4Mecanimでいろいろ触る
Unity+OculusRift+LeapMotionで3Dキャラクターに触れる
LeapMotionを使って画面の中のミクを撫でてみたよ
--------------------工具链接--------------------
MMD4Mecanim
あいえるたん
Head Look Controller
--------------------更新--------------------
因为CSDN博客需要审核缘故,已将博客搬到自己的博客网站:http://imlewis.com/
相关文章推荐
- 运用Unity实现依赖注入[有参构造注入]
- 运用Unity实现AOP拦截器
- 运用Unity实现依赖注入[结合简单三层实例]
- 运用Unity实现依赖注入[结合简单三层实例]
- 互动大屏,unity透明视频的实现方法:
- 运用Unity结合PolicyInjection实现拦截器[结合操作日志实例]
- Unity中运用UDP广播服务器IP实现局域网联机
- Unity leapmotion开发实录(2)
- 运用Unity实现依赖注入[有参构造注入]
- 针对Leap Motion Unity assets导入Unity后,游戏运行之后看不到手的问题
- 运用Unity实现AOP拦截器[结合异常记录实例]
- 【VR】Leap Motion Unity 脚本参考(目录)
- 利用Leap Motion+JS 实现简易的隔空网页画板
- Develop Leap Motion in ROS Kinetic: Hello World
- 转载 运用Unity实现AOP拦截器[结合异常记录实例]
- 运用Unity实现AOP拦截器[结合异常记录实例]
- 运用Unity实现依赖注入[结合简单三层实例]
- 运用Unity结合PolicyInjection实现拦截器
- 运用Unity的组件创建服务器和客户端,实现游戏网络化
- Unity Motion Blur 运动模糊的实现