Понедельник, 04 Ноября 2024, 20:10

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

[ Новые сообщения · Игроделы · Правила · Поиск ]
  • Страница 1 из 1
  • 1
Проблема с "въезжанием" одного объекта в другой
JerichoДата: Четверг, 21 Июля 2016, 02:53 | Сообщение # 1
Ubuntu 11.10 user
Сейчас нет на сайте
Собственно проблема прекрасно показана на скриншоте ниже, красный квадрат при столкновении на мгновение въезжает в серый, на втором скриншоте предоставлен код управления красным квадратом.



Уютненькая страничка Ерихона

xxx: Так вы представляете, у него там фрагмент кода в 15 строк повторяется 37 раз. Если вынести в функцию можно сэкономить полтыщи строк!
yyy: это припев.
© Антон Антоненко
EgoorДата: Четверг, 21 Июля 2016, 05:09 | Сообщение # 2
участник
Сейчас нет на сайте
Логично, что если прямо задавать координаты объекту, то он будет "въезжать". Двигай куб через rigidbody силами, тогда все будет нормально.
LertmindДата: Четверг, 21 Июля 2016, 05:17 | Сообщение # 3
заслуженный участник
Сейчас нет на сайте
Объекты с Rigidbody без включенного isKinematic нежелательно перемещать через Transform (в данном случае Translate), написано в конце. Надо применять силу (AddForce) или изменять скорость (velocity). Пример со скоростью:
Код
using UnityEngine;

public class Move : MonoBehaviour
{
    public float playerSpeed = 5.0f;
    float transV;
    float transH;

    void FixedUpdate()
    {
        GetKeyFun();
        GetComponent<Rigidbody2D>().velocity = new Vector3(transH, transV, 0) * playerSpeed;
    }

    void GetKeyFun()
    {
        if (Input.GetKey(KeyCode.UpArrow))
        {
            transH = 0;
            transV = 1.0f;
        }
        if (Input.GetKey(KeyCode.DownArrow))
        {
            transH = 0;
            transV = -1.0f;
        }
        if (Input.GetKey(KeyCode.LeftArrow))
        {
            transH = -1.0f;
            transV = 0;
        }
        if (Input.GetKey(KeyCode.RightArrow))
        {
            transH = 1.0f;
            transV = 0;
        }
    }
}

В данном примере transH и transV указывают направление. Лучше сделать проверку и изменять скорость только если нажата клавиша. Вместо GetKey() можно использовать GetAxis() или GetAxisRaw(). Вообще здесь много нюансов.


Сообщение отредактировал Lertmind - Четверг, 21 Июля 2016, 05:18
JerichoДата: Четверг, 21 Июля 2016, 09:23 | Сообщение # 4
Ubuntu 11.10 user
Сейчас нет на сайте
Lertmind, Спасибо за помощь, подобная проверка нужна для того чтобы объект двигался не только когда нажата клавиша, а вообще.

Уютненькая страничка Ерихона

xxx: Так вы представляете, у него там фрагмент кода в 15 строк повторяется 37 раз. Если вынести в функцию можно сэкономить полтыщи строк!
yyy: это припев.
© Антон Антоненко
  • Страница 1 из 1
  • 1
Поиск:

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