#c# #unity3d
#c# #unity-игровой движок
Вопрос:
Я действительно новичок в программировании, и английский не является моим основным языком, так что простите любые глупые ошибки и мой английский.
Я работаю над системой перемещения, которая перемещает игрока в точку щелчка, все в скрипте, кажется, работает, но на вкладке «игра» игрок вообще не перемещается. Я уже прочитал много информации о Vector3.MoveTowards()
, но у меня ничего не получалось.
Vector3 currentpos;
Vector3 targetpos;
bool ismoving = false;
public float speed = 10f;
void Update()
{
currentpos = transform.position;
move();
if (Input.GetMouseButtonDown(0))
{
click();
}
}
void click() //get the position of the click using a raycast//
{
Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition);
RaycastHit hit;
if(Physics.Raycast(ray, out hit))
{
targetpos = hit.point;
targetpos.y = 0f; //only whants to move the player in the x and z axis//
ismoving = true;
move();
}
}
void move()
{
if (ismoving==true)
{
if (Vector3.Distance(currentpos,targetpos)>0.1f) //if distance between current position and target position is greater than 0.1f player should move//
{
currentpos = Vector3.MoveTowards(currentpos, targetpos, speed * Time.deltaTime);
Debug.Log("Current Position is:" currentpos " and target position is" targetpos);
}
if(Vector3.Distance(currentpos,targetpos)<0.1f)
{
ismoving = false;
}
}
}
В консоли текущая позиция и целевая позиция верны, но игрок не перемещается.
Комментарии:
1. Пожалуйста, избегайте использования ссылок на текстовые изображения. Вместо этого скопируйте и вставьте текст непосредственно в свой ответ.
Ответ №1:
Ну, вы изменяете значение currentpos
, но никогда не возвращаете его к transform.position
, например, здесь
currentpos = Vector3.MoveTowards(currentpos, targetpos, speed * Time.deltaTime);
transform.position = currentpos;
Комментарии:
1. Все просто, я просто знал, что это глупый вопрос, игрок движется, но он мерцает : (