Прблем с поворотом

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

Прблем с поворотом

Сообщение MrFraim 18 май 2017, 18:12

Добавил Flip, что бы когда персонаж шёл в лево он поворачивался, а когда в право обратно. Помоему сделал ошибку, т к когда нажимаешь в право он идёт в право, всё нормально но когда влево он поворачивается влево но идёт в право , скорее всего в чём-то ошибка

Скрипт, исправьте пожалуйста
Синтаксис:
Используется csharp
using UnityEngine;
using System.Collections;

public class Script : MonoBehaviour

{
        public Texture2D ButtonImage = null;
        public float speed = 3f;
        public int move = 0;
        private bool facingRight = true;

        void Update()
        {
                if (move == 1) transform.Translate(-Vector3.right * speed * Time.deltaTime);
                else if (move == 2) transform.Translate(-Vector3.left * speed * Time.deltaTime);

                if (move == 1 && !facingRight)
                        Flip();
                else if (move == 2 && facingRight)
                        Flip();

        }
        void OnGUI()
        {
                Rect rightRect = new Rect(350, 0, 500, 5000);  
                Rect leftRect = new Rect(0, 0, 350, 5000);

                Event e = Event.current;    
                if (e.type == EventType.MouseDown && e.button == 0)
                {
                        if (rightRect.Contains(e.mousePosition)) move = 1;  
                        else if (leftRect.Contains(e.mousePosition)) move = 2;
                }

                if (e.type == EventType.MouseUp && e.button == 0) move = 0;


        }
        void Flip()
        {
                facingRight = !facingRight;
                Vector3 theScale = transform.localScale;
                theScale.x *= -1;
                transform.localScale = theScale;
        }

}
MrFraim
UNец
 
Сообщения: 12
Зарегистрирован: 10 май 2017, 18:50

Re: Прблем с поворотом

Сообщение samana 18 май 2017, 20:40

Я бы убрал свойство facingRight, чтобы не запутываться. А сделал бы параметр в методе Flip, который будет отвечать - куда повернуть персонажа.
Синтаксис:
Используется csharp
void Flip(bool toRight)
{
    facingRight = !facingRight;
    Vector3 theScale = transform.localScale;

    if(toRight)theScale.x = 1;
    else theScale.x *= -1;

    transform.localScale = theScale;
}


И соответственно

Синтаксис:
Используется csharp
if (move == 1) Flip(true);
else if(move==2) Flip(false);
Аватара пользователя
samana
Адепт
 
Сообщения: 4738
Зарегистрирован: 21 фев 2015, 13:00
Откуда: Днепропетровск

Re: Прблем с поворотом

Сообщение MrFraim 18 май 2017, 20:54

samana писал(а):Я бы убрал свойство facingRight, чтобы не запутываться. А сделал бы параметр в методе Flip, который будет отвечать - куда повернуть персонажа.
Синтаксис:
Используется csharp
void Flip(bool toRight)
{
    facingRight = !facingRight;
    Vector3 theScale = transform.localScale;

    if(toRight)theScale.x = 1;
    else theScale.x *= -1;

    transform.localScale = theScale;
}


И соответственно

Синтаксис:
Используется csharp
if (move == 1) Flip(true);
else if(move==2) Flip(false);


Ой-ой теперь вообще что-то странное стало происходить...
Синтаксис:
Используется csharp
using UnityEngine;
using System.Collections;

public class Script : MonoBehaviour

{
        public Texture2D ButtonImage = null;
        public float speed = 3f;
        public int move = 0;


        void Update()
        {
                if (move == 1) transform.Translate(-Vector3.right * speed * Time.deltaTime);
                else if (move == 2) transform.Translate(-Vector3.left * speed * Time.deltaTime);

                if (move == 1) Flip(true);
                else if(move == 2) Flip(false);

        }
        void OnGUI()
        {
                Rect rightRect = new Rect(350, 0, 500, 5000);  
                Rect leftRect = new Rect(0, 0, 350, 5000);

                Event e = Event.current;    
                if (e.type == EventType.MouseDown && e.button == 0)
                {
                        if (rightRect.Contains(e.mousePosition)) move = 1;  
                        else if (leftRect.Contains(e.mousePosition)) move = 2;
                }

                if (e.type == EventType.MouseUp && e.button == 0) move = 0;


        }
        void Flip(bool toRight)
        {
                Vector3 theScale = transform.localScale;

                if(toRight)theScale.x = 1;
                else theScale.x *= -1;

                transform.localScale = theScale;
        }

}
MrFraim
UNец
 
Сообщения: 12
Зарегистрирован: 10 май 2017, 18:50

Re: Прблем с поворотом

Сообщение samana 18 май 2017, 20:56

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

Re: Прблем с поворотом

Сообщение MrFraim 19 май 2017, 16:42

samana писал(а):Да? Ну ладно, видимо ошибся я в чём-то.

Может посмотрите в чём ошибка?
MrFraim
UNец
 
Сообщения: 12
Зарегистрирован: 10 май 2017, 18:50

Re: Прблем с поворотом

Сообщение samana 19 май 2017, 16:54

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


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

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

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