Как заблокировать движение (после щелчка) по оси y?
public int speed;
Vector3 position;
bool go;
void FixedUpdate ()
{
if (Input.GetKey (KeyCode.Mouse0))
{
go=true;
Ray ray = Camera.main.ScreenPointToRay (Input.mousePosition);
RaycastHit hit;
if (Physics.Raycast (ray, out hit, Mathf.Infinity))
{
position = hit.point;
}
}
//////////////////////////////////////////////////////////////////////
if(go)
{
Vector2 direction = position - transform.position;
float targ_pos = Vector2.Distance (transform.position, position);
if(targ_pos>0)
{
rigidbody2D.AddForce ((position - transform.position)*speed);
}
else {go=false;}
}
}
Может быть, вы все еще ищете ответ, но это может помочь другим задуматься.
Я сделал игру, где персонаж переместился с помощью ClickToMove. Вот как я это сделал. Моя игра была 3D, поэтому вам, возможно, придется немного подкорректировать.
Мы храним точку, которую мы ударили, которая принадлежит к этажу моей сцены (floorHit). В верхней части моего класса я объявил Vector3 toGo. У моего игрока жесткая привязка к нему, и я поворачиваюсь к точке, которую он должен двигаться. Затем используйте MoveTowards (от, до, скорость);
if (Physics.Raycast (camRay, out floorHit, camRayLength, floorMask)) {
Vector3 playerToMouse = floorHit.point - transform.position;
// the quaternion defines the rotation, looking through the vector
Quaternion newRotation = Quaternion.LookRotation (playerToMouse);
playerRigidbody.MoveRotation (newRotation);
toGo = floorHit.point; // We save the point we touched }
Затем за пределами if, все еще находящегося в функции обновления, мы вызываем MoveTowards с сохраненным ранее toGo Vector3:
transform.position = Vector3.MoveTowards (transform.position, toGo, speed * Time.deltaTime);
Надеюсь, это поможет,
Кроме того, у меня есть код, если вы хотите оживить своего персонажа.
Не стесняйтесь просить больше,
BRO