Мой оператор if не запускается после того, как он явно является истиннымC#

Место общения программистов C#
Ответить Пред. темаСлед. тема
Anonymous
 Мой оператор if не запускается после того, как он явно является истинным

Сообщение Anonymous »

Я объявил частный int с именем moveType в верхней части моего кода и инициализировал его значением 0 в основном сценарии движения SnakeMovement. Затем я создал функцию под названием HorizontalMovement, которая срабатывает при нажатии на графический интерфейс с помощью встроенной функции OnClick, которая поставляется с текстовой кнопкой. После щелчка тип перемещения изменяется на 1, что предназначено для запуска оператора if в методе FixUpdate(), который позволит игроку использовать клавиши A и D для перемещения. Однако, несмотря на то, что moveType успешно изменился на 1, оператор if, похоже, не сработал.
Однако странно то, что мой код MouseMovement все еще работает, используя ту же систему. Единственное отличие заключается в том, что они содержат дополнительный код в отдельном скрипте под названием MousePosition, который получает положение мыши и возвращает его.
Примечание. Код внутри оператора if 'if (moveType = = 1)' уже был протестирован и отлично работал вне оператора if.
Я прикрепил оба сценария ниже, и, насколько мне известно, ошибка не вызвана ошибка в инспекторе.
Я сохранил весь код в этих скриптах, чтобы лучше понять, что делает код, и чтобы вы могли увидеть, не вызывает ли проблема другая область, кроме FixUpdate() и HorizontalMovement().
Код MousePosition:

Код: Выделить всё

public class MousePosition : MonoBehaviour
{
private Camera mainCam;

private void Start()
{
mainCam = Camera.main;
}

private void FixedUpdate()
{
Vector2 mouseWorldPosition = mainCam.ScreenToWorldPoint(Input.mousePosition);
transform.position = mouseWorldPosition;
}
}
Код SnakeMovement:

Код: Выделить всё

public class SnakeMovement : MonoBehaviour
{
public SnakeTail tail;

[SerializeField] private GameObject moveObjScreen;
[SerializeField] private GameObject mouse;
private Camera mainCam;

[SerializeField] private float speed;
private float rotateSpeed;
private float velocityX = 0f;
private int moveType = 0;

void Start()
{
Time.timeScale = 0;
mainCam = Camera.main;
}

void Update()
{
if (Input.GetKeyDown(KeyCode.LeftShift))
{
speed = 4.5f;
}

if (Input.GetKeyUp(KeyCode.LeftShift))
{
speed = 3f;
}
}
void FixedUpdate()
{
if (moveType == 1)
{
// Move Type
velocityX = Input.GetAxisRaw("Horizontal");

// Movement
transform. Translate(Vector2.up * speed * Time.fixedDeltaTime, Space.Self);

// Rotation
transform.Rotate(Vector3.forward * -velocityX * rotateSpeed * Time.fixedDeltaTime);
}

else if (moveType == 2)
{
FollowMousePosition();
}
}

void HorizontalMovement()
{
Cursor.lockState = CursorLockMode.Locked;
moveObjScreen.SetActive(false);
Time.timeScale = 1;
moveType = 1;
}

private void MouseMovement()
{
Cursor.visible = false;
moveObjScreen.SetActive(false);
mouse.SetActive(true);
Time.timeScale = 1;
moveType = 2;
}

private void FollowMousePosition()
{
// Movement & Rotation
transform.position = Vector2.MoveTowards(transform.position, GetWorldPositionFromMouse(), speed * Time.deltaTime);
}

private Vector2 GetWorldPositionFromMouse()
{
return (mainCam.ScreenToWorldPoint(Input.mousePosition));
}
}
Во-первых, я попытался исправить это, сделав общедоступными функции HorizontalMovement() и FixedUpdate(), так как думал, что это проблема с областью действия переменной. Однако это ничего не дало, поэтому я сериализовал moveType, чтобы увидеть, какое значение он хранил после нажатия графического интерфейса HorizontalMovement, и, конечно же, он сказал 1, но, похоже, не запускал код внутри оператора if. После этого я проверил инспектора, не пропало ли чего или не в том месте, в котором я ничего не нашел.

Подробнее здесь: https://stackoverflow.com/questions/792 ... being-true
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «C#»