Автор Тема: Unity3d - Character ControllerS (контроллеры персонажей, и их перемещение)  (Прочитано 3392 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Октябрь 27, 2013, 21:46:33 pm
Прочитано 3392 раз

Mimi Neko

  • Администратор
  • Старожил форума

  • Оффлайн
  • *****

  • 2453
  • Репутация:
    153
    • Просмотр профиля
Готовые решения по Character Controller, и перемещению персонажей игры.
« Последнее редактирование: Ноябрь 06, 2016, 14:29:13 pm от Mimi Neko »

Ноябрь 06, 2016, 14:29:23 pm
Ответ #1

Mimi Neko

  • Администратор
  • Старожил форума

  • Оффлайн
  • *****

  • 2453
  • Репутация:
    153
    • Просмотр профиля
Передвижение персонажа в 3D: (один из вариантов)

    //для 3D объекта
    public class 3DMovement: MonoBehaviour {
    //Инициализация переменной
    void Awake () {
    Rigidbody rb = GetComponent<Rigidbody> ();
    }
    void FixedUpdate () {
       float x = Imput.GetAxis("Horizontal");
       float z = Input.GetAxis("Vertical");
       //По оси "y" у нас 0 по той причине что значение в вертикальной плоскости не меняется.
       Vector3 movement = new Vector3 (x, 0, y);
       //для 3d
       transform.translate(x*speed*Time.deltaTime, 0, z*speed*Time.deltaTime);
       //ограничение движения по диагонали одной скоростью
       movement = Vector3.ClampMagnitude(movement, speed);
       // преобразование в глобальную систему координат
       // TransformPoint - используется если вектор представляет собой позицию (position), а не направление (direction)
       movement  = transform.TransformDirection(movement);
       // компонент CharancterController _charController
       _charController.Move(movement);
    }
    }

источник: https://unity-help.tk

Ноябрь 06, 2016, 14:30:31 pm
Ответ #2

Mimi Neko

  • Администратор
  • Старожил форума

  • Оффлайн
  • *****

  • 2453
  • Репутация:
    153
    • Просмотр профиля
Передвижение персонажа в 2D: (один из вариантов)

Передвижение объекта в 2d пространстве описывается с помощью нескольких функций.

    У вас должен быть создан объект и к нему должен быть прикреплен скрипт, указанный ниже ( если название скрипта отличается от MoovementHero, не забудьте сменить название класса в самом скрипте)
    К объекту должен быть прикреплен компонент Rigidbody2D;

    public class MoovementHero : MonoBehaviour {
       //Создаем/инициализируем переменную Rigidbody;
       //Создаем/инициализируем переменную speed - множитель скорости передвижения;
       //...
    Rigidbody2D rb2d;
       //...
       void FixedUpdate () {
       // Сохраняем компонент в переменную;
       //...
       Rigidbody2D rb2d = GetComponent<Rigidbody2D> ();
       //....
    }
    void Update () {
       //Получаем значение от кнопок. Какие кнопки Horizontal и Vertical смотрим в редакторе Unity Edit - Project Settings - Input - Axes
       float x = Imput.GetAxis("Horizontal");
       float y = Input.GetAxis("Vertical");
       //Создаем 2D вектор направения передвижения
       Vector2 movement = new Vector2 (x,y);
       //Добавляем силу передвижения к объекту
       // law <em>force = mass x acceleration</em> - чем больше масса, тем больше нужжно приложить силу, чтобы ускорить и придать определенную скорость.
       //Time.deltaTime - делает игру фрейм независимой, это значит что количество FPS не влияет на общую скорость передвижения.
       rb2d.AddForce (movement*speed*Time.deltaTime);
       //или другой вариант
       // rb2d.transform.Translate(movement*speed*Time.deltaTime);
    }
    }

источник: https://unity-help.tk

Ноябрь 06, 2016, 16:03:19 pm
Ответ #3

Mimi Neko

  • Администратор
  • Старожил форума

  • Оффлайн
  • *****

  • 2453
  • Репутация:
    153
    • Просмотр профиля
Unity3D поворот персонажа вместе с камерой в RPG 3D игре:

Добавляем данный скрипт к игроку и в target добавляем камеру.

    public class RelativeMoment : MonoBehaviour {
      [SerializeField] private Transform target;
      public float rotSpeed = 10.0f;
      void Update () {
        Vector3 movement = Vector3.zero;
        float horInput = Input.GetAxis ("Horizontal");
        float verInput = Input.GetAxis ("Vertical");
        if (horInput != 0 || verInput != 0){
          movement.x = horInput;
          movement.z = verInput;
          Quaternion tmp = target.rotation;
          target.eulerAngles = new Vector3 (0, target.eulerAngles.y, 0);
          movement = target.TransformDirection (movement);
          target.rotation = tmp;
        //  transform.rotation = Quaternion.LookRotation (movement);
          Quaternion direction = Quaternion.LookRotation (movement);
          transform.rotation = Quaternion.Lerp (transform.rotation, direction, rotSpeed * Time.deltaTime);
        }
      }
    }


источник: https://unity-help.tk