├── .gitignore ├── ExecutionOrderAttribute ├── Assets │ ├── ExecutionOrderAttribute.meta │ ├── ExecutionOrderAttribute │ │ ├── ExecutionOrderAttribute.cs │ │ └── ExecutionOrderAttribute.cs.meta │ ├── Testing.meta │ └── Testing │ │ ├── NormalBehaviour.cs │ │ ├── NormalBehaviour.cs.meta │ │ ├── Scriptable.cs │ │ └── Scriptable.cs.meta ├── ExecutionOrderAttribute.unitypackage └── ProjectSettings │ ├── AudioManager.asset │ ├── DynamicsManager.asset │ ├── EditorBuildSettings.asset │ ├── EditorSettings.asset │ ├── GraphicsSettings.asset │ ├── InputManager.asset │ ├── NavMeshAreas.asset │ ├── NetworkManager.asset │ ├── Physics2DSettings.asset │ ├── ProjectSettings.asset │ ├── ProjectVersion.txt │ ├── QualitySettings.asset │ ├── TagManager.asset │ ├── TimeManager.asset │ ├── UnityAdsSettings.asset │ └── UnityAnalyticsManager.asset ├── LICENSE └── README.md /.gitignore: -------------------------------------------------------------------------------- 1 | [Ll]ibrary/ 2 | [Tt]emp/ 3 | [Oo]bj/ 4 | [Bb]uild/ 5 | 6 | # Autogenerated VS/MD solution and project files 7 | *.csproj 8 | *.unityproj 9 | *.sln 10 | *.suo 11 | *.tmp 12 | *.user 13 | *.userprefs 14 | *.pidb 15 | *.booproj 16 | 17 | # Unity3D generated meta files 18 | *.pidb.meta 19 | 20 | # Unity3D Generated File On Crash Reports 21 | sysinfo.txt 22 | -------------------------------------------------------------------------------- /ExecutionOrderAttribute/Assets/ExecutionOrderAttribute.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 8afac68233da367498b748fbd0b97973 3 | folderAsset: yes 4 | timeCreated: 1449840497 5 | licenseType: Pro 6 | DefaultImporter: 7 | userData: 8 | assetBundleName: 9 | assetBundleVariant: 10 | -------------------------------------------------------------------------------- /ExecutionOrderAttribute/Assets/ExecutionOrderAttribute/ExecutionOrderAttribute.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | #if UNITY_EDITOR 4 | using System.IO; 5 | using UnityEditor; 6 | #endif 7 | using UnityEngine; 8 | 9 | [AttributeUsage( AttributeTargets.Class, Inherited = false, AllowMultiple = false )] 10 | sealed class ExecutionOrderAttribute : Attribute { 11 | 12 | public readonly int ExecutionOrder = 0; 13 | 14 | public ExecutionOrderAttribute( int executionOrder ) { 15 | ExecutionOrder = executionOrder; 16 | } 17 | 18 | #if UNITY_EDITOR 19 | private const string PB_TITLE = "Updating Execution Order"; 20 | private const string PB_MESSAGE = "Hold on to your butt, Cap'n!"; 21 | private const string ERR_MESSAGE = "Unable to locate and set execution order for {0}"; 22 | 23 | [InitializeOnLoadMethod] 24 | private static void Execute() { 25 | var type = typeof( ExecutionOrderAttribute ); 26 | var assembly = type.Assembly; 27 | var types = assembly.GetTypes(); 28 | var scripts = new Dictionary(); 29 | 30 | var progress = 0f; 31 | var step = 1f / types.Length; 32 | 33 | foreach ( var item in types ) { 34 | var attributes = item.GetCustomAttributes( type, false ); 35 | if ( attributes.Length != 1 ) continue; 36 | var attribute = attributes[0] as ExecutionOrderAttribute; 37 | 38 | var asset = ""; 39 | var guids = AssetDatabase.FindAssets( string.Format( "{0} t:script", item.Name ) ); 40 | 41 | if ( guids.Length > 1 ) { 42 | foreach ( var guid in guids ) { 43 | var assetPath = AssetDatabase.GUIDToAssetPath( guid ); 44 | var filename = Path.GetFileNameWithoutExtension( assetPath ); 45 | if ( filename == item.Name ) { 46 | asset = guid; 47 | break; 48 | } 49 | } 50 | } else if ( guids.Length == 1 ) { 51 | asset = guids[0]; 52 | } else { 53 | Debug.LogErrorFormat( ERR_MESSAGE, item.Name ); 54 | return; 55 | } 56 | 57 | var script = AssetDatabase.LoadAssetAtPath( AssetDatabase.GUIDToAssetPath( asset ) ); 58 | scripts.Add( script, attribute ); 59 | } 60 | 61 | var changed = false; 62 | foreach ( var item in scripts ) { 63 | if ( MonoImporter.GetExecutionOrder( item.Key ) != item.Value.ExecutionOrder ) { 64 | changed = true; 65 | break; 66 | } 67 | } 68 | 69 | if ( changed ) { 70 | foreach ( var item in scripts ) { 71 | var cancelled = EditorUtility.DisplayCancelableProgressBar( PB_TITLE, PB_MESSAGE, progress ); 72 | progress += step; 73 | 74 | if ( MonoImporter.GetExecutionOrder( item.Key ) != item.Value.ExecutionOrder ) { 75 | MonoImporter.SetExecutionOrder( item.Key, item.Value.ExecutionOrder ); 76 | } 77 | 78 | if ( cancelled ) break; 79 | } 80 | } 81 | 82 | EditorUtility.ClearProgressBar(); 83 | } 84 | #endif 85 | } 86 | -------------------------------------------------------------------------------- /ExecutionOrderAttribute/Assets/ExecutionOrderAttribute/ExecutionOrderAttribute.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 894a74d8501e1564db7f274cbf025971 3 | timeCreated: 1449840514 4 | licenseType: Pro 5 | MonoImporter: 6 | serializedVersion: 2 7 | defaultReferences: [] 8 | executionOrder: 0 9 | icon: {instanceID: 0} 10 | userData: 11 | assetBundleName: 12 | assetBundleVariant: 13 | -------------------------------------------------------------------------------- /ExecutionOrderAttribute/Assets/Testing.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 07191c99378218048bc5630d24fec8f6 3 | folderAsset: yes 4 | timeCreated: 1449843089 5 | licenseType: Pro 6 | DefaultImporter: 7 | userData: 8 | assetBundleName: 9 | assetBundleVariant: 10 | -------------------------------------------------------------------------------- /ExecutionOrderAttribute/Assets/Testing/NormalBehaviour.cs: -------------------------------------------------------------------------------- 1 | using UnityEngine; 2 | using System.Collections; 3 | 4 | [ExecutionOrder( 100 )] 5 | public class NormalBehaviour : MonoBehaviour { 6 | 7 | // Use this for initialization 8 | void Start() { 9 | 10 | } 11 | 12 | // Update is called once per frame 13 | void Update() { 14 | 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /ExecutionOrderAttribute/Assets/Testing/NormalBehaviour.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 4e87480c2d9e6f54e87c085fd8def0b3 3 | timeCreated: 1449843152 4 | licenseType: Pro 5 | MonoImporter: 6 | serializedVersion: 2 7 | defaultReferences: [] 8 | executionOrder: 100 9 | icon: {instanceID: 0} 10 | userData: 11 | assetBundleName: 12 | assetBundleVariant: 13 | -------------------------------------------------------------------------------- /ExecutionOrderAttribute/Assets/Testing/Scriptable.cs: -------------------------------------------------------------------------------- 1 | using UnityEngine; 2 | using System.Collections; 3 | 4 | [ExecutionOrder( -50 )] 5 | public class Scriptable : ScriptableObject { 6 | 7 | // Use this for initialization 8 | void Start() { 9 | 10 | } 11 | 12 | // Update is called once per frame 13 | void Update() { 14 | 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /ExecutionOrderAttribute/Assets/Testing/Scriptable.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: e6c7e00ee8fbe6840b997961e3b12066 3 | timeCreated: 1451984651 4 | licenseType: Pro 5 | MonoImporter: 6 | serializedVersion: 2 7 | defaultReferences: [] 8 | executionOrder: -50 9 | icon: {instanceID: 0} 10 | userData: 11 | assetBundleName: 12 | assetBundleVariant: 13 | -------------------------------------------------------------------------------- /ExecutionOrderAttribute/ExecutionOrderAttribute.unitypackage: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Thundernerd/Unity3D-ExecutionOrderAttribute/1b1c3a0a228ff31c8e35a448ca44cb30d8092b97/ExecutionOrderAttribute/ExecutionOrderAttribute.unitypackage -------------------------------------------------------------------------------- /ExecutionOrderAttribute/ProjectSettings/AudioManager.asset: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Thundernerd/Unity3D-ExecutionOrderAttribute/1b1c3a0a228ff31c8e35a448ca44cb30d8092b97/ExecutionOrderAttribute/ProjectSettings/AudioManager.asset -------------------------------------------------------------------------------- /ExecutionOrderAttribute/ProjectSettings/DynamicsManager.asset: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Thundernerd/Unity3D-ExecutionOrderAttribute/1b1c3a0a228ff31c8e35a448ca44cb30d8092b97/ExecutionOrderAttribute/ProjectSettings/DynamicsManager.asset -------------------------------------------------------------------------------- /ExecutionOrderAttribute/ProjectSettings/EditorBuildSettings.asset: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Thundernerd/Unity3D-ExecutionOrderAttribute/1b1c3a0a228ff31c8e35a448ca44cb30d8092b97/ExecutionOrderAttribute/ProjectSettings/EditorBuildSettings.asset -------------------------------------------------------------------------------- /ExecutionOrderAttribute/ProjectSettings/EditorSettings.asset: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Thundernerd/Unity3D-ExecutionOrderAttribute/1b1c3a0a228ff31c8e35a448ca44cb30d8092b97/ExecutionOrderAttribute/ProjectSettings/EditorSettings.asset -------------------------------------------------------------------------------- /ExecutionOrderAttribute/ProjectSettings/GraphicsSettings.asset: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Thundernerd/Unity3D-ExecutionOrderAttribute/1b1c3a0a228ff31c8e35a448ca44cb30d8092b97/ExecutionOrderAttribute/ProjectSettings/GraphicsSettings.asset -------------------------------------------------------------------------------- /ExecutionOrderAttribute/ProjectSettings/InputManager.asset: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Thundernerd/Unity3D-ExecutionOrderAttribute/1b1c3a0a228ff31c8e35a448ca44cb30d8092b97/ExecutionOrderAttribute/ProjectSettings/InputManager.asset -------------------------------------------------------------------------------- /ExecutionOrderAttribute/ProjectSettings/NavMeshAreas.asset: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Thundernerd/Unity3D-ExecutionOrderAttribute/1b1c3a0a228ff31c8e35a448ca44cb30d8092b97/ExecutionOrderAttribute/ProjectSettings/NavMeshAreas.asset -------------------------------------------------------------------------------- /ExecutionOrderAttribute/ProjectSettings/NetworkManager.asset: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Thundernerd/Unity3D-ExecutionOrderAttribute/1b1c3a0a228ff31c8e35a448ca44cb30d8092b97/ExecutionOrderAttribute/ProjectSettings/NetworkManager.asset -------------------------------------------------------------------------------- /ExecutionOrderAttribute/ProjectSettings/Physics2DSettings.asset: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Thundernerd/Unity3D-ExecutionOrderAttribute/1b1c3a0a228ff31c8e35a448ca44cb30d8092b97/ExecutionOrderAttribute/ProjectSettings/Physics2DSettings.asset -------------------------------------------------------------------------------- /ExecutionOrderAttribute/ProjectSettings/ProjectSettings.asset: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Thundernerd/Unity3D-ExecutionOrderAttribute/1b1c3a0a228ff31c8e35a448ca44cb30d8092b97/ExecutionOrderAttribute/ProjectSettings/ProjectSettings.asset -------------------------------------------------------------------------------- /ExecutionOrderAttribute/ProjectSettings/ProjectVersion.txt: -------------------------------------------------------------------------------- 1 | m_EditorVersion: 5.2.0f3 2 | m_StandardAssetsVersion: 0 3 | -------------------------------------------------------------------------------- /ExecutionOrderAttribute/ProjectSettings/QualitySettings.asset: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Thundernerd/Unity3D-ExecutionOrderAttribute/1b1c3a0a228ff31c8e35a448ca44cb30d8092b97/ExecutionOrderAttribute/ProjectSettings/QualitySettings.asset -------------------------------------------------------------------------------- /ExecutionOrderAttribute/ProjectSettings/TagManager.asset: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Thundernerd/Unity3D-ExecutionOrderAttribute/1b1c3a0a228ff31c8e35a448ca44cb30d8092b97/ExecutionOrderAttribute/ProjectSettings/TagManager.asset -------------------------------------------------------------------------------- /ExecutionOrderAttribute/ProjectSettings/TimeManager.asset: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Thundernerd/Unity3D-ExecutionOrderAttribute/1b1c3a0a228ff31c8e35a448ca44cb30d8092b97/ExecutionOrderAttribute/ProjectSettings/TimeManager.asset -------------------------------------------------------------------------------- /ExecutionOrderAttribute/ProjectSettings/UnityAdsSettings.asset: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Thundernerd/Unity3D-ExecutionOrderAttribute/1b1c3a0a228ff31c8e35a448ca44cb30d8092b97/ExecutionOrderAttribute/ProjectSettings/UnityAdsSettings.asset -------------------------------------------------------------------------------- /ExecutionOrderAttribute/ProjectSettings/UnityAnalyticsManager.asset: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Thundernerd/Unity3D-ExecutionOrderAttribute/1b1c3a0a228ff31c8e35a448ca44cb30d8092b97/ExecutionOrderAttribute/ProjectSettings/UnityAnalyticsManager.asset -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2016 Christiaan Bloemendaal 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Unity3D-ExecutionOrderAttribute 2 | An attribute that sets a script's execution order 3 | 4 | * Works on MonoBehaviours and ScriptableObjects 5 | * No need to open the Script Execution Order settings menu 6 | 7 | Code 8 | ------------------------------------------ 9 | ![Testers](http://puu.sh/lRAca/dfebebda87.png) 10 | 11 | All you need to do is add the *[ExecutionOrder(...)]* line on top of your class and you are good to go. 12 | 13 | Result 14 | ------------------------------------------ 15 | ![Result](http://puu.sh/lRA97/3ac2006656.png) 16 | 17 | Every time your code gets recompiled the attributes get checked and updated in the Script Execution Order list. 18 | --------------------------------------------------------------------------------