2013-03-26 8 views
5

क्या मुझे वैसे भी अधिसूचित किया जा सकता है (संभावित रूप से कुछ विधि/घटना के माध्यम से) जब ComponentGameObject (और यहां तक ​​कि बाल गेम ऑब्जेक्ट) में जोड़ा जाता है?एक घटक या बच्चे गेमऑब्जेक्ट को अधिसूचित कैसे किया जा सकता है गेमऑब्जेक्ट

जब कुछ घटनाओं उदाहरण के लिए संपादक में होता है मैं चाहता अधिसूचित किया जाना (संभवतः कुछ संपादक स्क्रिप्ट में):

  • एक Component किया गया है एक GameObject उदाहरण
  • एक Component से जुड़ीकिया गया है एक Prefab
  • एक GameObject करने के लिए संलग्न anot के बच्चे बन गया है उसका GameObject आईटेंस

क्या यह संभव है? यदि हां कैसे? EditorApplication.hierarchyWindowChanged

दस्तावेज़ में तदनुसार यह कहा जाता है:

कहा जाता है कि जब भी दृश्य पदानुक्रम बदल गया है


संपादित

मैं क्या चिंता parenting के लिए एक प्रतिनिधि में पता चला।

यह transform.parent बदल गया है, gameObject.name, एक नया खेल वस्तु बनाने, आदि

मैं अभी भी वहाँ जो पदानुक्रम में वस्तु समझा करने के लिए एक रास्ता convinient कर दिया गया है कि अगर समझ में नहीं आता बदला हुआ।

उत्तर

-1

इस सुविधा को आसानी से करने का कोई "अंतर्निहित" तरीका नहीं है। हालांकि, आप इसे दो तरीकों से अनुकरण कर सकते हैं।

  • अपने घटक में Awake() समारोह का उपयोग यह माता पिता gameObject (SendMessage काम करता है बहुत सफाई से इस बात के लिए) है कॉल करने के लिए [ध्यान दें: यह केवल काम करता है जब आप एक नया घटक उदाहरण जोड़ रहे हैं]

या

  • अपने माता-पिता को ट्रैक करने के लिए एक चर बनाएँ। Update() विधि में, मौजूदा माता-पिता को SendMessage को नए माता-पिता को ट्रिगर करने के लिए जांचें।

    यहां स्थिति के लिए काम करने के केवल 2 उदाहरण हैं - वहां बहुत कुछ है। दिन के अंत में, कुछ भी नहीं बनाया गया है (अभी तक), लेकिन निश्चित रूप से एक कार्य-आसपास के दृष्टिकोण से सक्षम है।

1

आप अपने (संपादक केवल) के स्तर का संपादन दृश्य में एक वस्तु में कोई घटक जोड़ने कर सकते हैं:

#if UNITY_EDITOR 
using UnityEditor; 
using UnityEngine; 

public class LevelEditorHelper : MonoBehaviour 
{ 
    LevelEditorHelper() 
    { 
     EditorApplication.hierarchyWindowChanged -= MyHierarchyChangedCallback; 
     EditorApplication.hierarchyWindowChanged += MyHierarchyChangedCallback; 
    } 

    private static void MyHierarchyChangedCallback() 
    { 
     Debug.Log("Hierarchy has changed"); 
    } 
} 
#endif 

तो कॉलबैक के भीतर आप वर्तमान चयनित ऑब्जेक्ट का उपयोग कर सकते (जोड़ा वस्तु होगा सक्रिय चयन करें):

GameObject activeObj = Selection.activeGameObject; 
if(activeObj != null) { 
    ... 

और अब आप को देखने के लिए अपनी मूल जांच सकें, जो कुछ भी अन्य वस्तु से मेल खाता है, और यह सुनिश्चित करने के लिए यह वास्तव में घटना आप (rememb में रुचि रखते हैं है अन्य जांच यह कई अन्य पदानुक्रम परिवर्तनों के लिए भी बुलाया जाएगा), फिर आप जो भी कार्यवाही करना चाहते हैं, उसे करने के लिए आप एक और कार्य कह सकते हैं।

नोट: इस रूप में है इन-गेम दृश्यों के लिए काम नहीं करेगा, यदि आप अपने स्तर संपादक स्क्रिप्ट के साथ सीधे अपने खेल दृश्यों को संपादित तो आप #if UNITY_EDITOR की अधिक सावधान प्लेसमेंट का उपयोग करना होगा और अनावश्यक घटक को हटाने के लिए विचार करें (शायद Start में या यदि संभव हो तो बिल्ड-टाइम पर), या अगर आप उससे खुश हैं तो बस कुछ भी नहीं कर सकते हैं। मेरे मामले में मेरा स्तर संपादक एक संपादक-केवल दृश्य है, और यह संपादक दृश्य के एक विशिष्ट उप-सेट को गेम में उपयोग के लिए एक दृश्य के रूप में सहेजता है।

संबंधित मुद्दे

 संबंधित मुद्दे