unity3d 场景打包、_unity3d打包以后场景暗 - CSDN
  • 压缩包内包含: 1> 可以打开Scene 2> Unity 打包.exe文件压缩包 3> Fancy_World.unitypackage
  • unity场景和资源打包

    千次阅读 2018-11-20 15:09:13
    using UnityEngine; using UnityEditor; using System.Collections; #if UNITY_EDITOR public class CreatScensAndBunddle : MonoBehaviour { ...Assets/资源打包")]  static void BuildAllAssetBundle...

    using UnityEngine;
    using UnityEditor;
    using System.Collections;

    #if UNITY_EDITOR
    public class CreatScensAndBunddle : MonoBehaviour {

        [MenuItem("Assets/资源打包")]
        static void BuildAllAssetBundles_pc()
        {
            BuildTarget targetPlatform = BuildTarget.StandaloneWindows64;
            BuildAssetBundleOptions assetBundleOptions = BuildAssetBundleOptions.None;
            string outputPath = Application.dataPath + "/MyAssets";
            //string outputPath = Application.dataPath + "/StreamingAssets/WebGL";
            BuildPipeline.BuildAssetBundles(outputPath, assetBundleOptions, targetPlatform);
        }


        [MenuItem("Assets/场景选择打包")]
        static void MyBuild()
        {
            var path2 = EditorUtility.OpenFilePanel("打开我们的UNITY场景", "", "unity");     //场景选择
            string[] paths = path2.Split('/');
            string MyScens = paths[paths.Length - 1];
            string MysecnsName = MyScens.Split('.')[0];
            Debug.Log(MysecnsName);
            // 需要打包的场景名字

            string[] levels = { "Assets/" + MysecnsName + ".unity" };        
            // 注意这里【区别】通常我们打包,第2个参数都是指定文件夹目录,在此方法中,此参数表示具体【打包后文件的名字】
            // 记得指定目标平台,不同平台的打包文件是不可以通用的。最后的BuildOptions要选择流格式
            BuildPipeline.BuildPlayer(levels, Application.dataPath + "/" + MysecnsName + ".unity3d", BuildTarget.StandaloneWindows64, BuildOptions.BuildAdditionalStreamedScenes);
            // 刷新,可以直接在Unity工程中看见打包后的文件
            AssetDatabase.Refresh();

        }
    }
    #endif

    展开全文
  • 3d游戏中 一个场景往往比较大 如果游戏的进行需要下载一个10M甚至更大的场景时 加载...我们知道unity3d中的内置地形是使用一张高度图 加载场景时 首先加载地形并显示 再去加载场景中的部件(比如树、房子等) 将...

    http://www.cnblogs.com/dosomething/archive/2012/04/07/2436353.html

    3d游戏中  一个场景往往比较大  如果游戏的进行需要下载一个10M甚至更大的场景时  加载所用的时间会导致很大部分玩家的流失

    我们知道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  

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

    展开全文
  • Unity3d 场景打包与加载

    千次阅读 2015-10-28 10:15:09
    我们知道unity3d中的内置地形是应用一张高度图 对其地形进行打包今后 发明 那么若是采取unity3d的内置地形作为游戏中的地形时 起首加载地形并显示 再去加载场景中的部件(比如树、房子等) 将会很有须要
    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  

    当然这实用于场景中的模型有重用的现象
    展开全文
  • 前文“unity使用AssetBundle使用记录一--打包”中所说的打包是指的普通资源的打包,本文说的是场景打包成AssetBundle,然后加载出来。 场景打包成AssetBundle资源和普通资源打包有所区别。这时,需要通过Application...

    前文“unity使用AssetBundle使用记录一--打包”中所说的打包是指的普通资源的打包,本文说的是场景打包成AssetBundle,然后加载出来。

    场景打包成AssetBundle资源和普通资源打包有所区别。这时,需要通过Application.LoadLevel等接口来加载场景。用到的接口如下:

    1. Application.LoadLevel();  该接口可以通过名字或索引载入AssetBundle文件中包含的对应场景。当加载新场景时,所有之前加载的GameObject都被销毁。该接口已弃用,被SceneManager.LoadScene()代替了。
    2. Application.LoadLevelAsync(); 该接口和Application.LoadLevel()作用相同,不同的是该接口是对场景进行异步加载。已弃用,被SceneManager.LoadSceneAsync()代替。
    3. Application.LoadLevelAdditive(); 该接口不同于Application.LoadLevel()的是,加载场景不会销毁之前加载的GameObject。该接口已弃用,被SceneManager.LoadScene()(重载的函数,第二个参数决定了是否销毁之前加载的GameObject代替了。
    4. Application.LoadLevelAdditiveAsync();Application.LoadLevelAdditive()不同的是,该接口是异步加载。已弃用,被SceneManager.LoadSceneAsync()(重载的函数,第二个参数决定了是否销毁之前加载的GameObject)代替。

    以下是打包场景时用到的两种方式的代码:(测试都能正确打包)

    首先获得鼠标选中文件的代码:

    //得到鼠标选中的文件,只返回文件名及后缀
    static public string[] GetSelectionFile()
        {
            //SelectionMode.Unfiltered          返回整个选择。
            //SelectionMode.TopLevel            仅返回最顶层选择的变换;其他选择的子对象将被过滤出。
            //SelectionMode.Deep                返回选择和所有选择的子变换。
            //SelectionMode.ExcludePrefab       从选择中排除任何预制。
            //SelectionMode.Editable            排除任何对象不得修改。
            //SelectionMode.Assets              仅返回资源目录中的资源对象。
            //SelectionMode.DeepAssets          如果选择包含文件夹,也包含所有资源和子目录。
            //SelectionMode.OnlyUserModifiable  仅用户可修改??
            UnityEngine.Object[] arr = Selection.GetFiltered(typeof(UnityEngine.Object), SelectionMode.TopLevel);
    
            string[] str = new string[arr.Length];
            for (int i = 0; i < arr.Length; ++i)
            {
                string s = Application.dataPath.Substring(0, Application.dataPath.LastIndexOf('/')) + "/" + AssetDatabase.GetAssetPath(arr[i]);
                Debug.Log(s);
                str[i] = s.Substring(s.LastIndexOf('/') + 1, s.Length - s.LastIndexOf('/') - 1);
                Debug.Log(str[i]);
            }
    
            return str;
        }

    测试代码:

    //打包场景为AssetBundle,使用BuildStreamedSceneAssetBundle方式
    static void CreateSceneAssetBundle_BuildStreamedSceneAssetBundle()
        {
            string[] name = GetSelectionFile();
            for (int i = 0; i < name.Length; ++i)
            {
                string name2 = Application.dataPath + "/StreamingAssets/" + name[i].Substring(0, name[i].LastIndexOf('.')); //将要生成AssetBundle资源的路径及名称
                name[0] = Application.dataPath + "/Resources/" + name[0]; //场景文件路径及名称
                BuildPipeline.BuildStreamedSceneAssetBundle(name, name2, BuildTarget.Android); //官方说法是已弃用,但是没找到替代的函数,好奇怪!
            }
        }
    //打包场景为AssetBundle,使用BuildPlayer方式
        static void CreateSceneAssetBundle_BuildPlayer()
        {
            string[] name = GetSelectionFile();
            for (int i = 0; i < name.Length; ++i)
            {
                string name2 = Application.dataPath + "/StreamingAssets/" + name[i].Substring(0, name[i].LastIndexOf('.'));
                name[0] = Application.dataPath + "/Resources/" + name[0];
                //通过服务器用WWW下载方式,采用BuildOptions.BuildAdditionalStreamedScenes打包能正确下载并加载。
                //使用None不能,能获取文件流,但是AssetBundle报null,为什么?并且包大小差距很大,前者30多kb,后者30000多kb,万倍了!
                BuildPipeline.BuildPlayer(name, name2, BuildTarget.Android, BuildOptions.None);
                //BuildOptions.None                            执行特定的编译没有任何指定的设置或而外的任务。
                //BuildOptions.Development                     编译一个独立播放器开发版本。
                //BuildOptions.AutoRunPlayer                   运行内置播放器。
                //BuildOptions.ShowBuiltPlayer                 显示内置播放器。
                //BuildOptions.BuildAdditionalStreamedScenes   编译一个unity3d资源包,其中包括额外的流场景。
                //BuildOptions.AcceptExternalModifications...  不要覆盖播放器目录,但接受用户的修改。
                //BuildOptions.WebPlayerOfflineDeployment      同时拷贝UnityObject.js和网络播放器,所以它不会从互联网上下载。
                //BuildOptions.ConnectWithProfiler             在编辑器启动带有连接到分析器的播放器。
                //BuildOptions.AllowDebugging                  允许脚本调试器附加到远程播放器。
                //BuildOptions.SymlinkLibraries                当生成iOS XCode项目时,符号连接运行时库。(更快的迭代时间)。
            }
        }

    以下是测试加载用到的代码:(测试场景加载正确)

    //场景文件名称
        public string sceneAssetBundle;
        //场景名称
        public string sceneName;
        
        IEnumerator Start()
        {
            string path = "file://" + Application.dataPath + "/Resources/" + sceneAssetBundle;
            WWW www = WWW.LoadFromCacheOrDownload(path, 0);
            yield return www;
    
            if (www.error == null)
            {
                //下面一行的对象ab貌似没用到,但是不写的话,会报错如下:
                //Scene 'sceneAssetBundleTest'(-1) couldn't be loaded because it has not been added to the build settings or the AssetBundle has not been loaded.
                //To add a scene to the build settings use the menu File->Build Settings...
                //UnityEngine.SceneManagement.SceneManager:LoadSceneAsync(String)
                //场景没加到Build Settings的场景列表中或AssetBundle未加载。
                AssetBundle ab = www.assetBundle; //将场景通过AssetBundle方式加载到内存中
                
                //Application.LoadLevelAsync(sceneName); 弃用的
                AsyncOperation asy = SceneManager.LoadSceneAsync(sceneName); //sceneName不能加后缀,只是场景名称
                yield return asy;
            }
            else
            {
                Debug.LogError(www.error);
            }
    	}

    展开全文
  • unity场景打包及动态加载

    千次阅读 2019-11-19 17:48:11
    我的项目需求会根据不同的业务环境,选择进入不同的3D场景进行作业,客户的需求变动,随时会需要增加新的3D场景,因此采用将场景整体打包成bundle的方式,程序框架通过配置表获取场景地址,动态加载并更新。...
  • [Unity3d]打包Assetbundle并加载

    万次阅读 多人点赞 2019-09-02 11:04:00
    无意中发现了一个巨牛巨牛的人工智能教程,忍...由于我们要将模型资源放在远程的服务器端,但如果直接放fbx模型是不可以加载的,所以我们可以将fbx做成预设或者是直接将其打包成assetbundle格式的,然后通过www来...
  • Unity3D打包场景,用www加载场景

    千次阅读 2018-07-13 10:51:27
    1、打包场景(转) 把场景文件打包成 .unity3d 后缀的文件。using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEditor; public class PackAB { #if UNITY_EDITOR ...
  • Unity3D AssetBundle的打包和加载

    千次阅读 2019-06-29 14:38:31
    Unity3D AssetBundle的打包和加载 目录 1、博文介绍 2、具体思路和写法 (1)AB包的打包 (2)AB包的加载 (3)AB包卸载 3.资源包下载 4.推送 5.结语 1、博文介绍 本篇博客主要起记录和学习作用,简单...
  • 新建工程,在Assets下新建Scenes文件夹存放场景文件,新建三个Cube,分别命名为Cube、Cube1、Cube2并保存为三个预设,保存新建在ReanAssetbundle.cs脚本,脚本内容如下: using UnityEngine; using System....
  • Unity3d 命令行打包

    2020-05-09 00:15:32
    项目需要进行两次打包,两个exe公用一套数据,前后两次打包还需要对Unity的Main场景中某物体挂载脚本的一个public bool型变量,每次的手残都需要重头开始,有点无语,所以Google大法让我知道了bat,powershell相关,...
  • unity 3D 打包过程中 我遇见了好多问题 简直能把人气死。之前我使用的是unity 3D 2017.3.0 ,jdk是10.0.1,SDK下载了一个安卓9,一个安卓7,但是在打包过程中,会遇见一个问题 提示不能Gradle打包 ,但是换成...
  • Unity3d之资源打包Assetbundle

    千次阅读 2016-04-10 14:03:27
    传统的打包可以将所有物件制成预设Prefab,打包场景。今天我们来一起学习官方推荐的Assetbundle,它是Unity(Pro)提供的资源打包策略。利用AssetBundle,可以将几乎所有的资源都打包封装,便于客户端更新下载新的...
  • Unity场景打包成AssetBundle并加载

    千次阅读 2019-07-04 15:18:53
    场景打包成AssetBundle资源和普通资源打包有所区别。 打包场景为AssetBundle [MenuItem("Custom Editor/Create Scene")] static void CreateSceneALL () { //清空一下缓存 Caching.CleanCache(); string path = ...
  • Unity3d 固定启动场景

    2020-02-12 14:36:07
    Unity3d的游戏开发中,会存在多个场景同时开发,但是每个场景需要的数据需要一定的顺序,比如登陆场景负责用户的登陆和数据加载,主城场景负责展示当前玩家在主城 中的数据。在开发的过程中,如果不是登陆场景,要...
  • Unity5.x打包场景AssetBundle和加载场景Unity5.x打包场景AssetBundle和加载场景Unity5.x打包场景AssetBundle和加载场景
  • Unity3d场景中出现闪面的解决方法

    千次阅读 2013-05-23 13:34:41
    当你发现在unity3d场景中,发现有闪面的现象,基本上是由于面之间的距离太近导致的,专业术语Z-Fighting,出现这种情况可以调整摄像机的Clipping plane属性中的Near值来解决这个问题。
  • Unity3D打包到热更,超简单的XLua运用一条龙 目录 1、博客介绍 2、XLua环境配置 3、场景搭建和AB包的准备 (1)场景搭建 (2)Lua脚本准备 (3)AB包的准备 4、基础网络环境的搭建 5、热更新的测试 6、...
  • Unity3d 场景大小和drawcall优化

    千次阅读 2015-05-09 16:10:32
    unity3d开发中,为了降低场景的运行消耗,通常要利用Unity3d的静态合批和动态合批。因为动态合批要求的条件比较苛刻。所以大部分用的都是静态核批。 利用静态核批就需要尽量的合并场景的贴图,用相同的材质。并把...
  • 【转载请注明出处】 作者:DrkCore (http://blog.csdn.net/DrkCore)... 近日因为工作的原因笔者开始接触Unity3D游戏引擎,该引擎的一大特色就是支持多种平台,其中自然不能少了我们Android。在Unity3D和Android Stu...
1 2 3 4 5 ... 20
收藏数 4,840
精华内容 1,936
关键字:

unity3d 场景打包、