आप नए UI के लिए इनपुट API का उपयोग नहीं करते हैं। आप UI ईवेंट की सदस्यता लेते हैं या ईवेंट के आधार पर इंटरफ़ेस लागू करते हैं।
नए UI घटकों पर घटनाओं का पता लगाने के लिए ये उचित तरीके हैं:
1 है । Image
, RawImage
और Text
घटक:
आवश्यक इंटरफ़ेस लागू करें और इसके फ़ंक्शन को ओवरराइड करें। नीचे दिया गया उदाहरण सबसे अधिक इस्तेमाल की जाने वाली घटनाओं को लागू करता है।
using UnityEngine.EventSystems;
public class ClickDetector : MonoBehaviour, IPointerDownHandler, IPointerClickHandler,
IPointerUpHandler, IPointerExitHandler, IPointerEnterHandler,
IBeginDragHandler, IDragHandler, IEndDragHandler
{
public void OnBeginDrag(PointerEventData eventData)
{
Debug.Log("Drag Begin");
}
public void OnDrag(PointerEventData eventData)
{
Debug.Log("Dragging");
}
public void OnEndDrag(PointerEventData eventData)
{
Debug.Log("Drag Ended");
}
public void OnPointerClick(PointerEventData eventData)
{
Debug.Log("Clicked: " + eventData.pointerCurrentRaycast.gameObject.name);
}
public void OnPointerDown(PointerEventData eventData)
{
Debug.Log("Mouse Down: " + eventData.pointerCurrentRaycast.gameObject.name);
}
public void OnPointerEnter(PointerEventData eventData)
{
Debug.Log("Mouse Enter");
}
public void OnPointerExit(PointerEventData eventData)
{
Debug.Log("Mouse Exit");
}
public void OnPointerUp(PointerEventData eventData)
{
Debug.Log("Mouse Up");
}
}
२ । Button
घटक:
आप बटन क्लिक पर पंजीकरण के लिए घटनाओं का उपयोग करते हैं:
public class ButtonClickDetector : MonoBehaviour
{
public Button button1;
public Button button2;
public Button button3;
void OnEnable()
{
button1.onClick.AddListener(() => buttonCallBack(button1));
button2.onClick.AddListener(() => buttonCallBack(button2));
button3.onClick.AddListener(() => buttonCallBack(button3));
}
private void buttonCallBack(Button buttonPressed)
{
if (buttonPressed == button1)
{
Debug.Log("Clicked: " + button1.name);
}
if (buttonPressed == button2)
{
Debug.Log("Clicked: " + button2.name);
}
if (buttonPressed == button3)
{
Debug.Log("Clicked: " + button3.name);
}
}
void OnDisable()
{
button1.onClick.RemoveAllListeners();
button2.onClick.RemoveAllListeners();
button3.onClick.RemoveAllListeners();
}
}
यदि आप बटन पर क्लिक करने के अलावा किसी अन्य चीज़ का पता लगा रहे हैं तो विधि 1 का उपयोग करें। उदाहरण के लिए, बटन नीचे और बटन पर क्लिक न करें, विधि 1 से IPointerDownHandler
इसके OnPointerDown
कार्य और उपयोग पर क्लिक करें ।
३ । InputField
घटक:
आप InputField सबमिट करने के लिए पंजीकरण करने के लिए घटनाओं का उपयोग करते हैं:
public InputField inputField;
void OnEnable()
{
inputField.onEndEdit.AddListener(delegate { inputEndEdit(); });
inputField.onValueChanged.AddListener(delegate { inputValueChanged(); });
}
private void inputEndEdit()
{
Debug.Log("Input Submitted");
}
private void inputValueChanged()
{
Debug.Log("Input Changed");
}
void OnDisable()
{
inputField.onEndEdit.RemoveAllListeners();
inputField.onValueChanged.RemoveAllListeners();
}
४ । Slider
घटक:
ड्रैग के दौरान स्लाइडर मान कब बदलता है, यह पता लगाने के लिए:
public Slider slider;
void OnEnable()
{
slider.onValueChanged.AddListener(delegate { sliderCallBack(slider.value); });
}
void sliderCallBack(float value)
{
Debug.Log("Slider Changed: " + value);
}
void OnDisable()
{
slider.onValueChanged.RemoveListener(delegate { sliderCallBack(slider.value); });
}
अन्य घटनाओं के लिए, विधि 1 का उपयोग करें ।
५ । Dropdown
अंग
public Dropdown dropdown;
void OnEnable()
{
dropdown.onValueChanged.AddListener(delegate { callBack(); });
dropdown.onValueChanged.AddListener(callBackWithParameter);
}
void OnDisable()
{
dropdown.onValueChanged.RemoveAllListeners();
}
void callBack()
{
}
void callBackWithParameter(int value)
{
}
गैर- UI OBJECTS:
6 .For 3 डी ऑब्जेक्ट (मेष रेंडरर / कोई 3D कोलाइडर)
PhysicsRaycaster
कैमरे में जोड़ें फिर विधि 1 से किसी भी घटना का उपयोग करें ।
नीचे दिए गए कोड स्वचालित रूप PhysicsRaycaster
से मुख्य में जोड़ देंगे Camera
।
public class MeshDetector : MonoBehaviour, IPointerDownHandler
{
void Start()
{
addPhysicsRaycaster();
}
void addPhysicsRaycaster()
{
PhysicsRaycaster physicsRaycaster = GameObject.FindObjectOfType<PhysicsRaycaster>();
if (physicsRaycaster == null)
{
Camera.main.gameObject.AddComponent<PhysicsRaycaster>();
}
}
public void OnPointerDown(PointerEventData eventData)
{
Debug.Log("Clicked: " + eventData.pointerCurrentRaycast.gameObject.name);
}
}
7। एफ 2 डी ऑब्जेक्ट (स्प्राइट रेंडरर / कोई 2 डी कोलाइडर)
Physics2DRaycaster
कैमरे में जोड़ें फिर विधि 1 से किसी भी घटना का उपयोग करें ।
नीचे दिए गए कोड स्वचालित रूप Physics2DRaycaster
से मुख्य में जोड़ देंगे Camera
।
public class SpriteDetector : MonoBehaviour, IPointerDownHandler
{
void Start()
{
addPhysics2DRaycaster();
}
void addPhysics2DRaycaster()
{
Physics2DRaycaster physicsRaycaster = GameObject.FindObjectOfType<Physics2DRaycaster>();
if (physicsRaycaster == null)
{
Camera.main.gameObject.AddComponent<Physics2DRaycaster>();
}
}
public void OnPointerDown(PointerEventData eventData)
{
Debug.Log("Clicked: " + eventData.pointerCurrentRaycast.gameObject.name);
}
}
ईवेंट सिस्टम का समस्या निवारण:
UI, 2D ऑब्जेक्ट्स (स्प्राइट रेंडरर / कोई 2D कोलाइडर) और 3D ऑब्जेक्ट्स (मेष रेंडरर / कोई 3D कोलाइडर) पर कोई क्लिक नहीं मिला:
A .Check कि आपके पास EventSystem है। EventSystem के बिना यह क्लिक का पता नहीं लगा सकता है। यदि आपके पास यह नहीं है, तो इसे स्वयं बनाएं।
GameObject पर जाएं ---> UI ---> इवेंट सिस्टम । यदि यह अभी तक मौजूद नहीं है तो यह एक EventSystem बना देगा। यदि यह पहले से मौजूद है, तो एकता इसे अनदेखा कर देगी।
बी । यूआई घटक या गेमऑबजेक्ट यूआई घटक के साथ होना चाहिए Canvas
। इसका अर्थ है कि Canvas
UI घटक का जनक होना चाहिए। इसके बिना, EventSystem कार्य नहीं करेगा और क्लिकों का पता नहीं लगाया जाएगा।
यह केवल UI ऑब्जेक्ट्स पर लागू होता है। यह 2D (स्प्राइट रेंडरर / कोई 2D कोलाइडर) या 3D ऑब्जेक्ट्स (मेश रेंडरर / कोई 3D कोलाइडर) पर लागू नहीं होता है।
C। यदि यह एक 3D ऑब्जेक्ट है, PhysicsRaycaster
तो कैमरे से जुड़ा नहीं है। सुनिश्चित करें कि PhysicsRaycaster
कैमरे से जुड़ा हुआ है। अधिक जानकारी के लिए ऊपर # 6 देखें ।
डी । यदि यह एक 2 डी ऑब्जेक्ट है, Physics2DRaycaster
तो कैमरे से जुड़ा नहीं है। सुनिश्चित करें कि Physics2DRaycaster
कैमरा से जुड़ा हुआ है। अधिक जानकारी के लिए ऊपर # 7 देखें ।
ई है.अगर यह एक यूआई वस्तु आप जैसे इंटरफेस कार्यों के साथ पर क्लिक का पता करना चाहते हैं OnBeginDrag
, OnPointerClick
, OnPointerEnter
और में वर्णित अन्य कार्यों # 1 तब पता लगाने कोड के साथ स्क्रिप्ट यूआई वस्तु को संलग्न किया जाना चाहिए आप पर क्लिक करें पता लगाने के लिए चाहते हैं।
F। इसके अलावा, यदि यह एक UI ऑब्जेक्ट है जिस पर आप क्लिक का पता लगाना चाहते हैं, तो सुनिश्चित करें कि कोई अन्य UI ऑब्जेक्ट इसके सामने नहीं है। यदि आप जिस पर क्लिक करना चाहते हैं, उसके सामने एक और UI है, तो यह उस क्लिक को अवरुद्ध कर देगा।
यह सत्यापित करने के लिए कि यह समस्या नहीं है, कैनवस के तहत प्रत्येक ऑब्जेक्ट को अक्षम करें, जिसे आप क्लिक करना चाहते हैं, उसके बाद क्लिक करके देखें कि क्या यह काम करता है।