人机交互技术 课件10梦幻森林案例教学_第1页
人机交互技术 课件10梦幻森林案例教学_第2页
人机交互技术 课件10梦幻森林案例教学_第3页
人机交互技术 课件10梦幻森林案例教学_第4页
人机交互技术 课件10梦幻森林案例教学_第5页
已阅读5页,还剩22页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

人机交互技术Human-ComputerInteractionTechnology——基于LeapMotion的《梦幻森林》案例学习目的和要求1

重点和难点2《梦幻森林》LeapMotion和完善3

课后总结4目录CONTENTS学习指导建议重点掌握LeapMotion基本手势控制函数,能够替换不同的手部模型控制场景中的物体将LeapMotion与Unity3D进行连接,能够理解相关的参数设定,并且能够熟练的掌握位移、换色等基本操作强化练习LeapMotion的使用,通过相关的粒子特效案例增加趣味性、通过群组行为的控制使其和其他知识单元能够紧密结合,并且能够掌握相关的可穿戴设备的优缺点,参加各项学科赛事本章的学习建议在实验室的环境中进行,能够结合相应的设备进行不断的测试,同时本章的案例源代码在本书的配套光盘中,课后的案例和课程回顾等保存在本书的慕课资源中,建议读者先学习本章的基础知识,在最后通过线上教学资源进行不断的提升和课程的内容的加强练习。

学习目的和要求1学习目的和要求目的:

通过对《梦幻森林》案例的分析和学习,了解完整项目的制作过程,学习交互设计思路。将素材与技术更好的结合。目的:

通过对《梦幻森林》案例的分析和学习,了解完整项目的制作过程,学习交互设计思路。将素材与技术更好的结合。要求:

基于《梦幻森林》案例的了解结合对LeapMotion的学习,设计并创新新的交互创意和ji'yu玩法。

重点和难点2重点和难点重点:

掌握LeapMotion的基础知识,学会灵活运用,完善项目。难点:

对LeapMotion的运用,研究出符合自己主题的功能,设计合理有趣。LeapMotion和项目完善3LeapMotion和项目完善本节主要是对《梦幻森林》案例的最后一个交互模块LeapMotion交互和整个项目最好完善部分的分析,在《梦幻森林》的LeapMotion中,用简单的交互方式,实现蝴蝶群对LeapMotion手部的追踪。LeapMotion和项目完善首先,先导入LeapMotion,进入场景测试设备是否正常。,正常状态如下图所示将3D场景导入到LeapMotion场景中,导入蝴蝶资源包,添加进入场景中。LeapMotion和项目完善LeapMotion和项目完善以下脚本负责控制蝴蝶的群组行为控制。usingSystem.Collections;usingSystem.Collections.Generic;usingunityEngine;publicclassBufferController:MonoBehaviour{publicfloatspeed=1;publicVector3velocity=Vector3.forward;privateVector3startVelocity;publicTransformtarget;publicVector3sumForce=Vector3.zero;

LeapMotion和项目完善

publicfloatm=10;publicfloatseparationDistance=3;publicList<GameObject>seprationNeighbors=newList<GameObject>();publicfloatseparationWeight=1;//publicVector3separationForce=Vector3.zero;//分离的力publicfloatalignmentDistance=6;publicList<GameObject>alignmentNeighbors=newList<GameObject>();publicfloatalignmentWeight=3;publicVector3alignmentForce=Vector3.zero;//队列的力publicfloatcohesionWeight=1;publicVector3cohesionForce=Vector3.zero;//聚合的力publicfloatcheckInterval=0.2f;publicfloatanimRandomTime=2f;

privateAnimationanim;

LeapMotion和项目完善

privatevoidStart(){target=GameObject.Find("Target").transform;startVelocity=velocity;InvokeRepeating("CalcForce",0,checkInterval);anim=GetComponentInChildren<Animation>();Invoke("PlayAnim",Random.Range(0,animRandomTime));}voidPlayAnim(){anim.Play();}voidCalcForce(){print("calcForce");sumForce=Vector3.zero;separationForce=Vector3.zero;

LeapMotion和项目完善//计算分离的力seprationNeighbors.Clear();Collider[]colliders=Physics.OverlapSphere(transform.position,separationDistance);foreach(Collidercincolliders){if(c!=null&&c.gameObject!=this.gameObject){seprationNeighbors.Add(c.gameObject);}}foreach(GameObjectneighborinseprationNeighbors){Vector3dir=transform.position-neighbor.transform.position;separationForce+=dir.normalized/dir.magnitude;}if(seprationNeighbors.Count>0){separationForce*=separationWeight;sumForce+=separationForce;}

//计算队列的力alignmentNeighbors.Clear();//清空邻居每执行一次清空一次colliders=Physics.OverlapSphere(transform.position,alignmentDistance);//物理检测colliders的集合foreach(Collidercincolliders)//查找出来每一个Collider在colliders里找{if(c!=null&&c.gameObject!=this.gameObject)//c.gameObject!=this.gameObject是检测本身,排除自己{alignmentNeighbors.Add(c.gameObject);//检测到的添加到c.gameObject}}Vector3avgDir=Vector3.zero;//定义一个参数存储平均朝向

LeapMotion和项目完善foreach(GameObjectninalignmentNeighbors)//遍历所有的alignmentNeighbors{avgDir+=n.transform.forward;//把所有的n.transform都给平均朝向}if(alignmentNeighbors.Count>0)//如果队列的邻居大于0就是alignmentNeighbors不为空{avgDir/=alignmentNeighbors.Count;//得到平均朝向alignmentForce=avgDir-transform.forward;//alignmentForce平均朝向+transform.forward=avgDiralignmentForce*=alignmentWeight;sumForce+=alignmentForce;}//聚合的力if(alignmentNeighbors.Count>0){Vector3center=Vector3.zero;

LeapMotion和项目完善foreach(GameObjectninalignmentNeighbors){center+=n.transform.position;}center/=alignmentNeighbors.Count;Vector3dirToCenter=center-transform.position;cohesionForce+=dirToCenter.normalized*velocity.magnitude;cohesionForce*=cohesionWeight;sumForce+=cohesionForce;}//保持恒定飞行速度的力Vector3engineForce=velocity.normalized*startVelocity.magnitude;sumForce+=engineForce;Vector3targetDir=target.position-transform.position;sumForce+=(targetDir.normalized-transform.forward)*speed*20;}

LeapMotion和项目完善voidUpdate(){Vector3a=sumForce/m;velocity+=a*Time.deltaTime;//transform.rotation=Quaternion.LookRotation(velocity);transform.rotation=Quaternion.Slerp(transform.rotation,Quaternion.LookRotation(velocity),Time.deltaTime*3);transform.Translate(transform.forward*Time.deltaTime*velocity.magnitude,Space.World);}}LeapMotion和项目完善完成之后,添加脚本。右手相同脚本,将脚本中的Left改成Right即可,将脚本挂在新建的两组蝴蝶的目标上。usingunityEngine;usingSystem.Collections.Generic;usingLeap;usingLeap.unity;publicclassLeft1:MonoBehaviour{LeapProviderprovider;voidStart(){provider=FindObjectOfType<LeapProvider>()asLeapProvider;}voidUpdat

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论