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 
 | 
    { 
 | 
    } 
 | 
} 
 |