Войти
UE4 CommunityФорум

Робот не идет в право и в лево. В гору и в низ идет

#0
10:14, 18 сен. 2019

Я написал функцию в которой  задал чтобы робот йшел в вверх , вниз, влево, вправо. Но я нажимаю влево он идет вверх. в право- вниз.

 FVector2D WSAD;
void ACamera::FMove(float Button)
{
    int32 Key = Button;
     switch(Key)
     {
        case 1:
            if (WSAD.X != 1) 
            {
                WSAD = FVector2D(0, 0);
                WSAD.X = -1;
            }

        break;

        case 2:
            if (WSAD.X != -1)
            {
                WSAD = FVector2D(0, 0);
                WSAD.X = 1;
            }
        break;

        case 3:
            if (WSAD.Y != -1)
            {
                WSAD = FVector2D(0, 0);
                WSAD.Y = 1;
            }
        break;

        case 4:
            if (WSAD.Y != -1)
            {
                WSAD = FVector2D(0, 0);
                WSAD.Y = -1;
            }
        break;

     }
     if (Player)
     { 
         Player->DirectionMove = WSAD; 
     } 
}

В Editor я сделал - Settings - Project Settings - Input - Axis Mapping и додал кнопки


#1
11:56, 18 сен. 2019

Я так понимаю ты задаешь направление в глобальных координатах, а надо брать направление персонажа, есть же масса примеров где бегает человек с камерой - посмотри как там управление делается.

#2
16:05, 18 сен. 2019

мне кажется в этой функции есть ряд ошибок, надо прочитать её еще раз внимательно

#3
17:44, 19 сен. 2019

дело было не в бобине

#4
21:57, 19 сен. 2019

Mephisto std

помню один шейдер, где не правильно считался вектор V :):):)
я целый день потратил на поиск бага

#5
6:54, 30 сен. 2019

dimaSlon
Ошибка в строке if (WSAD.X != 1), а потом WSAD.X = -1;
по смыслу надо и сравнивать с -1, а вообще - лишняя проверка, пиши проще

  switch(Key) {
    case 1: WSAD = FVector2D(-1, 0);break;
    case 2: WSAD = FVector2D(+1, 0);break;
    case 3: WSAD = FVector2D(0,-1);break;
    case 4: WSAD = FVector2D(0,+1);break;
  }

Еще, в Camera оставь только функции обзора, пользуйся ООП, создай отдельный класс MotionController для обработки стрелок,
поле Player - убери, пусть игрок меняет свою камеру

Player::OnMove() 
{
  if(Camera)
    Camera.pos=this.pos;
}
#6
10:28, 30 сен. 2019

Aslan
> пользуйся ООП

используй тёмную сторону силы, Люк :)

UE4 CommunityФорум