Управление

Программирование на Юнити.

Управление

Сообщение LothbrokSon 24 сен 2020, 12:19

Всем привет! Помогите пожалуйста переделать скрипт с ПК управления на мобильное с двумя кнопками. (Сохраняя те же параметры)
Не шарю пока что как это сделать. Надеюсь на понимание.



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

public class Player : MonoBehaviour {

public float speed;
public float increment;
public float maxY;
public float minY;

private Vector2 targetPos;

public int health;

public GameObject moveEffect;
public Animator camAnim;
public Text healthDisplay;

public GameObject spawner;
public GameObject restartDisplay;

private void Update()
{

if (health <= 0) {
spawner.SetActive(false);
restartDisplay.SetActive(true);
Destroy(gameObject);
}

healthDisplay.text = health.ToString();

transform.position = Vector2.MoveTowards(transform.position, targetPos, speed * Time.deltaTime);

if (Input.GetKeyDown(KeyCode.UpArrow) && transform.position.y < maxY) {
camAnim.SetTrigger("shake");
Instantiate(moveEffect, transform.position, Quaternion.identity);
targetPos = new Vector2(transform.position.x, transform.position.y + increment);
} else if (Input.GetKeyDown(KeyCode.DownArrow) && transform.position.y > minY) {
camAnim.SetTrigger("shake");
Instantiate(moveEffect, transform.position, Quaternion.identity);
targetPos = new Vector2(transform.position.x, transform.position.y - increment);
}
}
}
LothbrokSon
UNец
 
Сообщения: 7
Зарегистрирован: 24 сен 2020, 12:13

Re: Управление

Сообщение samana 24 сен 2020, 13:16

В вашем варианте это ещё легко, просто вынесите логику при нажатии в отдельные методы.
И назначьте эти методы нужным UI кнопкам. Как назначить метод кнопке - посмотрите базовые уроки про UIButton.
Синтаксис:
Используется csharp
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;

public class Player : MonoBehaviour
{

    public float speed;
    public float increment;
    public float maxY;
    public float minY;

    private Vector2 targetPos;

    public int health;

    public GameObject moveEffect;
    public Animator camAnim;
    public Text healthDisplay;

    public GameObject spawner;
    public GameObject restartDisplay;

    private void Update()
    {

        if (health <= 0)
        {
            spawner.SetActive(false);
            restartDisplay.SetActive(true);
            Destroy(gameObject);
        }

        healthDisplay.text = health.ToString();

        transform.position = Vector2.MoveTowards(transform.position, targetPos, speed * Time.deltaTime);

        if (Input.GetKeyDown(KeyCode.UpArrow))
        {
            Up();
        }
        else if (Input.GetKeyDown(KeyCode.DownArrow))
        {
            Down();
        }


        // этот метод назначить нужной UI кнопке
        public void Up()
        {
            if (transform.position.y < maxY)
            {
                camAnim.SetTrigger("shake");
                Instantiate(moveEffect, transform.position, Quaternion.identity);
                targetPos = new Vector2(transform.position.x, transform.position.y + increment);
            }
        }

        // этот метод назначить нужной UI кнопке
        public void Down()
        {
           if (transform.position.y > minY)
            {
                camAnim.SetTrigger("shake");
                Instantiate(moveEffect, transform.position, Quaternion.identity);
                targetPos = new Vector2(transform.position.x, transform.position.y - increment);
            }
        }
    }
}
Аватара пользователя
samana
Адепт
 
Сообщения: 4738
Зарегистрирован: 21 фев 2015, 13:00
Откуда: Днепропетровск

Re: Управление

Сообщение LothbrokSon 24 сен 2020, 18:49

samana писал(а):В вашем варианте это ещё легко, просто вынесите логику при нажатии в отдельные методы.
И назначьте эти методы нужным UI кнопкам. Как назначить метод кнопке - посмотрите базовые уроки про UIButton.
Синтаксис:
Используется csharp
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;

public class Player : MonoBehaviour
{

    public float speed;
    public float increment;
    public float maxY;
    public float minY;

    private Vector2 targetPos;

    public int health;

    public GameObject moveEffect;
    public Animator camAnim;
    public Text healthDisplay;

    public GameObject spawner;
    public GameObject restartDisplay;

