Среда, 25 Декабря 2024, 09:15

Приветствую Вас Гость

[ Новые сообщения · Игроделы · Правила · Поиск ]
  • Страница 1 из 1
  • 1
Помогите пожалуйста настроить управление!
SkorbДата: Вторник, 28 Февраля 2017, 11:59 | Сообщение # 1
был не раз
Сейчас нет на сайте
Всем привет! Помогите пожалуйста! Уже неделю мучаюсь! Хочу сделать управление игроком в 2d игре для андроид платформы, что бы бегал вправо- лево, прыжок настроил остальное не могу, и еще подскажите как сделать что бы после окончания жизней (сердечек) появлялось окно с выбором вернуться в начало игры или посмотреть рекламу что бы добавилось "сердечко"! Зарание спасибо за помощь и понимание!
Вот скрипт!

Код


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

public class characterController : Unit {

private SpriteRenderer sprite;
public float speed = 3.5F;

public float jumpPower;
public int directionInput;
public bool groundCheck;
public bool facingRight = true;

private int lives = 5;
public int Lives
{
get { return lives; }
set
{
if (value < 5) lives = value;
livesBar.Refresh();
}
}
private LivesBar livesBar;
Rigidbody2D body;
private bool isGrounded = false;
public float force = 300.0f;

private int coinsInt = 0;
public Text coinsText;

// Use this for initialization
void Start ()
{
body = GetComponent<Rigidbody2D> ();
}

new private Rigidbody2D rigidbody;
private Animator animator;
private CharState State
{
get { return (CharState)animator.GetInteger("State"); }
set { animator.SetInteger("State", (int)value); }
}

private void Awake()
{
livesBar = FindObjectOfType<LivesBar>();
rigidbody = GetComponent<Rigidbody2D>();
animator = GetComponent<Animator>();
sprite = GetComponentInChildren<SpriteRenderer>();
}

// Update is called once per frame
private void FixedUpdate()
{
CheckGround ();
body.velocity = new Vector2(speed * directionInput, body.velocity.y);
}

void Update ()
{
coinsText.text = coinsInt.ToString();

if (isGrounded) State = CharState.Idle;

if (Input.GetButton("Horizontal")) Run();

if (isGrounded && Input.GetKeyDown (KeyCode.Space))
{

GetComponent<Rigidbody2D>().AddForce(new Vector2(0, force));
}

groundCheck = true;
}

public override void ReceiveDamage()
{
Lives--;

rigidbody.velocity = Vector3.zero;
rigidbody.AddForce(transform.up * 8.0F, ForceMode2D.Impulse);

Debug.Log(lives);
}

private void CheckGround()
{
Collider2D[] colliders = Physics2D.OverlapCircleAll (transform.position, 1f);
isGrounded = colliders.Length > 1;
if (!isGrounded) State = CharState.Jump;
}

private void Run()
{
Vector3 direction = transform.right * Input.GetAxis("Horizontal");
transform.position = Vector3.MoveTowards(transform.position, transform.position + direction, speed * Time.deltaTime);
sprite.flipX = direction.x < 0.0F;
if (isGrounded) State = CharState.Run;
}

public void Jump(bool isJump)
{
isJump = isGrounded;
if (isGrounded)
{
body.velocity = new Vector2(body.velocity.x, jumpPower);
}
}

void OnTriggerEnter2D(Collider2D col)
{
if ((col.gameObject.name == "dieCollider") || (col.gameObject.name == "Obstacle")) // получение урона от обьектов
{
ReceiveDamage ();
}

if (col.gameObject.tag == "hole") // возврат в начало уровня после падения
{
Application.LoadLevel (Application.loadedLevel);
}

if (col.gameObject.tag == "coins") // сбор монет
{
coinsInt++;
Destroy (col.gameObject);
}

if (col.gameObject.name == "endLevel") // переход на другой уровень
{
Application.LoadLevel ("Level1_Scena2");
}
}
}

public enum CharState
{
Idle,
Run,
Jump
}
VerdCSДата: Вторник, 28 Февраля 2017, 21:53 | Сообщение # 2
частый гость
Сейчас нет на сайте
Skorb, исходя из того что для прыжка вы используете Rigidbody2D.velocity, попытаюсь предположить что вам нужен контроллер на основе встроенной физики. Посмотрите как такой тип контроллера делается в официальном уроке по Юнити 2D Character Controllers.

Что касается окна, идея такова:

1. Создаёте и настраиваете, в редакторе, UI элемент со всем необходимым вам функционалом, то есть нужное вам окно.
2. Из скрипта, в Awake (), вы отключаете GameObject этого окна GameObject.SetActive.
3. При получении урона игроком проверяете что количество его жизни меньше допустимого предела и если это так включаете окно тем же способом.


Сообщение отредактировал VerdCS - Вторник, 28 Февраля 2017, 21:54
SkorbДата: Вторник, 28 Февраля 2017, 22:35 | Сообщение # 3
был не раз
Сейчас нет на сайте
Спасибо! Я попробую!
  • Страница 1 из 1
  • 1
Поиск:

Все права сохранены. GcUp.ru © 2008-2024 Рейтинг