| using UnityEngine; | 
| using Beebyte.Obfuscator; | 
|   | 
| public class ObfuscatorExample : MonoBehaviour | 
| { | 
|     public Color publicObfuscatedField = Color.red; // <- Obfuscated | 
|     private Color privateObfuscatedField = Color.blue; // <- Obfuscated | 
|   | 
|     private string normalLiteral = "Typical string"; | 
|   | 
|     //Enable string obfuscation for the following: | 
|     private string hiddenLiteral = "^Cannot see me^"; // The client will resolve this string as "Cannot see me", but a code inspector will show it as a byte array containing jibberish | 
|   | 
|     [Rename("RenamedPublicField")] | 
|     public Color OldPublicField = Color.black; // <- Renamed to RenamedPublicField | 
|   | 
|     [Skip] | 
|     private Color visibleColor = Color.blue; // <- This is left as visibleColor | 
|     [SkipRename] | 
|     private Color anotherVisibleColor = Color.blue; // <- This is left as anotherVisibleColor | 
|   | 
|     void Start() // <- Key MonoBehaviour methods like Start are left untouched | 
|     { | 
|         Debug.Log("Started Example"); | 
|   | 
|         Debug.Log(normalLiteral); | 
|         Debug.Log(hiddenLiteral); | 
|         Debug.Log(visibleColor); | 
|         Debug.Log(anotherVisibleColor); | 
|     } | 
|   | 
|     public void ObfuscatedMethod(Color c) // <- Obfuscated method name and parameter | 
|     { | 
|         this.privateObfuscatedField = c; | 
|     } | 
|   | 
|     public Color ObfuscatedMethod() // <- Obfuscated | 
|     { | 
|         return this.privateObfuscatedField; | 
|     } | 
|   | 
|     [SkipRename] | 
|     public Color SkipRenameMethod(Color obfuscatedParameter) // <- Method name is left as SkipRenameMethod, parameter is obfuscated | 
|     { | 
|         return obfuscatedParameter; | 
|     } | 
|   | 
|     [System.Reflection.Obfuscation(ApplyToMembers=false)] // This is equivalent to [SkipRename] | 
|     public Color EquivalentMethod(Color obfuscatedParameter) // <- Method name is left as EquivalentMethod, parameter is obfuscated | 
|     { | 
|         return obfuscatedParameter; | 
|     } | 
|   | 
|     [Skip] | 
|     public Color SkipMethod(Color visibleParameter) // <- Nothing in this method gets obfuscated, including the parameter | 
|     { | 
|         return visibleParameter; | 
|     } | 
|   | 
|     [Rename("MyVisibleRename")] | 
|     public Color OldName(Color obfuscatedParameter) // <- Method name is changed to MyVisibleRename, parameter is obfuscated | 
|     { | 
|         return obfuscatedParameter; | 
|     } | 
|   | 
|     [SkipRename] | 
|     public void OnButtonClick() // <- Button clicks assigned through the inspector should ALWAYS use the SkipRename flag, otherwise they will silently fail | 
|     { | 
|         /* | 
|          * Enable string obfuscation for the following. | 
|          * It worth noting here that obfuscated string literals are best declared as class static variables for performance reasons, | 
|          * however the following examples will still work. | 
|          */ | 
|         Debug.Log("^Button was clicked1^"); // <- This gets obfuscated, and will print: Button was clicked1 | 
|   | 
|         Debug.Log("Button " + "^was^" + "clicked2"); // This won't work and will print: Button ^was^ clicked2 | 
|   | 
|         string was = "^was^"; | 
|         Debug.Log("Button " + was + "clicked3"); // This works, and prints: Button was clicked3 | 
|   | 
|         Debug.Log("Button was clicked4"); | 
|     } | 
|   | 
|     [SkipRename] | 
|     public void OnAnimationEvent() // Animation events assigned through the inspector should be excluded from obfuscation | 
|     { | 
|     }     | 
|   | 
|     public void ObfuscatedButtonMethod() // Button click methods can be obfuscated if they are assigned programatically, e.g. button.onClick.AddListener(ObfuscatedButtonMethod); | 
|     { | 
|     } | 
|   | 
|     [ObfuscateLiterals] //New in version 1.17.0 | 
|     private void LiterallyLotsOfLiterals() | 
|     { | 
|         string we = "We"; | 
|         Debug.Log("Here " + we + "have three obfuscated literals. No markers needed!"); | 
|     } | 
|   | 
|     private void SomeMethodCallingACoroutine() | 
|     { | 
|         StartCoroutine("MyAmazingMethod"); // Coroutine methods need the SkipRename attribute (or System.Reflection.Obfuscation) | 
|     } | 
|   | 
|     [SkipRename] | 
|     private System.Collections.IEnumerator MyAmazingMethod() | 
|     { | 
|         //... | 
|         yield return null; | 
|     } | 
|   | 
| #if UNITY_2018_2_OR_NEWER | 
| #else | 
| #pragma warning disable 618 | 
|     [RPC] | 
|     [ReplaceLiteralsWithName] | 
|     [Rename("9xy")] | 
|     void MyRPCMethod(string message) //This method is renamed to 9xy and all references of the exact string "MyRPCMethod" are replaced with "9xy" | 
|     { | 
|     } | 
|   | 
|     void NetworkingCode() | 
|     { | 
|         NetworkView nView = null; | 
|   | 
|         //Because MyRPCMethod was annotated with the [ReplaceLiteralsWithName] attribute, the "MyRPCMethod" string here will be replaced with "9xy" | 
|         nView.RPC("MyRPCMethod", RPCMode.AllBuffered, "Hello World"); | 
|   | 
|         UnityEngine.Debug.Log("Today I took my MyRPCMethod for a walk"); //This string is not changed. | 
|     } | 
|   | 
|     [RPC] | 
|     void AnotherRPCMethod() //by default, RPC annotated methods are not renamed | 
|     { | 
|     } | 
|   | 
|     /* | 
|      * For 3rd party RPC annotations to be recognised, add the attribute's canonical classname to the "Alternate RPC Annotations" array in Options | 
|      * e.g. Third.Party.SomeOtherRPC | 
|      * | 
|     [SomeOtherRPC] | 
|     void NonUnityRPCMethod() | 
|     { | 
|     } | 
|     */ | 
| #pragma warning restore 618 | 
| #endif | 
| } | 
|   | 
| namespace MyNamespace | 
| { | 
|     [Rename("MovedNamespace.ObfuscatedName")] //Rename can change the namespace too! | 
|     public class MyClass | 
|     { | 
|     } | 
|   | 
|     [Rename("NewName")] //When the namespace isn't specified on a class, it will either leave it in the same namespace or move it to the default namespace if Strip Namespaces is enabled | 
|     public class MyOtherClass | 
|     { | 
|     } | 
| } |