[开发者心得] 传习录

[复制链接]
1064 |5
本帖最后由 躲猫猫作者_思想的鱼 于 2023-12-13 13:18 编辑

概要:《传习录》是我的学习笔记,旨在记录和整理我在学习口袋方舟时所遇到的问题以及相应的解决方案。通过这个记录,我希望能够分享我的学习心得,为自己和其他学习者提供有价值的参考。

样例:
  • 日期: 2023年01月15日
  • 版本: 1.0.0
  • 问题: 在安装口袋方舟时遇到的问题。
  • 解决方案: 解决方案的思路及实现。

备注:通过《传习录》,我希望能够记录下每一个学习的瞬间,分享问题和解决方案的过程,帮助自己更好地理解和掌握口袋方舟。如果您有任何建议或者想分享您的问题和解决方案,欢迎在评论中与我交流。谢谢您的关注与支持!


回复

使用道具 举报

躲猫猫作者_思想的鱼楼主 发表于 2023-12-13 13:09:14 | 显示全部楼层
本帖最后由 躲猫猫作者_思想的鱼 于 2023-12-13 13:12 编辑

2023年12月13日
版本:v0.27.0.0

在服务端播放动画,无法获取到length,也无法在onFinish后执行后续函数。

在服务端使用Animation播放角色动画,如果资源未优先加载或下载,需要先使用AssetUtil.asyncDownloadAsset(资源id)后才能拿到资源。
https://api-docs.ark.online/classes/mw.Animation.html#length

AssetUtil.asyncDownloadAsset("52998").then((res: boolean) => {
            if (res) {
              let animation = character.loadAnimation("52998");
              animation.loop = 1;
              animation.play();
              console.log('animation.length', animation.length) // 结果 2.07
            }
       })


onFinish作用是动画播放结束时(在动画不被中断且正常播放完成情况下)执行绑定函数。官方api已提示性能限制,服务器不播放动画,仅客户端触发,请在客户端使用该委托。
https://api-docs.ark.online/classes/mw.Animation.html#onfinish
性能限制,服务器不播放动画,仅客户端触发,请在客户端使用该委托。有几种情况下不会触发该委托 1 调用pause方法 2 调用stop方法 3 该动画正在播放,调用play接口。
回复

使用道具 举报

躲猫猫作者_思想的鱼楼主 发表于 2023-12-24 15:38:39 | 显示全部楼层
本帖最后由 躲猫猫作者_思想的鱼 于 2023-12-24 15:40 编辑
数据升级忘了改写this.currentVersion导致游戏无法启动

2023年12月24日
版本:v0.27.0.3

  protected onDataInit(): void {
    // 数据版本号和当前数据版本号不一致时
    while (this.version != this.currentVersion) {
      // 判断当前数据版本号
      switch (this.currentVersion) {
          ...
          case 4:
            this.currentVersion = 5;
            // 在升级的地方对新字段进行初始化
            this.xxxx= 0;
            break;
        default:
          break;
      }
    }
  }

  // 重写获取版本号的接口。通过该接口来指定版本号
  protected get version(): number {
    return 5;
  }


回复

使用道具 举报

躲猫猫作者_思想的鱼楼主 发表于 2024-1-1 13:29:59 | 显示全部楼层
2024年01月1日
版本:v0.28.0.0
在028版本asyncFindScript接口废弃。


        /**
         * 根据GUID异步获得脚本实例
         * @deprecated info:该接口已废弃,在该接口被删除前会仍保持可用,请尽快使用替换方案以免出现问题 since:028 reason:接口废弃 replacement:gameObject.getComponent(ScriptClass);
         * @param GUID GUID
         */
        static asyncFindScript(guid: string): Promise<Script>;



      GameObject.asyncFindGameObjectById("ComponentRoot").then(
        async (ComponentRoot) => {
          let nc = ComponentRoot.getComponent(PlayerControl);



回复

使用道具 举报

躲猫猫作者_思想的鱼楼主 发表于 2024-1-24 22:30:23 | 显示全部楼层
2024年01月24日
版本:v0.28.0.0


问题:编辑器使用的是028,使用触发器碰到NPC或玩家是可以监听到进入的,但是在线上环境029会有概率无法监听。
排查:通过技术排查,当NPC或者玩家静止不动时会100%复现,继续跟踪排查后发现是由于触发器是通过预制体生成的。
解决:通过创建满足游戏使用的触发器直接放在对象中,在游戏中通过数组或Map进行管理。
回复

使用道具 举报

躲猫猫作者_思想的鱼楼主 发表于 2024-1-25 13:14:50 | 显示全部楼层
本帖最后由 躲猫猫作者_思想的鱼 于 2024-1-25 13:19 编辑

2024年01月25日
版本:v0.28.0.0

问题:修改空锚点位置(空锚点下的子节点有特效、触发器)后特效依然在初始位置。造成移动失败的假象。
解决:修改空锚点世界位置后,一定要将子节点下的对象修改他们相对位置,尤其是特效这些。


seekerTriggerGroup.worldTransform.position = new Vector(3000, 2000, 3000);
          let seekerTrigger = seekerTriggerGroup.getChildByName("seekerTrigger");
          seekerTrigger.localTransform.position = new mw.Vector(0, 0, 80);
          let seekerAnimal1 = seekerTriggerGroup.getChildByName("阵法");
          seekerAnimal1.localTransform.position = new mw.Vector(0, 0, 0);
          let seekerAnimal2 = seekerTriggerGroup.getChildByName("禁锢Buff");
          seekerAnimal2.localTransform.position = new mw.Vector(0, 0, 340.00);


回复

使用道具 举报

热门版块
快速回复 返回顶部 返回列表