2014-10-01 2 views
1
  1. Скорость зависит от расстояния от объекта до щелчка. Как это исправить?
  2. Как заблокировать движение (после щелчка) по оси y?единство 2d крана для ходьбы

    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;} 
        } 
    } 
    
+0

Сила, что вы в настоящее время добавления является относительно расстояния, которое вы пытаетесь «перевести». Вам нужно создать нормализованный вектор, а затем умножить его на скорость. Что касается пункта 2, то в ваших объектах жесткое тело вы можете динамически устанавливать ограничения движения, я думаю, что это то, что вы ищете? – Zze

+0

Спасибо, что ответили. Я знаю о «нормализации», но я действительно новичок.) Нечто вроде: rigidbody2D.AddForce ((позиция - transform.position) .Normalize * speed); вызывает ошибки. Что касается пункта 2 (если вы написали о позиции/повороте блокировок Constraints), эта функция доступна только для RigidBody (3D), а не для 2D. –

ответ

0

Может быть, вы все еще ищете ответ, но это могло бы помочь другим интересно, то же самое.

Я сделал игру, в которой персонаж перемещался с помощью метода 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 } 

Тогда вне из если, по-прежнему в функции обновления, мы называем MoveTowards с ToGo Vector3 мы сохранили ранее:

transform.position = Vector3.MoveTowards (transform.position, toGo, speed * Time.deltaTime); 

Надежда, что помогает,

Кроме того, , У меня есть код, если вы хотите оживить своего персонажа.

Не стесняйтесь просить больше,

BRO

 Смежные вопросы

  • Нет связанных вопросов^_^