Я хочу, чтобы мой игрок двигался влево, когда игрок попал влево от экрана. Прямо сейчас, мой плеер движется только тогда, когда я удерживаю кнопку мыши. Я действительно хочу, чтобы он постоянно двигался влево, пока он не достиг цели, когда я нажимаю экран один раз.
Может кто-нибудь, пожалуйста, скажите мне, чего мне не хватает из моего кода, чтобы это произошло?
void FixedUpdate()
{
if(Input.GetMouseButtonDown(0))
{
if(Input.mousePosition.x < (Screen.width*2)/3 && Input.mousePosition.y > Screen.height/3)
{
if(position == middle)
{
MoveLeft();
}
}
}
}
void MoveLeft()
{
var pos = rigidbody.position;
float xPosition = left.transform.position.x;
pos.x = Mathf.Lerp(pos.x, xPosition, speed * Time.deltaTime);
rigidbody.position = pos;
}
Мой метод находится в FixedUpdate, потому что я перемещаю игроков жестко, как против перевода фактического игрока.
Прямо сейчас игрок только перемещается, когда вы нажимаете кнопку мыши, потому что это то, как написан ваш код: вы проверяете, нажата ли мышь каждый кадр, и только если он перемещает жесткое тело.
Если вы хотите, чтобы игрок двигался независимо от того, нажата ли мышь или нет, вы должны создать какую-то переменную, чтобы сохранить состояние плеера, и установить движение влево при нажатии кнопки мыши и установить его, чтобы остановить, когда игрок достигает своей цели.
Если бы я правильно понял вашу цель, это выглядело бы примерно так:
bool moveLeft = false;
void FixedUpdate()
{
if(Input.GetMouseButtonDown(0)
&& (Input.mousePosition.x < (Screen.width*2)/3 && Input.mousePosition.y > Screen.height/3))
{
moveLeft = true;
}
if (moveLeft
&& (position == middle))
{
MoveLeft();
}
else
{
moveLeft = false;
}
}
void MoveLeft()
{
var pos = rigidbody.position;
float xPosition = left.transform.position.x;
pos.x = Mathf.Lerp(pos.x, xPosition, speed * Time.deltaTime);
rigidbody.position = pos;
}