虚拟化身人物键盘操控

MMSDT.avatarControl()

       在场景中以第一人称的视角控制虚拟化身人物的漫游,可控制包括站立、行走、跑步、跳跃等动作。

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

       Tips: W、S、A、D键行走方向,空格键跳跃。

构造函数

      MMSDT.avatarControl( parameters: object )

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

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

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

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

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

           speed - 数字,人物默认移动速度

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

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

           stature - 数字,人物高度矫正,基本与collision中的stature相同

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

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

属性

       .moveSpeed( value )

       改变漫游速度

       value - 数字,漫游速度

       .light( value )

       光线跟踪的光线强度

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

代码示例

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_oldFactory2.json", function(progress){ if( progress == 'done' ){ //加载完成 onloadDone(); }else if( progress == 'ok' ){ }else{ //显示进度条数字 document.getElementById("loadNum").innerHTML = Math.round( progress )+'%'; } }); //如果用<iframe>嵌入,需要获取焦点,否则第1人称漫游时候,键盘WASD不起作用 container.addEventListener( 'pointerdown', function(){ focus(); }, false ); var avatar; //虚拟化身人物 //场景加载完成 function onloadDone(){ //把碰撞物模型归集 var grounds = []; var childs=["ck011","ck012","ck037","ck082","ck255","ck002"]; //地面、墙 //模型再次设置 models[0].traverse( function ( child ) { if ( child.isMesh ) { for( var i=0; i<childs.length; i++ ){ if( child.name == childs[i]){ grounds.push( child ); //归集需要碰撞检测的模型 } } } }); //设置虚拟化身人物/////////////////////////////////////////////////////////////////////////// //定义碰撞检测 var parameter = { ground: grounds, //碰撞检测物 distance: 4, //前后左右检测的距离 height: 8, //碰撞点高度(前后左右的监测点),需小于人的高度,过高很容易跨越障碍 stature: 7, //人的高度 gravity: 0.2, //重力 enabled: false, //默认碰撞检测关闭 } var collision = new MMSDT.collision( parameter ); //初始化碰撞检测 //绑定虚拟化身控制系统 var options = { avatar: models[1], //虚拟人物模型 actions: [3,1,0,2], //动画序列下标,顺序分别为[站立、行走、跑步、跳跃] rotation: Math.PI, //人物旋转弧度 distance: 25, //视线距离虚拟人物的距离 speed: 15, //人物移动速度 running: 50, //人物跑步阈值,行走速度达到这个值就调用跑步动画 collision: collision, //碰撞检测器 stature: 6.2, //人物高度矫正,基本与collision中的stature相同 light: [-10,10,10], //添加光线跟踪,人物在地面产生阴影,光源相对人物的坐标方向 lightIntensity: 5, //跟踪光线的强度,为0则关闭 } avatar = new MMSDT.avatarControl( options ); } //自定义对外函数接口------------------------------------------------------------------------ //行走速度 MMAPI.moveSpeed = function(value){ avatar.moveSpeed( value) ; } //光线强度 MMAPI.changeLight = function(value){ avatar.light( value) ; }

点击查看示例演示 →