@daaoling
2017-01-17T15:00:52.000000Z
字数 5102
阅读 2462
AssetBundle
Unity
Material doesn't have a color property '_Color'
UnityEditor.DockArea:OnGUI()
Material doesn't have a float or range property 'PixelSnap'
UnityEditor.DockArea:OnGUI()
因为editor模式下所有的 platform ab 都是可以用的 并且打 android ab 包必须要把platform转换为android
但是自己写的cg shader 如果打成 android ab 在editor 模式下没有OpenGL 2.0 环境会报错
只有打成windows包
但是好像其他 surface shader 是可以的
参考如下
关于打包shader丢失参数的问题
Material doesn't have a color property '_Color'
UnityEditor.DockArea:OnGUI()
Material doesn't have a float or range property 'PixelSnap'
UnityEditor.DockArea:OnGUI()
http://forum.china.unity3d.com/thread-460-2-1.html
create scene assetbundle Scenes/battle/MapEditor/53.unityin _LoadImmediate failed
可能的原因
* 相同名字 bundle load 加载后
http://forum.unity3d.com/threads/asset-bundle-cant-be-the-same-name.190275
这里经过测试过 发现相同名字不同后缀的单个资源 bundle 是可以的
但是相同名字相同后缀即使路径不同也是不可以的
* Unity3d资源管理分析
你加载了ab重复加载
后期使用 asset guid 来给ab命名 ab的asset name path 随意 guid 也行 相对于 asset path 也行
======================================
[MenuItem("Build/Tools/Test")]
public static void TestSceneAssets()
{
UnityEngine.Object[] assets = new UnityEngine.Object[] { AssetDatabase.LoadAssetAtPath("Assets/Resources/Icon/ectype_chapter/1.png", typeof(UnityEngine.Object)) };
UnityEngine.Object mainAsset = assets[0];
string savePath =
"f:/assetbundles/windows/"
+ "d4fe2a6e186849f4086398d2ceeb0510"
+ ResourceCommon.assetbundleFileSuffix;
BuildPipeline.BuildAssetBundle(
mainAsset, assets, savePath,
BuildAssetBundleOptions.CollectDependencies
| BuildAssetBundleOptions.CompleteAssets
| BuildAssetBundleOptions.DeterministicAssetBundle,
BuildTarget.StandaloneWindows);
}
mTest6.cs
void OnGUI()
{
if (GUI.Button(new Rect(10, 10, 150, 100), "I am a button")) Test();
}
void Test()
{
TextAsset bundleFile = Resources.Load("d4fe2a6e186849f4086398d2ceeb0510") as TextAsset;
AssetBundle assetBundle = AssetBundle.CreateFromMemoryImmediate(bundleFile.bytes);
Object[] assets = assetBundle.LoadAll();
foreach (Object asset in assets)
{
Debug.Log("loaded asset " + asset.name + " of type " + asset.GetType());
}
}
//loaded asset 1 of type UnityEngine.Texture2D
//loaded asset 1 of type UnityEngine.Sprite
======================================
string path = "Assets/NGUI/Examples/Models/Orc/FBX.FBX";
UnityEngine.Object[] assets = new UnityEngine.Object[] {
AssetDatabase.LoadAssetAtPath(path, typeof(UnityEngine.Object)) };
string[] depends = AssetDatabase.GetDependencies(new string[] { path });
foreach (string str in depends)
{
Debug.Log("depency: " + str);
}
//depency: Assets/NGUI/Examples/Models/Orc/FBX@idle.FBX
//depency: Assets/NGUI/Examples/Models/Orc/FBX@idleBreaks.FBX
//depency: Assets/NGUI/Examples/Models/Orc/FBX.FBX
List<string> tmp = new List<string>();
int index = 0;
foreach (Object asset in assets){
Debug.Log("loaded asset " + asset.name + " of type " + asset.GetType());
index++;
tmp.Add(index+"");
}
UnityEngine.Object mainAsset = assets[0];
string savePath =
"f:/assetbundles/windows/"
+ "d4fe2a6e186849f4086398d2ceeb0510"
+ ResourceCommon.assetbundleFileSuffix;
-----1
BuildPipeline.BuildAssetBundle(
mainAsset, assets, savePath,
BuildAssetBundleOptions.CollectDependencies
| BuildAssetBundleOptions.CompleteAssets
| BuildAssetBundleOptions.DeterministicAssetBundle,
BuildTarget.StandaloneWindows); 会收集依赖 比如 fbx@idle 等等
-----2
BuildPipeline.BuildAssetBundleExplicitAssetNames(
assets, tmp.ToArray(), savePath,
BuildAssetBundleOptions.CollectDependencies
| BuildAssetBundleOptions.CompleteAssets
| BuildAssetBundleOptions.DeterministicAssetBundle,
BuildTarget.StandaloneWindows); ///不会收集依赖 比如 fbx@idle 等等
void Test()
{
TextAsset bundleFile = Resources.Load("d4fe2a6e186849f4086398d2ceeb0510") as TextAsset;
AssetBundle assetBundle = AssetBundle.CreateFromMemoryImmediate(bundleFile.bytes);
Object[] assets = assetBundle.LoadAll();
foreach (Object asset in assets)
{
Debug.Log("loaded asset " + asset.name + " of type " + asset.GetType());
}
}
-----1
//loaded asset FBX of type UnityEngine.GameObject
//loaded asset FBX of type UnityEngine.Transform
//loaded asset Orc of type UnityEngine.Mesh
//loaded asset FBX@idle of type UnityEngine.GameObject
//loaded asset FBX@idle of type UnityEngine.Transform
//loaded asset Orc of type UnityEngine.Mesh
//loaded asset idle of type UnityEngine.AnimationClip .etc
-----2
//loaded asset FBX of type UnityEngine.GameObject
//loaded asset FBX of type UnityEngine.Transform
从上述实验看 BuildPipeline.BuildAssetBundle 和 BuildPipeline.BuildAssetBundleExplicitAssetNames 不同之处 就在于后者只打包你当前指定的资源,比如 fix 或者 texture2d 下面的 mesh 和 sprite 不会打包进去 ,并且依赖比如 fbx@idle 也不会打包进去 , 不过这个还好,正好是我们当前的打包策略,依赖由我们自己掌握
这样我们考虑 texture2d 的打包策略和 prefab 的打包策略不一样了 或者 内存中动态生成sprite
参考
http://answers.unity3d.com/questions/586313/load-unity-43-sprites-with-assetbundles.html
- [ ] Object already in stack
- [ ] 菊花问题
- [ ] 字体替换
考虑 新手引导阶段 短线的情况
Resources/battle/Hero
Resources/battle/Solider
Unity3D asset bundle 格式简析 http://blog.codingnow.com/2014/08/unity3d_asset_bundle.html