加载中…
个人资料
探求虚无
探求虚无
  • 博客等级:
  • 博客积分:0
  • 博客访问:45,043
  • 关注人气:4
  • 获赠金笔:0支
  • 赠出金笔:0支
  • 荣誉徽章:
相关博文
推荐博文
谁看过这篇博文
加载中…
正文 字体大小:

《BabylonJs学习笔记-加载unity导出的场景并用键盘控制cube移动》

(2016-04-11 18:06:25)
标签:

babylon

webgl

分类: BabylunJS
分为以下步骤来实现最终效果:
1、在Unity3d中创建出一个cube对象
2、导出.babylon场景
3、加载场景
4、找到cube对象
5、添加按键盘点击事件
6、控制cube移动

一、在Unity中创建场景:
  在Hierarchy面版上右击,创建一个cube,从Project内拖一张图片到Cube上,这样看起来比较美观...
二、导出场景
  在BabyLon官网下载的Exporter中的从Unity导出的资源全部放在Projcet的Editor目录下,然后就可以在菜单栏看到新增的一个BabylonJs选项,然后选择Export to .babylon,进行一些设置就可以导出一个scene.babylon文件了
三、加载场景
  在找到cube之前,必需将场景加载出来,加载场景的方法如下:
///
var Load ={
    scene:null,
    createScene:function () {
    // Get the canvas element from our HTML below
    var canvas = document.getElementByIdx_x_x("renderCanvas");

    // Load the BABYLON 3D engine
    var engine = new BABYLON.Engine(canvas, true);

    BABYLON.SceneLoader.Load("src/", "scene.babylon", engine, function (scene) {


        //attach Camera
        scene.activeCamera.attachControl(canvas);

        // Register a render loop to repeatedly render the scene
         engine.runRenderLoop(function () {
            scene.render();
        });
        Load.scene = scene;
        Objs.LoadObjects(scene);
        alert("LoadOk");
    // Watch for browser/canvas resize events
    window.addEventListener("resize", function () {
        engine.resize();
    });
   
     document.getElementByIdx_x_x('debugLayerButton').addEventListener('click', function () {
                if (scene.debugLayer.isVisible()) {
                    scene.debugLayer.hide();
                } else {
                    scene.debugLayer.show();
                }
            });

    }, null, null);
    }
};
然后在Html文件中加载出这个场景(注意刚才的js文件单独保存,加载时要提示引用),在body标签内写入下面的内容
    <·canvas id="renderCanvas">
    <·button id='debugLayerButton'>Debug layer

    <·script>
      Load.createScene();
    <·/script>
   
四、找到Cube
注意到加载场景时将一些需要进行操作的对象进行缓存存:Objs.LoadObjects(scene);
具体方如下:var Objs={
    cube:null,
    LoadObjects:function(scene){
      cube = scene.getMeshByName("cube");
    }
}
五、添加键盘事件
//对所有按键起作用
document.onkeydown = function(e){
     var keycode = e.keyCode;//仅对keyDown,而且仅显示大写
}
//数字、字母键(按下台起)
 document.onkeypress = function(e){
          var keywhich = e.which;
          var keyChar = String.fromCharCode(keywhich);
          alert(keyChar);
}
六、操作cube的移动
switch (keyChar){
              case "D":
                cube01.position.x += 1;
                  break;
              case "A":
                cube01.position.x -= 1;
                  break;
              case "W":
                cube01.position.y += 1;
                  break;
              case "S":
                cube01.position.y -= 1;
                  break;
              default:
                  break;
          }
      };
总结:
a、找到Mesh的方法有多种、getMeshByName只是其中的一种
b、键盘的事件监听不能写在canvas内
c、添加事件的方法不只这一种
d、Html的事件还有很多,需要进一步研究
e、输入不仅仅有鼠标和键盘、其他的输入方式呢?
f、从unity导出不支持旋转动画
g、实现移动只是对对象的最为简单的一种操作,如何播放对象的动画,如何操作对象的其他数据

0

阅读 评论 收藏 转载 喜欢 打印举报/Report
  • 评论加载中,请稍候...
发评论

    发评论

    以上网友发言只代表其个人观点,不代表新浪网的观点或立场。

      

    新浪BLOG意见反馈留言板 电话:4000520066 提示音后按1键(按当地市话标准计费) 欢迎批评指正

    新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 会员注册 | 产品答疑

    新浪公司 版权所有