UdeeMo
@UdeeMo

Как в тернарном операторе вызывать функции?

Я создаю управление на одном джойстике, для двух различных объектов. Ось X отвечает за один объект, а ось Z за другой. Чтобы они двигались в нужном направлении я использую тернарные операторы. Вот часть кода:
public float speed;
private float moveInput; 
private Rigidbody rb;
public Joystick j;

private void Start()
{
    rb = GetComponent<Rigidbody>();
}

private void FixedUpdate()
{
   if (j.Horizontal < 0)
   {
        j.Vertical < 0 ? ((j.Vertical < j.Horizontal) ? moveVertical() : moveHorizontal()) : ((j.Vertical > -j.Horizontal) ? moveVertical() : moveHorizontal());
   }
   else
   {
        j.Vertical < 0 ? ((-j.Vertical > j.Horizontal) ? moveVertical() : moveHorizontal()) : ((j.Vertical > j.Horizontal) ? moveVertical() : moveHorizontal());
   }
}
void moveHorizontal()
{
     moveInput = -j.Horizontal;
     rb.velocity = new Vector3(moveInput * speed, rb.velocity.y, rb.velocity.z);
}    
void moveVertical()
{
     moveInput = -j.Vertical;
     rb.velocity = new Vector3(rb.velocity.x, rb.velocity.y, moveInput * speed);
}

Но юнити выдает ошибку:
60a100c9c9f9c652861402.png
Я знаю, что эти тернарные операторы нужно присвоить, но так как я использую ссылки на функции, я не могу понять к чему присваивать их.
  • Вопрос задан
  • 56 просмотров
Решения вопроса 2
Rsa97
@Rsa97
Для правильного вопроса надо знать половину ответа
Не используйте тернарные операторы без реальной необходимости. Вам тут вполне хватит обычных if/else.
P.S. А вообще, ваша куча условий укладывается в
if (Math.Abs(j.Vertical) > Math.Abs(j.Horizontal)) {
    moveVertical();
} else {
    moveHorizontal();
}
Ответ написан
Комментировать
MANAB
@MANAB
Разрабатываю на C#: Web, Desktop, Gamedev
Потому что должен быть результат оператора, а по коду выше пытаешься логику сделать с результатом void. Или тогда делай результатом ссылку на метод
Action move = j.Vertical < 0 ? ((j.Vertical < j.Horizontal) ? moveVertical : moveHorizontal) : ((j.Vertical > -j.Horizontal) ? moveVertical : moveHorizontal);
move();

Ну и да, твою логику можно сильно упростить.
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы