Laya2.0.2【疯狂怪兽车】游戏制作经验记录

2019-05-16  本文已影响0人  半透明Feng

最近用Laya2.0.2制作了3D【疯狂怪兽车】的跑酷 + 射击弹幕类微信小游戏项目,在做的过程中躺了不少次坑,最终还是躺过了,在这里分享一下我的一些躺坑经验和解决方案,同时也顺便疯狂打个广告2333333。

疯狂怪兽车
游戏截图

Laya客户端

微信小游戏性能优化
物理系统(后面优化移除掉用物理检测了,只有主角车和boss车才有物理)
粒子制作
  1. 需要遵循Laya的粒子规则来制作粒子


    粒子规则
  2. 注意Color over LifeTime的渐变色块不要超过4个,否则会有问题


    Color over LifeTime

插件导出

可使用unity2018.3.8.0f1, Laya2.0.2导出插件

导出管理
考虑到模型会有很多,我将要导出的资源分了多个场景来管理,这样的好处是可以减少导出时间并且能更好维护文件目录。
例如疯狂怪兽车中,我将角色汽车模型分到一个场景,道路一个场景,粒子场景,子弹效果场景,此时场景有4个可以分别导出管理lh模型,如下图

模型场景管理
导出参数如下,以汽车模型为例:
导出参数
最终导出到Laya客户端的效果:
image.png

LayaNative

突然收到要制作原生安卓包并对接渠道,顿时懵逼了的感觉,毕竟安卓没怎么写过,但有挑战才能有进步,还是硬着头皮上了。喵了一下Java的语法有点类似C#,突然心就安乐了。

音乐

原生和Laya2.0互相通讯

Laya的类必须要导出window静态类,并且要暴露静态方法给原生调用,如下JaveCallback.ts代码,必须要注意最后那个if语句,如果不写就会报undefine。

export default class JaveCallback {
    public static CallbackTest() {
        alert("Java 调用 Laya");
    }
}
if (Laya.Browser.window) {
    Laya.Browser.window.JaveCallback = JaveCallback;
}

仿效微信的onShow和onHide方法
游戏中有一个需求是当app进入后台或前台需要关闭或开启音效,如果直接执行回调onShow和onHide,是会报错的,因为此时游戏还没初始化完成,调用就会报undefine。
所以暂时想到了一个解决方案:Laya进入游戏后先通知原生初始化,然后原生记录初始化标记后再执行回调onShow和onHide函数,这样才能避免一开始就报错。具体代码如下:

Laya端的代码

export default class JaveCallback {
    private static readonly conchIOS: string = "Conch-ios";
    private static readonly conchAndroid: string = "Conch-android";
    private static os: string = "";
    private static bridge: Laya.IPlatformClass = null;

    public static onShow() {
        alert("Java 调用 Laya onShow()");
    }

    public static onHide() {
        alert("Java 调用 Laya onHide()");
    }
    //进入游戏后,执行init函数
    public static init(){
        if (Laya.Browser.window.conch) {
            this.os = conchConfig.getOS();
            if (this.os == JaveCallback.conchIOS) {
                this.bridge = Laya.PlatformClass.createClass("JSBridge");
                this.bridge.call("initGame:");
            }
            else if (this.os == JaveCallback.conchAndroid) {
                this.bridge = Laya.PlatformClass.createClass("demo.JSBridge");
                this.bridge.call("initGame");
            }
        }
    }
}
if (Laya.Browser.window) {
    Laya.Browser.window.JaveCallback = JaveCallback;
}

android studio端的代码
先找到Laya的JSBridge代码,增加一个Init属性,并增加一个initGame方法给Laya调用

public class JSBridge {
    public static Handler m_Handler = new Handler(Looper.getMainLooper());
    public static Activity mMainActivity = null;

    public static Boolean Init = false;
    public static void initGame(){
        Init = true;
    }
    //后面省略..........
    //一堆代码..........
    //后面省略..........
    //一堆代码..........
}

找到Laya的MainActivity代码,然后找到onPause和onResume方法.
在onPause方法除插入

 if(JSBridge.Init == true) {
   ConchJNI.RunJS("JaveCallback.onHide()");
 }

在onResume方法除插入

if(JSBridge.Init == true){
   ConchJNI.RunJS("JaveCallback.onShow()");
}

最终代码如下:

protected void onPause()
{
    super.onPause();
    if(isLoad){
        if(JSBridge.Init == true) {
           ConchJNI.RunJS("JaveCallback.onHide()");
        }
        mPlugin.game_plugin_onPause();
    }
}
protected void onResume()
{
    super.onResume();
    if(isLoad){
       mPlugin.game_plugin_onResume();
       if(JSBridge.Init == true){
           ConchJNI.RunJS("JaveCallback.onShow()");
       }
    }
}

Laya2.0打安卓原生包
按文档处理即可正常发包

Laya1.0打包安卓后gradle报错
需要修改Gradle Script里面的build.gradle,并将下面两行代码增加到里面

 google()
 jcenter()
buildscript {
    repositories {
        mavenLocal()
        google()
        jcenter()
    }
    dependencies {
        classpath 'com.android.tools.build:gradle:3.1.2'
    }
}

然后修改 compileSdkVersion 26targetSdkVersion 26,最后升级一下SDK即发布APK包

遗留问题

  1. 发热问题
  2. 苹果打包
上一篇 下一篇

猜你喜欢

热点阅读