Однако странно то, что мой код 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;
}
}
Код: Выделить всё
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));
}
}
Подробнее здесь: https://stackoverflow.com/questions/792 ... being-true