    private void Update()
    {

        if (health <= 0)
        {
            spawner.SetActive(false);
            restartDisplay.SetActive(true);
            Destroy(gameObject);
        }

        healthDisplay.text = health.ToString();

        transform.position = Vector2.MoveTowards(transform.position, targetPos, speed * Time.deltaTime);

        if (Input.GetKeyDown(KeyCode.UpArrow))
        {
            Up();
        }
        else if (Input.GetKeyDown(KeyCode.DownArrow))
        {
            Down();
        }


        // этот метод назначить нужной UI кнопке
        public void Up()
        {
            if (transform.position.y < maxY)
            {
                camAnim.SetTrigger("shake");
                Instantiate(moveEffect, transform.position, Quaternion.identity);
                targetPos = new Vector2(transform.position.x, transform.position.y + increment);
            }
        }

        // этот метод назначить нужной UI кнопке
        public void Down()
        {
           if (transform.position.y > minY)
            {
                camAnim.SetTrigger("shake");
                Instantiate(moveEffect, transform.position, Quaternion.identity);
                targetPos = new Vector2(transform.position.x, transform.position.y - increment);
            }
        }
    }
}


Вроде сделал все правильно, но что то не работает. Только там паблики надо было из привата вытащить, потому что так их не было видно в назначении метода на кнопки.
LothbrokSon
UNец
 
Сообщения: 7
Зарегистрирован: 24 сен 2020, 12:13

Re: Управление

Сообщение LothbrokSon 25 сен 2020, 16:08

LothbrokSon писал(а):
samana писал(а):В вашем варианте это ещё легко, просто вынесите логику при нажатии в отдельные методы.
И назначьте эти методы нужным UI кнопкам. Как назначить метод кнопке - посмотрите базовые уроки про UIButton.
Синтаксис:
Используется csharp
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;

public class Player : MonoBehaviour
{

    public float speed;
    public float increment;
    public float maxY;
    public float minY;

    private Vector2 targetPos;

    public int health;

    public GameObject moveEffect;
    public Animator camAnim;
    public Text healthDisplay;

    public GameObject spawner;
    public GameObject restartDisplay;

    private void Update()
    {

        if (health <= 0)
        {
            spawner.SetActive(false);
            restartDisplay.SetActive(true);
            Destroy(gameObject);
        }

        healthDisplay.text = health.ToString();

        transform.position = Vector2.MoveTowards(transform.position, targetPos, speed * Time.deltaTime);

        if (Input.GetKeyDown(KeyCode.UpArrow))
        {
            Up();
        }
        else if (Input.GetKeyDown(KeyCode.DownArrow))
        {
            Down();
        }


        // этот метод назначить нужной UI кнопке
        public void Up()
        {
            if (transform.position.y < maxY)
            {
                camAnim.SetTrigger("shake");
                Instantiate(moveEffect, transform.position, Quaternion.identity);
                targetPos = new Vector2(transform.position.x, transform.position.y + increment);
            }
        }

        // этот метод назначить нужной UI кнопке
        public void Down()
        {
           if (transform.position.y > minY)
            {
                camAnim.SetTrigger("shake");
                Instantiate(moveEffect, transform.position, Quaternion.identity);
                targetPos = new Vector2(transform.position.x, transform.position.y - increment);
            }
        }
    }
}


Вроде сделал все правильно, но что то не работает. Только там паблики надо было из привата вытащить, потому что так их не было видно в назначении метода на кнопки.

Без вынова пабликов пишет "the modifier public is not valid for this item"
LothbrokSon
UNец
 
Сообщения: 7
Зарегистрирован: 24 сен 2020, 12:13

Re: Управление

Сообщение samana 25 сен 2020, 16:14

Я вам не совсем верно подсказал, так что этот код действительно работать корректно не будет.
Аватара пользователя
samana
Адепт
 
Сообщения: 4738
Зарегистрирован: 21 фев 2015, 13:00
Откуда: Днепропетровск

Re: Управление

Сообщение LothbrokSon 25 сен 2020, 16:20

samana писал(а):Я вам не совсем верно подсказал, так что этот код действительно работать корректно не будет.

Все, решил проблему добавлением EventSystem в UI, единственное в коде было неправильное расположение пабликов Up и Down. Спасибо! Вы мне очень помогли!
LothbrokSon
UNец
 
Сообщения: 7
Зарегистрирован: 24 сен 2020, 12:13


Вернуться в Скрипты

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 12


cron