единство делает подвижный спрайт кликабельным - PullRequest
0 голосов
/ 25 марта 2019

У меня есть спрайт игрока, который перемещается в любом месте экрана по нажатию.Я пытаюсь сделать всплывающее окно с информацией об игроке, если щелкнуть спрайт игрока.

Но, к сожалению, я заставляю игрока двигаться только на пару пикселей.У меня есть Box Collider 2d, добавленный к спрайту, и триггер события, установленный на Указатель. Нажмите, чтобы запустить метод ShowPlayerInfoPanel

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;

public class PlayerController : MonoBehaviour {

    //Player Movement
    float speed = 2f;
    Vector2 targetPos;

    private Rigidbody2D myRigidbody;
    private Animator myAnim;

    private static bool playerExists;
    public static PlayerController instance;

    public string exitPortal;
    public bool startMoving;

    public float smoothTime = 0.3F;
    private Vector3 velocity = Vector3.zero;

    //Player Info
    public string displayName;
    public string coins;

    //Player Panel display
    public GameObject playerInfoPanel;

    private void Start()
    {

        myRigidbody = GetComponent<Rigidbody2D>();
        myAnim = GetComponent<Animator>();

        if(instance == null){
            instance = this;
        } else {
            Destroy(gameObject);
        }

        DontDestroyOnLoad(transform.gameObject);

        targetPos = transform.position;

    }

    void Update()
    {
        if (Input.GetMouseButtonDown(0))
        {
            targetPos = (Vector2)Camera.main.ScreenToWorldPoint(Input.mousePosition);
            startMoving = true;
        }
        if ((Vector2)transform.position != targetPos && startMoving)
        {
            Move();
        } else {
            myAnim.SetBool("PlayerMoving", false);
        }
    }

    void Move()
    {
        Vector2 oldPos = transform.position;
        transform.position = Vector2.MoveTowards(transform.position, targetPos, speed * Time.deltaTime);
        //transform.position = Vector3.SmoothDamp(transform.position, targetPos, ref velocity, smoothTime);

        Vector2 movement = (Vector2)transform.position - oldPos;

        myAnim.SetBool("PlayerMoving", true);

        myAnim.SetFloat("Horizontal", movement.x);
        myAnim.SetFloat("Vertical", movement.y);
    }

    public void ShowPlayerInfoPanel()
    {
        Debug.Log("hi");
        PlayerInfoPanel playerInfo = playerInfoPanel.GetComponent<PlayerInfoPanel>();
        playerInfo.DisplayName.text = displayName;
        playerInfo.Coins.text = coins;
        playerInfoPanel.SetActive(true);
    }
}
.

1 Ответ

2 голосов
/ 25 марта 2019

С помощью коллайдера в вашем gameObject вы можете просто использовать OnMouseDown , чтобы определить, когда на объект нажимается.

void OnMouseDown()
{
    ShowPlayerInfoPanel();
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...