Среда, 24 Апреля 2024, 19:23

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

[ Новые сообщения · Игроделы · Правила · Поиск ]
  • Страница 1 из 1
  • 1
Форум игроделов » Движки для разработки игр и сложные системы разработки » Unity » Помощь новичку ) (Проблемы с передвижением 2D персонажа)
Помощь новичку )
Sonik315Дата: Среда, 04 Ноября 2015, 23:44 | Сообщение # 1
был не раз
Сейчас нет на сайте
Года 3 назад начал увлекаться созданием игр , очень затягивающее дело biggrin Нашёл подходящий и удобный для меня движок Unity3D , начинал с трёхмерной графики и , вроде как , немного разобрался . Но тут в голову пришла идея попробовать 2D графику , тут - то и начались первые вопросы . Нашёл неплохой видео урок на официальном сайте Unity и на основе его написал небольшой скрип для передвижения
2D персонажа . Получилось вроде бы неплохо , но огорчает то что перед перехода с одной анимации в другую (например с анимации покоя в анимацию бега) происходит некоторая задержка . Google к сожалению ничего не знает (или это я так криво ищу) . Не могла бы вы подсказать как устранить эту ошибку ??? Очень признателен , заранее smile
В основном обучаюсь сам , но тут нужна помощь знатоков biggrin
Прошу прощения если что - то не так написал , я новичок , не судите строго , буду исправляться )
Вот сам скрипт :
Код

using UnityEngine;
using System.Collections;

public class Muvement : MonoBehaviour {
    public float speed = 10f; // скорость передвижения
    bool facingRight = true ; // проверка на разворот (лево , право)
    public Rigidbody2D myRigidBody; // связка с Rigidbody игрока , нужна для передвижения
    public GameObject Player;// нужна для разварота (в видео иной способ , но он у меня
                             // неработает , так что я свой придумал
    Animator anim;           // для воспроизведения и перехода анимаций
    bool grounded = false;   // стоит ли игрок на плоскости или нет
    public Transform groundChek;//нужна для проверки являеться ли объект плоскостью или нет
    float groundRadius = 0.2f;  // радиус для проверки
    public LayerMask whatIsGround;//что являеться плоскостью
    public float jumpForce = 700f;//сила прыжка

    void Start () {
        myRigidBody.GetComponent<Rigidbody2D>();//присваиванье компонента Rigidbody
        anim = GetComponent<Animator>();// присваиванье компонета Animator
    }

    void FixedUpdate () {
        grounded = Physics2D.OverlapCircle(groundChek.position, groundRadius, whatIsGround);//вычисляем стоит ли игрок на плоскости
        anim.SetBool("Ground", grounded);//изменяем переменную Ground в Animator
        anim.SetFloat("vSpeed", myRigidBody.velocity.y);//изменяем переменную vSpeed в Animator

        float muve = Input.GetAxis("Horizontal");//для передвижения
        anim.SetFloat("Speed", Mathf.Abs(muve));//изменяем переменную Speed в Animator
        myRigidBody.velocity = new Vector2(muve * speed, myRigidBody.velocity.y);//благодоря этой строчке персонаж движеться
        if (muve > 0 && !facingRight) //условие для поворота
            Flip();
        else if (muve < 0 && facingRight) // условие для поворота
            Flip();
    }

    void Update() {
        if (grounded && Input.GetKeyDown(KeyCode.Space)) { // если нажали Пробел то
            anim.SetBool("Ground", false);//изменяем переменную Ground в Animator
            myRigidBody.AddForce(new Vector2(0, jumpForce));//изменяем положение персонажа
        }
    }
    void Flip() { // функция для поворота (лево право)
        facingRight = !facingRight;
        Player.transform.localScale = new Vector3(Player.transform.localScale.x * -1f, Player.transform.localScale.y, Player.transform.localScale.z);
        //для того что бы мой персонаж не искожался полностью по localScale , придумал вот такую громоскую , зато
       //работающую точку ) теперь он зеркалиться только по X
    }
}


Иногда именно те, кто, казалось бы, ничего из себя не представляет, делает то, что никто и представить не мог.
PocifikДата: Четверг, 05 Ноября 2015, 00:01 | Сообщение # 2
участник
Сейчас нет на сайте
Sonik315, Могу предположить что дело в аниматоре, а не в коде, хотя код даже не смотрел. Там стандартная задержка стоит для гладких переходов анимации (для 3д анимации в основном). Нажми на линию между анимациями и там поищи время и ожидания завершения анимации.
berilДата: Четверг, 05 Ноября 2015, 01:32 | Сообщение # 3
Я не ленивый, я — энергосберегающий
Сейчас нет на сайте
В Animator попробуй поиграться с переходами анимации




Накодил? Убери за собой!
Инвентарь в Unity(UI)
Инвентарь в Unity(GUI)
seamanДата: Четверг, 05 Ноября 2015, 09:17 | Сообщение # 4
старожил
Сейчас нет на сайте
Убрать "Has exit time"
Sonik315Дата: Четверг, 05 Ноября 2015, 20:40 | Сообщение # 5
был не раз
Сейчас нет на сайте
Спасибо всем огромное , очень признателен )))) Сейчас будем пробовать , ещё раз выражаю огромную благодарность ! thumb ok respect respect respect respect

Добавлено (05 ноября 2015, 20:40)
---------------------------------------------
Вы были правы , действительно , проблема была в самом Animator'е , по совету seaman убрал галочки с "Has exit time" , помогло , теперь всё идёт как надо ) Огромное всем ещё раз спасибо happy smile


Иногда именно те, кто, казалось бы, ничего из себя не представляет, делает то, что никто и представить не мог.
Форум игроделов » Движки для разработки игр и сложные системы разработки » Unity » Помощь новичку ) (Проблемы с передвижением 2D персонажа)
  • Страница 1 из 1
  • 1
Поиск:

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