Development platform: Unity
Programming platform: Visual Studio 2017 or above
Programming language: C#
Reference book: intensive introduction to the official case of UNITY
Returns the storage path relative to the project directory
AssetDatabase.GetAssetPath(Object assetObject)
- For example, Assets/_Scenes/Main.unity.
Returns the first object of the specified type under the path
AssetDatabase.LoadAssetAtPath(string assetPath, Type type)
- assetPath is the path relative to the project directory, and the path is case insensitive
- All platforms under the assetPath path need to use forward slash ("/"), and reverse slash ("\") is not allowed
Create a new object based on the Asset object under the specified path
AssetDatabase.CreateAsset(Object asset, string path)
- path must contain the Asset file extension supported by Unity
For example, materials mat, animation clip anim, any other file class asset - After creation, you can use assetdatabase Addobjecttoasset() adds a new object to the Asset
- This function cannot directly create an Asset from GameObject. It should be implemented by using the function provided by the PrefabUtility class
Create AssetBundle under the specified path
BuildPipeline.BuildAssetBundle(Object mainAsset, Object[] assets, string pathName, BuildAssetBundleOptions assetBundleOptions=BuildAssetBundleOptions.CollectDependencics|BuildAssetBundleOptions.CompleteAssets, BuildTargettargetPlatform=BuildTarget.WebPlayer)
- This function is used to create asset bundles. The key parameters are the first three
- mainAsset: the main object stored in the Asset
- assets: the list of objects to be stored in the Asset, which can be accessed through key values after completion
- pathName: the path of the stored file
Note: the asset bundle created for Standalone and WebPlayer platforms can no longer be used on mobile platforms.
Delete Asset under the specified path
AssetDatabase.DeleteAsset(string path)
- If the deletion is successful, return True
- If the deletion fails or the Asset file under the path does not exist and cannot be deleted, False is returned
Delete Asset immediately under the specified path
Object.DestroyImmediate(Object obj, bool allowDestroyAssets=false)
Creates an empty preform object under the specified path
PrefabUtility.CreateEmptyPrefab(string path)
- Note: if there is a precast body under this path, the new precast body will cover the old precast body (that is, delete the existing precast body and create a new precast body)
Replace the target object targetPrefab with the game object gameObject
PrefabUtility.ReplacePrefab(GameObject gameObject, Obejct targetPrefab, ReplacePrefabOptions options=ReplacePrefabOptions.Default)
Instantiate a new preform based on the preform target
PrefabUtility.InstantiatePrefab(Object target)
- Note: unlike instance(), the preform instantiated by this function is associated with the source preform.
Obtain the AssetBundle file of the specified version at the specified URL
WWW.LoadFromCacheOrDownLoad(string url, int version, uint crc=0)
- The return value is WWW instance
- If the downloaded AssetBundle file of the specified version does not exist in the cache, the specified version will be downloaded from the specified URL and stored in the cache for reuse in subsequent operations rather than downloading again.
Access downloaded AssetBundle content
WWW.assetbundle
Example:
function Start() { var www = new WWW("http://myurl//myBundle.unity3d"); yield www; Instantiate(www.assetBundle.mainAsset); }
Inherit ScriptableObejct class
technological process
- Create subclasses of ScriptableObject and add data members
- Use scriptableobject Createinstance create instance
- To create an AssetBundle using an instance:
AssetDatabase.CreateAsset -> AssetDatabase.LoadAssetPath -> BuildPipeline.BuildAssetBundle -> AssetDatabase.DeleteAsset - Use WWW.assetBundle to access the created assetBundle
Examples
- Create a new script mydata under the root directory of Assets cs
using UnityEngine; using System.Collections.Generic; /// <summary> ///Data member /// </summary> public class MyData : ScriptableObject { public List<Vector3> content; }
- Create a new script MyExporter under the root directory of Assets CS, the script will create a new submenu item MyExporter under the Assetsc menu. After clicking the submenu item, the instance MyData of MyData will be everywhere in the Assets directory assetbundle
using UnityEngine; using UnityEditor; using System.Collection.Generic; public class MyExporter : MonoBehavior { [MenuItem("Assets/MyExporter")] static void MyExec() { MyData md = ScriptableObject.CreateInstance<MyData>(); //Create instance md.content = new List<Vector3>(); md.content.Add(new Vector3(0, 1, 2)); md.content.Add(new Vector3(2, 3, 4)); md.content.Add(new Vector3(3, 4, 5)); string a = "Assets/MyData.asset"; AssetDatabase.CreateAsset(md, a); //Create new object a //Return the first preform of type MyData under the path Object o = AssetDatabase.LoadAssetAtPath(a, typeof(MyData)); string b = "Assets/MyData.assetbundle"; BuildPipeline.BuildAssetBundle(o, null, b); AssetDatabase.DeleteAsset(a); } }
- Create a new script client under the root directory of Assets CS, the script is downloaded through WWW.LoadFromCacheOrDownload()
using UnityEngine; using System.Collections; public class Client : MonoBehaviour { IEnumerator Start() { string a = "file://" + Application.dataPath + "/MyData.assetbundle"; WWW www = WWW.LoadFromCacheOrDownload(a, 1); yield return www; //Judge whether the obtained content is empty if(!string.IsNullOrEmpty(www.error)) { print(www.error); return false; } MyData md = www.assetBundle.mainAsset as MyData; if(md != null) { print(md.content[0]); } } }
- The output result is (0.0, 1.0, 2.0)