腳本注解
1. RuntimeInitializeOnLoadMethod
自動(dòng)根據(jù)RuntimeInitializeLoadType選擇一個(gè)時(shí)機(jī)執(zhí)行。靜態(tài)方法
- AfterSceneLoad
在場(chǎng)景加載之后初始化子系統(tǒng)。這意味著子系統(tǒng)將在場(chǎng)景加載完成后進(jìn)行初始化,并在場(chǎng)景加載后的腳本執(zhí)行時(shí)可用。- BeforeSceneLoad
在場(chǎng)景加載之前初始化子系統(tǒng)。這意味著子系統(tǒng)將在場(chǎng)景加載之前進(jìn)行初始化,并在加載場(chǎng)景時(shí)可用。- AfterAssembliesLoaded
在程序集加載完成后初始化子系統(tǒng)。這意味著子系統(tǒng)將在 Unity 引擎加載所有程序集后進(jìn)行初始化,并在加載完所有程序集后的腳本執(zhí)行時(shí)可用。- BeforeSplashScreen
在顯示啟動(dòng)畫面(Splash Screen)之前初始化子系統(tǒng)。這意味著子系統(tǒng)將在顯示啟動(dòng)畫面之前進(jìn)行初始化,并在啟動(dòng)畫面顯示前的腳本執(zhí)行時(shí)可用。- SubsystemRegistration
以便在子系統(tǒng)注冊(cè)時(shí)觸發(fā)相應(yīng)的初始化方法。
[RuntimeInitializeOnLoadMethod(RuntimeInitializeLoadType.BeforeSceneLoad)]
public static void Init()
{
Debug.Log("先把權(quán)限添加進(jìn)列表,然后申請(qǐng)");
//AndroidPermissionMgr.permissionList.Add("android.permission.WRITE_SETTINGS"); 紅米10X不能獲取到此權(quán)限
}
void Start(){
AndroidPermissionMgr.StartCheckPermission(0.02f); //開始申請(qǐng)
}
2. ColorUsage
- 高級(jí)版拾色器,[ColorUsage(showAlpha: true, hdr: true)]
3. Header
- 給這個(gè)變量加上一個(gè)加粗的標(biāo)題顯示在編輯器中的屬性藍(lán)中
4. SerializeField
- 該變量顯示到 Inspector 面板中
5. HideInInspector
- 在 Inspector 面板中,隱藏任何類型的變量
6. Space
- 在Inspector 中與上一個(gè)變量分割一段距離,網(wǎng)上推薦取值 10
7. Range
- 限制數(shù)值型變量的范圍
8. Multiline
- 單行string變?yōu)槎嘈形谋据斎?/li>
9.[RequireComponent(typeof())]
- 在inspector中添加此腳本時(shí)必須要有要求的腳本
10.HelpURL
- 腳本右上角的疑問Url地址
右鍵菜單注解
1. CreateAssetMenu - 針對(duì)ScriptableObject
[CreateAssetMenu(menuName = "ScriptObject/RoadsSetting")]
public class Test{}
菜單欄注解
1. MenuItem
[MenuItem("Tools/做一件事",priority = 0)]
void Todo(){
Debug.Log("做一件事");
}
其中priority為排序優(yōu)先級(jí)
2.AddComponentMenu
將腳本注冊(cè)到Compoment菜單里面
腳本右鍵注解
1. ContextMenu
[ContextMenu("自動(dòng)補(bǔ)空",false,0)]
void AutoAddNull(){
Debug.Log("做一件事");
}
第一個(gè)是顯示的名稱
第二個(gè)是“是否為驗(yàn)證函數(shù)”,即在為true同名方法執(zhí)行前會(huì)先執(zhí)行這個(gè)函數(shù)
第三個(gè)是排序優(yōu)先級(jí)
PrefabUtility 預(yù)制體工具
1.常用方法:
1. InstantiatePrefab(PrefabAssetPath):
該方法用于在場(chǎng)景中實(shí)例化指定路徑的預(yù)制體,并返回實(shí)例化后的游戲?qū)ο蟆?/p>
GameObject go = PrefabUtility.InstantiatePrefab((Object)nullPrefabs, transform) as GameObject;
2. InstantiatePrefabAsGameObject(PrefabAsset):
該方法用于在場(chǎng)景中實(shí)例化指定的預(yù)制體,并返回實(shí)例化后的游戲?qū)ο蟆?/p>
using UnityEditor;
using UnityEngine;
public class MyScript : MonoBehaviour
{
public GameObject prefab;
[MenuItem("Example/Instantiate Prefab")]
private static void InstantiatePrefab()
{
GameObject prefab = AssetDatabase.LoadAssetAtPath<GameObject>("Assets/Prefabs/MyPrefab.prefab");
if (prefab != null)
{
GameObject instance = PrefabUtility.InstantiatePrefab(prefab) as GameObject;
if (instance != null)
{
// 在場(chǎng)景中實(shí)例化預(yù)制體后的處理邏輯
}
}
}
}
3. ReplacePrefab(GameObject, PrefabAsset, ReplacePrefabOptions):
該方法用于將游戲?qū)ο筇鎿Q為指定的預(yù)制體,并返回替換后的預(yù)制體。
using UnityEditor;
using UnityEngine;
public class MyScript : MonoBehaviour
{
public GameObject prefab;
[ContextMenu("Replace With Prefab")]
private void ReplaceWithPrefab()
{
GameObject prefabInstance = PrefabUtility.ReplacePrefab(
gameObject,
prefab,
ReplacePrefabOptions.Default);
if (prefabInstance != null)
{
// 替換為預(yù)制體后的處理邏輯
}
}
}
4. ConnectGameObjectToPrefab(GameObject, PrefabAsset):
該方法用于將游戲?qū)ο筮B接到指定的預(yù)制體,并將其標(biāo)記為預(yù)制體的實(shí)例。
using UnityEditor;
using UnityEngine;
public class MyScript : MonoBehaviour
{
public GameObject prefab;
[ContextMenu("Connect to Prefab")]
private void ConnectToPrefab()
{
PrefabUtility.ConnectGameObjectToPrefab(gameObject, prefab);
// 將游戲?qū)ο筮B接到預(yù)制體后的處理邏輯
}
}
- DisconnectPrefabInstance(GameObject):
該方法用于將游戲?qū)ο髲念A(yù)制體實(shí)例斷開連接,并將其轉(zhuǎn)換為普通的游戲?qū)ο蟆?/p>
using UnityEditor;
using UnityEngine;
public class MyScript : MonoBehaviour
{
[ContextMenu("Disconnect Prefab Instance")]
private void DisconnectPrefabInstance()
{
PrefabUtility.DisconnectPrefabInstance(gameObject);
// 斷開游戲?qū)ο笈c預(yù)制體實(shí)例關(guān)聯(lián)后的處理邏輯
}
}
2.常用事件:
1. prefabInstanceUpdated:
當(dāng)預(yù)制體實(shí)例更新時(shí)觸發(fā)的事件??梢酝ㄟ^訂閱此事件,以在預(yù)制體實(shí)例發(fā)生更改時(shí)執(zhí)行自定義邏輯。
using UnityEditor;
using UnityEngine;
public class MyScript : MonoBehaviour
{
private void OnEnable()
{
PrefabUtility.prefabInstanceUpdated += PrefabInstanceUpdatedHandler;
}
private void OnDisable()
{
PrefabUtility.prefabInstanceUpdated -= PrefabInstanceUpdatedHandler;
}
private void PrefabInstanceUpdatedHandler(GameObject instance)
{
// 預(yù)制體實(shí)例更新事件處理邏輯
Debug.Log("Prefab instance updated: " + instance.name);
}
}
EditorApplication 編輯器
1.常用方法:
1. Play: 啟動(dòng)游戲模式,將編輯器切換到播放模式。
3. Pause: 將游戲暫停,如果游戲正在播放中。
4. IsPlaying: 返回一個(gè)布爾值,指示當(dāng)前是否處于播放模式。
5. IsPaused: 返回一個(gè)布爾值,指示當(dāng)前是否處于暫停狀態(tài)(播放模式下)。
6. IsPlayingOrWillChangePlaymode: 返回一個(gè)布爾值指示當(dāng)前是否處于播放模式或正在切換到播放模式。
7. ExitPlaymode: 退出播放模式。
8. OpenScene(string scenePath): 打開指定路徑的場(chǎng)景。
9. SaveScene: 保存當(dāng)前場(chǎng)景。
10. ReloadLevel: 重新加載當(dāng)前場(chǎng)景。
2.常用事件:
1.delayCall: 在指定的延遲時(shí)間后觸發(fā)的事件。
可以使用此事件來執(zhí)行延遲調(diào)用的邏輯。
using UnityEditor;
using UnityEngine;
public class MyScript : MonoBehaviour
{
[MenuItem("MyMenu/Delayed Method")]
private static void DelayedMethod()
{
EditorApplication.delayCall += DelayedCallback;
}
private static void DelayedCallback()
{
Debug.Log("Delayed Method called.");
}
}
在上述示例中,我們使用 [MenuItem] 特性為自定義菜單項(xiàng)添加了一個(gè) “Delayed Method” 選項(xiàng)。當(dāng)點(diǎn)擊該菜單項(xiàng)時(shí),DelayedMethod 方法會(huì)被調(diào)用。
在 DelayedMethod 方法中,我們訂閱了 EditorApplication.delayCall 事件,并將其回調(diào)方法設(shè)置為 DelayedCallback。這意味著 DelayedCallback 方法將在下一幀或稍后時(shí)間被調(diào)用。
在 DelayedCallback 方法中,我們簡(jiǎn)單地輸出一條日志來表示延遲調(diào)用的方法已被執(zhí)行。
2. playModeStateChanged: 當(dāng)播放模式的狀態(tài)發(fā)生變化時(shí)觸發(fā)的事件。
可以通過訂閱此事件,在播放模式開始、結(jié)束或暫停時(shí)執(zhí)行自定義邏輯。
3. playModeStateChanged (delegate):
與上述事件相同,但使用委托(delegate)訂閱。
4. sceneOpened: 當(dāng)場(chǎng)景被打開時(shí)觸發(fā)的事件。
可以通過訂閱此事件,在場(chǎng)景被打開后執(zhí)行自定義邏輯。文章來源:http://www.zghlxwxcb.cn/news/detail-731125.html
5. sceneClosing: 當(dāng)場(chǎng)景即將關(guān)閉時(shí)觸發(fā)的事件。
可以通過訂閱此事件,在場(chǎng)景關(guān)閉前執(zhí)行自定義邏輯。文章來源地址http://www.zghlxwxcb.cn/news/detail-731125.html
6. hierarchyChanged:當(dāng)hierarchy中的結(jié)構(gòu)發(fā)生改變時(shí)觸發(fā)
using UnityEditor;
using UnityEngine;
public class MyCustomEditor : EditorWindow
{
[InitializeOnLoadMethod]
private static void Initialize()
{
EditorApplication.hierarchyChanged += OnHierarchyChanged;
}
private static void OnHierarchyChanged()
{
// 預(yù)制體更新事件發(fā)生時(shí)執(zhí)行的邏輯
//Debug.Log(Selection.activeGameObject.name);
if (Selection.activeGameObject)
{
if (Selection.activeGameObject.transform.parent)
{
var obj = Selection.activeGameObject.transform.parent.GetComponent<AutoLayout>();
if (obj != null)
{
obj.OnTransformChildrenChanged();
}
}
}
}
}
到了這里,關(guān)于Unity 編輯器常用方法的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!