Layaair 3D场景使用

环境: Layaair  1.7.22

            Unity3d 5.6.3

实现效果:

unity3d 导出 场景文件
动画的控制
Laya.Sprite3D 脚本的挂载
对于Laya.Sprite3D 碰撞的触发实现
 

 

Unity3D 中的场景

 

程序入口

 // 程序入口
class GameMain {
    constructor() {
        //初始化引擎
        Laya3D.init(0, 0, true);
 
        //适配模式
        Laya.stage.scaleMode = Laya.Stage.SCALE_FULL;
        Laya.stage.screenMode = Laya.Stage.SCREEN_NONE;
 
        //开启统计信息
        Laya.Stat.show();
 
        //添加3D场景
        //var scene: Laya.Scene = Laya.stage.addChild(new Laya.Scene()) as Laya.Scene;
 
        // //添加照相机
        // var camera: Laya.Camera = (scene.addChild(new Laya.Camera(0, 0.1, 100))) as Laya.Camera;
        // camera.transform.translate(new Laya.Vector3(0, 3, 3));
        // camera.transform.rotate(new Laya.Vector3(-30, 0, 0), true, false);
        // camera.clearColor = null;
 
        //添加方向光
        // var directionLight: Laya.DirectionLight = scene.addChild(new Laya.DirectionLight()) as Laya.DirectionLight;
        // directionLight.color = new Laya.Vector3(0.6, 0.6, 0.6);
        // directionLight.direction = new Laya.Vector3(1, -1, 0);
 
        // //添加自定义模型
        // var box: Laya.MeshSprite3D = scene.addChild(new Laya.MeshSprite3D(new Laya.BoxMesh(1, 1, 1))) as Laya.MeshSprite3D;
        // box.transform.rotate(new Laya.Vector3(0, 45, 0), false, false);
        // var material: Laya.StandardMaterial = new Laya.StandardMaterial();
        // material.diffuseTexture = Laya.Texture2D.load("res/layabox.png");
        // box.meshRender.material = material;
 
        ///需要加载的3D资源列表  和 UI资源  
        let resArray : Array<any> = [
            { url:"res/Rources3D/LayaScene_Shooting/Shooting.ls",   type:SceneBehavior, clas:SceneBehavior}, //3D 场景
            { url:"res/atlas/comp.atlas",                           type:Laya.Loader.ATLAS}, 
        ];            
        Laya.loader.create(resArray, Laya.Handler.create(this,this.onCompelt),Laya.Handler.create(this, this.onProgress));
    }
 
 
            //加载完成
    private onCompelt():void   
    {
         let scene:SceneBehavior   =  Laya.loader.getRes("res/Rources3D/LayaScene_Shooting/Shooting.ls");
         Laya.stage.addChild(scene);    
 
        //  var directionLight: Laya.DirectionLight = scene.addChild(new Laya.DirectionLight()) as Laya.DirectionLight;
        //  directionLight.color = new Laya.Vector3(0.6, 0.6, 0.6);
        //  directionLight.direction = new Laya.Vector3(1, -1, 0);  
 
         let camera = scene.Camar;
         camera.addComponent(CamerBehavior);
 
         let ball :Laya.MeshSprite3D = scene.Ball;
         ball.addComponent(BallBehavior);
 
         let wall : Laya.Sprite3D = scene.Wall;
         wall.addComponent(WallBehavior);
 
         let cube : Laya.Sprite3D = scene.Cube;
         cube.addComponent(CubeBehavior);
 
         let rigid:Laya.Sprite3D = scene.BallRigid;
         rigid.addComponent(RigidbodyBehavior);
         
 
        //  console.log("position.name:",ball.name);
        //  console.log("position:",ball.transform.position);
 
         let uiMain:UiGameMain =new UiGameMain(cube.getComponentByType(CubeBehavior));
         Laya.stage.addChild(uiMain);
 
    }
     //加载进度
    private onProgress(pro:number):void
    {
        console.log("加载进度:"+pro);
    }
}
new GameMain();


 clas:SceneBehavior  是我们自定义的场景 类型

加载完成之后 就直接把我们的资源 和 SceneBehavior 绑定了

 /*
* Scene 场景管理;
*/
class SceneBehavior extends Laya.Scene {
 
    public get Ball():Laya.MeshSprite3D 
    {
        return this.getChildAt(3) as Laya.MeshSprite3D;
    }
 
    public get Wall():Laya.MeshSprite3D 
    {
        return  this.getChildAt(2) as Laya.MeshSprite3D;
    }
 
    public get Camar():Laya.MeshSprite3D 
    {
        return this.getChildAt(0) as Laya.MeshSprite3D;
    }
 
    public get Cube():Laya.MeshSprite3D 
    {
        return this.getChildAt(4) as Laya.MeshSprite3D;
    }
 
    public get BallRigid():Laya.MeshSprite3D 
    {
        return this.getChildAt(5) as Laya.MeshSprite3D;
    }
 
    constructor(){
        super();
        console.log("SceneBehavior");
    }
 
}
场景中是有 动画 播放的 处理脚本在 这里

 /*
* name;
*/
class UiGameMain extends ui.MainSceneUI{
    private cube:CubeBehavior; 
    private ani:Laya.Animator;
    constructor(cube:laya.d3.component.Component3D){
        super();
 
        this.on(Laya.Event.CLICK, this, this.onClick);       
 
        this.cube = cube as CubeBehavior;
        this.ani  = this.cube.gameobject.getComponentByType(Laya.Animator) as Laya.Animator;
 
          
    }
 
    private onClick(e:Laya.Event):void
    {
        switch(e.target)
        {
            case this.btn_Play:
                console.log("btn_Play");
                //this.ani.currentPlayClip;
                this.ani.play("move");
                this
            break;
            case this.btn_stop:
                 console.log("btn_stop");
                 this.ani.play("idle");
            break;
 
            case this.btn_add:
            
            break;
        }      
    }
 
 
}
 碰撞触发器在这里

/*
* name;
*/
class CubeBehavior extends Laya.Script{
    public gameobject:Laya.Sprite3D;
    constructor(){
        super()
    }
 
    public _initialize(owner: Laya.Sprite3D): void {
        super._initialize(owner);
        this.gameobject = owner;
 
    }
 
 
    ///碰撞器和 触发器的区别是 一个可以穿透 一个不可以
 
    //触发器 开始 可以触发
    public onTriggerEnter(other: Laya.Collider): void
    {
        console.log("cube==> onTriggerEnter");
    }
 
    public onTriggerExit(other: Laya.Collider): void
    {
        console.log("cube==> onTriggerExit");
    }
 
    public onTriggerStay(other: Laya.Collider): void
    {
       // console.log("cube==> onTriggerStay");
    }
    //触发器 完
 
 
    //碰撞器 不可以触发
    public  onCollisionEnter(collision:Laya.Collision):void
    {
        console.log("cube==> onCollisionEnter");
    }
 
    public  onCollisionStay(collision:Laya.Collision):void
    {
 
    }
 
    public  onCollisionExit(collision:Laya.Collision):void
    {
        console.log("cube==> onCollisionExit");
    }
    //碰撞器
}
这里上传了 U3D 和 Layaair 的工程
--------------------- 
作者:nicepainkiller 
来源:CSDN 
原文:https://blog.csdn.net/nicepainkiller/article/details/84636112 
版权声明:本文为博主原创文章,转载请附上博文链接!

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值