Поэтому я решил изучить Unity, изменив игру Pacman tutorial на рабочем столе, ставшей игрой для Android.На данный момент я попытался заменить клавишу ввода с клавиши со стрелкой на кнопку пользовательского интерфейса в моем скрипте спрайта.Затем перетащите кнопку в поле ввода спрайта. вот изображение поля ввода на моем спрайте.
Сильфонный код, который должен выполняться при нажатии моей кнопки.Однако кнопка, кажется, не вызывает какой-либо метод.
if (rightButton.IsInvoking("OnPointerDown")){
Debug.Log("OnPOinterDOwn() method is called");
Вот полный код моего спрайта:
using UnityEngine;
using System.Collections;
using UnityEngine.UI;
public class PacmanMove : MonoBehaviour {
public float speed = 0.4f;
Vector2 dest = Vector2.zero;
public Button rightButton;
public Button leftButton;
public Button upButton;
public Button downButton;
// Use this for initialization
void Start () {
dest = transform.position;
}
//Update is called in fixed time interval
void FixedUpdate() {
//Move closer to Desstination
Vector2 p = Vector2.MoveTowards(transform.position, dest, speed);
GetComponent<Rigidbody2D>().MovePosition(p);
//Check for input if not moving
if ((Vector2)transform.position == dest) {
if (Input.GetKey(KeyCode.UpArrow) && valid(Vector2.up))
dest = (Vector2)transform.position + Vector2.up;
if (Input.GetKey(KeyCode.RightArrow) && valid(Vector2.right))
dest = (Vector2)transform.position + Vector2.right;
if (Input.GetKey(KeyCode.DownArrow) && valid(-Vector2.up))
dest = (Vector2)transform.position - Vector2.up;
if (Input.GetKey(KeyCode.LeftArrow) && valid(-Vector2.right))
dest = (Vector2)transform.position - Vector2.right;
//Bellow code supposed to be trigger when my UI button is pressed
if (rightButton.IsInvoking("OnPointerDown")){
Debug.Log("OnPointerMethod() is called");
}
}
// Animation Parameters
Vector2 dir = dest - (Vector2)transform.position;
GetComponent<Animator>().SetFloat("DirX", dir.x);
GetComponent<Animator>().SetFloat("DirY", dir.y);
}
bool valid (Vector2 dir) {
//Cast line from 'next to Pac-Man' to 'Pac-man'
Vector2 pos = transform.position;
RaycastHit2D hit = Physics2D.Linecast(pos + dir, pos);
return (hit.collider == GetComponent<Collider2D>());
}
}
Может ли кто-нибудь просветить меня, что мне не хватает?