虚拟化身人物鼠标操控

MMSDT.clickMove()

       在场景中以第一人称的视角控制虚拟化身人物的漫游,鼠标点击地面移动,可控制包括站立、行走、跑步等动作,支持手机触控。

       Tips: 虚拟化身人物模型需绑定动画。

构造函数

      MMSDT.clickMove( parameters: object, callback: array )

       parameters - 数组,包含json格式的对象参数。

           ground - 数组字符串,供鼠标点击的地面网格名称

           focusPic - 字符串,焦点图路径

           scale - 数字,焦点图大小

           height - 数字,焦点图相对被点击地面的高度

           stature - 数字,人的高度

           speed - 数字,移动速度

           avatar - 模型对象,虚拟人物模型

           actions - 数组,动画序列下标,顺序分别为[站立、行走、跑步]

           running - 数字,人物跑步阈值,行走速度达到这个值就调用跑步动画

           rotation - 浮点数,人物旋转弧度

           distance - 数字,视线距离虚拟人物的距离

           collision - 构造函数,碰撞检测器

           light - 数组,添加光线跟踪,人物在地面产生阴影,光源相对人物的坐标方向

           lightIntensity - 数字, 跟踪光线的强度,为0则关闭

       callback - 数组,目标位置坐标。

属性

       .moveSpeed( value )

       改变漫游速度

       value - 数字,漫游速度

       .light( value )

       光线跟踪的光线强度

       value - 字符串,参数里的数组下标

       .location( avatarPosition, cameraPosition )

       位置切换

       avatarPosition - 数组,虚拟化身的新坐标

       cameraPosition - 数组,相机的新坐标

代码示例

var MMS3D_exceptionMesh = []; //需要材质拆分的网格 var MMS3D_instancingMesh = []; //合并实例化网格 //初始化场景 MMSDT.initScene( false, MMS3D_exceptionMesh, MMS3D_instancingMesh ); //设置第3人称鼠标控制器 controls3.maxPolarAngle = Math.PI*0.51; //向下,最大角度限制 controls3.enablePan = false; //是否开启鼠标右键屏幕空间平移 controls3.enableDamping = true; //是否开启惯性阻尼 controls3.dampingFactor = 0.1; //惯性阻尼系数 //使用json文件让场景还原 MMSDT.onloadScene( "models/mms3D_exhibition2.json", function(progress){ if( progress == 'done' ){ //加载完成 onloadDone(); }else if( progress == 'ok' ){ }else{ //显示进度条数字 document.getElementById("loadNum").innerHTML = Math.round( progress )+'%'; } }); var avatar; //虚拟化身人物 var collision; var collision2; //场景加载完成 function onloadDone(){ var options ={ x: [ 490,-462 ], //x轴的最大边界,x轴的最小边界 z: [ 434,-417 ], //z轴的最大边界,z轴的最小边界 y: 1, //镜面高度 mesh: ["01"], //需要反射的地面 opacity: 0.9 //反射度(0~1) } var Reflector = new MMSDT.groundMirror( options ); //初始化地面反射 //把碰撞物模型归集 var collisions = []; var childs=["01","_27","_08","_258","_06"]; //墙,地 //模型再次设置 models[0].traverse( function ( child ) { if ( child.isMesh ) { for( var i=0; i<childs.length; i++ ){ if( child.name == childs[i]){ collisions.push( child ); //归集需要碰撞检测的模型 } } } }); var parameter = { ground: collisions, //碰撞检测物 distance: 18, //前后左右检测的距离 height: 20, //碰撞点高度(前后左右的监测点),需小于人的高度,过高很容易跨越障碍 stature: 40, //人的高度 gravity: 0.2, //重力 enabled: false, //默认碰撞检测关闭 } collision = new MMSDT.collision( parameter ); //碰撞检测(人物) var parameter2 = { ground: collisions, //碰撞检测物 distance: 35, //前后左右检测的距离 height: 2, //碰撞点高度(前后左右的监测点),需小于人的高度,过高很容易跨越障碍 stature: 4, //人的高度 gravity: 0.001, //重力 enabled: true, //默认碰撞检测关闭 } collision2= new MMSDT.collision( parameter2 ); //碰撞检测(相机) //设置虚拟化身人物/////////////////////////////////////////////////////////////////////////// //绑定虚拟化身控制系统 var options = { ground: ["01","_27"], //供鼠标点击的地面网格名称 focusPic: "textures/sequence/focus/", //焦点图路径 scale: 20, //焦点图大小 height: 0.1, //焦点图相对被点击地面的高度 stature: 35, //人的高度 speed: 1.5, //移动速度 avatar: models[1], //虚拟人物模型 actions: [3,1,0], //动画序列下标,顺序分别为[站立、行走、跑步] running: 5, //人物跑步阈值,行走速度达到这个值就调用跑步动画 rotation: 0, //人物旋转弧度 distance: 130, //视线距离虚拟人物的距离 collision: collision, //碰撞检测器 light: [-50,50,50], //添加光线跟踪,人物在地面产生阴影,光源相对人物的坐标方向 lightIntensity: 0.8, //跟踪光线的强度,为0则关闭 } avatar = new MMSDT.clickMove( options ); //初始化鼠标点击地面行走 } //自定义对外函数接口------------------------------------------------------------------------ //行走速度 MMAPI.moveSpeed = function(value){ avatar.moveSpeed( value) ; } //光线强度 MMAPI.changeLight = function(value){ avatar.light( value) ; } //位置切换 MMAPI.toTocation = function(num){ collision2.enabled = false; //关闭相机碰撞检测 switch(num) { case 0: //门口 avatar.location( [0,50,350],[0,50,480] ); //新的位置([人物x坐标,人物y坐标,人物z坐标],[相机x,相机y,相机z]) break; case 1: //A区 avatar.location( [-244,50,-162],[-182,50,-208] ); //新的位置([人物x坐标,人物y坐标,人物z坐标],[相机x,相机y,相机z]) break; case 2: //B区 avatar.location( [251,50,-120],[250,50,-205] ); break; case 3: //C区 avatar.location( [182,50,-163],[210,50,-221] ); break; } setTimeout(function(){ collision2.enabled = true; //开启相机碰撞检测 },500) }

点击查看示例演示 →