在unity中,我們經常通過給物體新增標籤來判斷這個物體是不是我們想要的
但是unity預設只能新增乙個標籤,那如果我們要給乙個物體新增多個標籤應該怎麼辦
首先,我們定義乙個tag.cs類,這個類用來儲存物體的tag資訊
public class tags : monobeh**iour
然後建立乙個單例類tagmanager.cs用來管理tag
public class tagmanager : monobeh**iour
private void awake()
else }}
在tagmanager中增加儲存tag的list和對應物體的dictionary
public list tagslist = new list();
[showininspector]
public dictionary> tagsdictionary = new dictionary>();
但是inspector視窗中修改dictionary中的值後,**時會自動清除資料,所以還要給dictionary賦值
private void inittags()
}然後我們通過在inspector視窗修改list來修改物體的taf
新建乙個extensions.cs,我們在這個類裡面寫一些擴充套件方法
public static class extensions }}
return true;
}//給物體增加 tag
public static void addtag(this gameobject gameobject, params string tags)
else }}
}//給物體刪除tag
public static void removetag(this gameobject gameobject,params string tags)
else
} }}
這樣像下面這樣直接呼叫即可
gameobject.addtag("player","tag1");
gameobject.hastag("player","tag1");
gameobject.removetag("player");
最後tagmanager.cs中通過標籤獲取所有物體
public list findobjswithtag(string tag)
debug.log("不存在標籤為" + tag + "的物體");
return null;
}測試一下
建立兩個掛有tags.cs指令碼的物體
public class tags : monobeh**iour
void update()}}
兩個物體具有的tag分別為tag1,tag2和tag1
tagmanager只有tag1
執行但是這樣當退出play模式後,list中的資料會被清空,所以可以使用scriptableobject進行持久化儲存也可以使用odin等外掛程式直接對字典進行序列化
新建乙個tagsasset.cs
[createassetmenu]
public class tagsasset : scriptibiqqqlableobject
將原先**中tagslist相關的**修改為tagsasset.tags並修繕一下即可
匯入odin外掛程式,使tagmanager繼承自serializedmonobeh**iour
[nonserialized, odinserialize]
public dictionary> tagsdictionary = new dictionary>();
關於odin的高階可以看
Unity 實現給物體動態新增事件
using system.events using system.eventsystems go is the gameobject which need add event go 是物體,因為eventtrigger是unity中的乙個元件,我們要用新增元件的方式來給物體新增事件觸發元件 type...
git 給遠端庫 新增多個url位址
目錄 主頁 一般來說,我們為git增加遠端庫,一般都是 git remote add origin 你可以使用真實的位址來代替 但是你可能想要把你的本地的git庫,既push到github上,又push到開源中國的git osc上,怎麼解決呢。有人可能會用兩個甚至多個遠端庫,即再新增乙個遠端庫git...
表單新增多個檔案
其實方法很簡單這樣只能選擇乙個檔案,這樣就可以選擇多個檔案了,怎麼樣,很方便吧。如果不考慮ie的話,可以使用這個方法。關於js自行生成多個input的就算了吧,懶得看,懶的寫,能簡單就簡單吧。對了,還有乙個重要的問題,選擇多個檔案以後,如何用jquery獲取選中的檔案的標題等屬性呢?jquery好像...