Управление
Добавлено:
24 сен 2020, 12:19
LothbrokSon
Всем привет! Помогите пожалуйста переделать скрипт с ПК управления на мобильное с двумя кнопками. (Сохраняя те же параметры)
Не шарю пока что как это сделать. Надеюсь на понимание.
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);
}
}
}
Re: Управление
Добавлено:
24 сен 2020, 13:16
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);
}
}
}
}
Re: Управление
Добавлено:
24 сен 2020, 18:49
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);
}
}
}
}
Вроде сделал все правильно, но что то не работает. Только там паблики надо было из привата вытащить, потому что так их не было видно в назначении метода на кнопки.
Re: Управление
Добавлено:
25 сен 2020, 16:08
LothbrokSon
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"
Re: Управление
Добавлено:
25 сен 2020, 16:14
samana
Я вам не совсем верно подсказал, так что этот код действительно работать корректно не будет.
Re: Управление
Добавлено:
25 сен 2020, 16:20
LothbrokSon
samana писал(а):Я вам не совсем верно подсказал, так что этот код действительно работать корректно не будет.
Все, решил проблему добавлением EventSystem в UI, единственное в коде было неправильное расположение пабликов Up и Down. Спасибо! Вы мне очень помогли!