• 【Unity3d】3d网页游戏场景打包与加载


    http://www.mysjtu.com/page/M0/S716/716482.html

    3d游戏中 一个场景往往斗劲大 若是游戏的进行须要下载一个10M甚至更大的场景时 加载所用的时候会导致很大项目组玩家的流失

    我们知道unity3d中的内置地形是应用一张高度图 对其地形进行打包今后 发明<=100KB

    那么若是采取unity3d的内置地形作为游戏中的地形时 起首加载地形并显示 再去加载场景中的部件(比如树、房子等) 将会很有须要

    在加载场景中的部件时 可以按照玩家当前地点的地位 由近到远的去加载

    场景中的每个部件实际上并不都是独一无二的

    比如一棵一模一样的树 可能同一个场景中呈如今很多处所 不合的只是树的地位信息

    那么在加载场景的时辰则只须要加载一个树的模型 并记录下N个树的transform信息 将会大大的削减场景所占的空间

    若是模型的重用率较高 那么这个题目的解决将会成倍的削减一个场景所占的空间

    场景在加载时 也只须要下载一个树的模型 并按照transform信息 在指定的地位复制出N棵树即可

    在应用unity3d的BuildPipeline进行打包之前 须要遍历一边所选文件夹下的场景文件

    若是文件的MeshFilter的Mesh为在该文件夹中只呈现了一次 则申明该模型在场景中没有反复 则记录下该模型文件的transform信息 并打包

    若是该Mesh呈现的次数大于一次 则记录下这些和该Mesh雷同的模型的transform信息 打包时包含一个模型和多个transform信息

    在unity3d中有个名为ScriptableObject的类 可以哄骗它来存储本身所需的各类百般的资料

    public class TransformHolder : ScriptableObject
    {
    public int Length;
    public Vector3[] position;
    public Quaternion[] eulerAngles;
    public Vector3[] localScale;
    }

    如许一来 每一个资料包中都包含一个模型和一个TransformHolder类型的文件
    TransformHolder的Length若为1 则申明该模型在场景中只呈现了一次

    若大于1 则可以按照记录的transform信息轮回生成多个

    本来有几百个资料包 大小有十几兆的场景

    用该办法后 变成了二十多个资料包 大小削减到不足2M

    当然这实用于场景中的模型有重用的现象

  • 相关阅读:
    循环队列
    快速排序
    单链表
    数学之美总结
    我要的生活...
    北京,我来了
    冷暖自知 by 张楚
    瞎掰,关于网站的推广和如何摧毁贴吧<上>
    Adobe 拟发布WEB PS
    Web阅读摘录[持续更新]
  • 原文地址:https://www.cnblogs.com/qilinzi/p/2922958.html
Copyright © 2020-2023  润新知