Bạn không sử dụng API đầu vào cho giao diện người dùng mới. Bạn đăng ký các sự kiện giao diện người dùng hoặc triển khai giao diện tùy thuộc vào sự kiện.
Đây là những cách thích hợp để phát hiện các sự kiện trên các thành phần giao diện người dùng mới:
. Image
, RawImage
và Text
Thành phần:
Triển khai giao diện cần thiết và ghi đè chức năng của nó. Ví dụ bên dưới triển khai các sự kiện được sử dụng nhiều nhất.
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
Component:
Bạn sử dụng các sự kiện để đăng ký để nhấp chuột Button:
public class ButtonClickDetector : MonoBehaviour
{
public Button button1;
public Button button2;
public Button button3;
void OnEnable()
{
//Register Button Events
button1.onClick.AddListener(() => buttonCallBack(button1));
button2.onClick.AddListener(() => buttonCallBack(button2));
button3.onClick.AddListener(() => buttonCallBack(button3));
}
private void buttonCallBack(Button buttonPressed)
{
if (buttonPressed == button1)
{
//Your code for button 1
Debug.Log("Clicked: " + button1.name);
}
if (buttonPressed == button2)
{
//Your code for button 2
Debug.Log("Clicked: " + button2.name);
}
if (buttonPressed == button3)
{
//Your code for button 3
Debug.Log("Clicked: " + button3.name);
}
}
void OnDisable()
{
//Un-Register Button Events
button1.onClick.RemoveAllListeners();
button2.onClick.RemoveAllListeners();
button3.onClick.RemoveAllListeners();
}
}
Nếu bạn đang phát hiện một cái gì đó khác hơn Nút Bấm vào nút sau đó sử dụng phương pháp 1. Ví dụ, nút nút xuống và không Click, sử dụng IPointerDownHandler
và chức năng OnPointerDown
của nó từ phương pháp 1.
. InputField
Component:
Bạn sử dụng các sự kiện để đăng ký để đăng ký InputField nộp:
public InputField inputField;
void OnEnable()
{
//Register InputField Events
inputField.onEndEdit.AddListener(delegate { inputEndEdit(); });
inputField.onValueChanged.AddListener(delegate { inputValueChanged(); });
}
//Called when Input is submitted
private void inputEndEdit()
{
Debug.Log("Input Submitted");
}
//Called when Input changes
private void inputValueChanged()
{
Debug.Log("Input Changed");
}
void OnDisable()
{
//Un-Register InputField Events
inputField.onEndEdit.RemoveAllListeners();
inputField.onValueChanged.RemoveAllListeners();
}
. Slider
phần:
Để phát hiện khi thay đổi giá trị thanh trượt trong suốt kéo:
public Slider slider;
void OnEnable()
{
//Subscribe to the Slider Click event
slider.onValueChanged.AddListener(delegate { sliderCallBack(slider.value); });
}
//Will be called when Slider changes
void sliderCallBack(float value)
{
Debug.Log("Slider Changed: " + value);
}
void OnDisable()
{
//Un-Subscribe To Slider Event
slider.onValueChanged.RemoveListener(delegate { sliderCallBack(slider.value); });
}
Đối với các sự kiện khác, sử dụng Phương pháp 1.
.Dropdown
Component
public Dropdown dropdown;
void OnEnable()
{
//Register to onValueChanged Events
//Callback with parameter
dropdown.onValueChanged.AddListener(delegate { callBack(); });
//Callback without parameter
dropdown.onValueChanged.AddListener(callBackWithParameter);
}
void OnDisable()
{
//Un-Register from onValueChanged Events
dropdown.onValueChanged.RemoveAllListeners();
}
void callBack()
{
}
void callBackWithParameter(int value)
{
}
NONE ĐỐI TƯỢNG UI:
.Đối 3D Object (Mesh Renderer/bất kỳ Collider 3D)
Thêm PhysicsRaycaster
vào Thư viện ảnh sau đó sử dụng bất kỳ của các sự kiện từ Phương pháp 1.
Mã bên dưới sẽ tự động thêm PhysicsRaycaster
vào chính 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);
}
//Implement Other Events from Method 1
}
.Đối 2D Object (Sprite Renderer/bất kỳ 2D Collider)
Thêm Physics2DRaycaster
vào Thư viện ảnh sau đó sử dụng bất kỳ sự kiện từ Phương pháp 1.
Mã bên dưới sẽ tự động thêm Physics2DRaycaster
vào chính 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);
}
//Implement Other Events from Method 1
}
Xin chào @Programmer. Nếu tôi không sử dụng API đầu vào như chạm vào thì nó sẽ hoạt động như thế nào trong thiết bị di động kể từ khi sử dụng điện thoại di động? Cảm ơn –
API UI có nghĩa là hoạt động trên cả thiết bị di động và máy tính để bàn. Đó là mặt tốt của nó và đây không phải là vấn đề gì cả. Tôi sẽ cập nhật điều này để bao gồm 3D khác (Mesh Renderer/Collider) và 2D (Sprite/2D Collider) trong một thời điểm. – Programmer
public void OnPointerClick (PointerEventData eventData) Vì vậy, đây là công việc là điện thoại di động liên lạc? Tôi không nhận ra nó vì tôi cũng đang sử dụng nó. Haha .. –