22
2017
05

Unity鐢熸垚Tag鏋氫妇浠g爜

        鍦╱nity涓紝tag鏄竴涓ソ涓滆タ锛屾垜浠彲浠ョ敤tag鏉ュ尯鍒嗙墿浣擄紝涔熷彲浠ラ氳繃tag鏉ュ揩閫熷湴鏌ユ壘鐗╀綋銆備絾鏄編涓笉瓒崇殑鏄紝tag鏄竴涓瓧绗︿覆string銆備负浠涔堣缇庝腑涓嶈冻鍛紵

        鍥犱负鍋囧鎴戜滑鍦ㄤ竴涓剼鏈噷闈㈡兂瑕佹湁涓涓猅ag瀛楁锛岄兘鍙兘瀹氫箟涓涓猻tring瀛楁銆

using UnityEngine;

public class TagObjFinder : MonoBehaviour
{
    public string Tag;

    public GameObject[] FindGos { get; private set; }

    public void Start()
    {
        FindGos = GameObject.FindGameObjectsWithTag(Tag);
    }
}

       鑰岃繖鏍风殑璇濓紝鍦ㄧ紪杈戝櫒涓紝灏遍潪甯镐笉鏂逛究濉啓锛屼篃闈炲父瀹规槗鍑洪敊銆

QQ鎴浘20170522210625

       鏈変竴浜涗汉浼氶噰鐢–ustomEditor鐨勬柟娉曪紝鍒╃敤TagField鍙互闈炲父濂藉湴浣跨敤Tag涓嬫媺妗嗐傝繖绉嶉氳繃鑷畾涔夊睘鎬ч潰鏉跨殑鏂规硶鍏跺疄骞朵笉璧炴垚锛屽洜涓烘讳笉鍙兘缁欐瘡涓涓渶瑕佺敤鍒皌ag鐨勮剼鏈兘涓撻棬缁欏畠鍐欎竴涓狢ustomEditor銆

QQ鎴浘20170522210911

        鑰岀浜屼釜鍘熷洜鏄湪浠g爜涓娇鐢ㄤ簡澶ч噺琛ㄧずtag鐨剆tring锛岄潪甯镐笉浼橀泤锛屾煡鎵惧拰缁存姢閮界浉褰撲笉鏂逛究銆傛瘮濡傦細缁忓父鐪嬪埌GameObject.FindGameObjectsWithTag(鈥淧layer鈥)鎴栬呮槸if(gameObject.tag=="GameController鈥);杩欐牱鐨勪唬鐮併

        閭d箞鏈変汉涔熸兂鍒板姙娉曪紝灏辨槸鎵嬪姩瀹氫箟锛宑onst鎵鏈夌殑tag銆傛瘮濡

public const string TagPlayer=鈥漃layer鈥;

public const string TagMainCamera=鈥滿ainCamera鈥;

        纭疄杩欐槸涓涓柟娉曘傞氳繃鏌ユ壘const鍙橀噺鍙互鎵惧埌鎵鏈夌殑寮曠敤锛岄潪甯告柟渚裤傚彲鎯滅殑鏄紝鍦ㄥ睘鎬ч潰鏉夸腑锛屼緷鐒堕渶瑕佹墜鍔ㄥ~鍐欍

        鏃㈢劧const涓嶈鐨勮瘽锛屾槸涓嶆槸鍙互浣跨敤鏋氫妇鍛紵褰撶劧鍙互锛岃屼笖闈炲父浼橀泤銆傚睘鎬ч潰鏉夸腑杩樿兘閫夋嫨锛岄潪甯搁傚悎銆

public enum EmTag

{

    Untagged,

    Respawn,

    Finish,

    EditorOnly,

    MainCamera,

    Player,

    GameController,

}

鎴戜滑鏀瑰啓涓涓婽agObjFinder

using UnityEngine;

public class TagObjFinder : MonoBehaviour
{
    public EmTag Tag;

    public GameObject[] FindGos { get; private set; }

    public void Start()
    {
        FindGos = GameObject.FindGameObjectsWithTag(Tag.ToString());
    }
}

QQ鎴浘20170522211801锛堢湅璧锋潵鍜孴agField鐨勬晥鏋滄槸涓鏍风殑锛

        涓嶈繃鏈変竴涓夯鐑︾殑灏辨槸锛屽鏋滄垜鍦╱nity涓鍔犱簡涓涓猼ag锛屽氨闇瑕佸鍔犲湪浠g爜涓竴涓灇涓惧笺傝繖鏃跺欙紝unity鐨勬槗鎵╁睍鎬у氨鍙戞尌鍑烘潵浜嗭紝鎴戜滑瀹屽叏鍙互鑷姩鐢熸垚杩欎釜EmTag鏋氫妇鐨勪唬鐮併

using System.IO;
using System.Text;
using UnityEditor;
using UnityEditorInternal;
using UnityEngine;

public class TagEnumGenarator : MonoBehaviour
{
    [MenuItem("Tools/GenTagEnum")]
    public static void GenTagEnum()
    {
        var tags = InternalEditorUtility.tags;
        var arg = "";
        foreach (var tag in tags)
        {
            arg += "\t" + tag + ",\n";
        }
        var res = "public enum EmTag\n{\n" + arg + "}\n";
        var path = Application.dataPath + "/Tool/EmTag.cs";
        File.WriteAllText(path, res, Encoding.UTF8);
        AssetDatabase.SaveAssets();
        AssetDatabase.Refresh();
    }
}

        閫氳繃InternalEditorUtility.tags鑾峰彇鍒皍nity涓凡鏈夌殑鎵鏈塼ag锛岀劧鍚庨氳繃File.WriteAllText鏂规硶鍐欏叆鍒颁竴涓猚s鏂囦欢涓紝杩欓噷鎶婅繖涓枃浠禘mTag.cs鏀惧湪浜嗏滱ssets/Tool/鈥濅笅銆

        缂栬瘧瀹屾垚锛宱k銆傝繖鏍峰彧瑕佸鍔爐ag鐨勬椂鍊欙紝鐐瑰嚮涓涓嬭彍鍗曚笂鐨Tools->GenTagEnum灏卞彲浠ュ悓姝ヤ唬鐮佷簡銆傜劧鍚庢剦蹇湴鎶涘純string tag锛屽揩涔愬湴浣跨敤enum tag銆

芦 涓婁竴绡 涓嬩竴绡 禄