Unity3d Starter

  • 324 Просмотры
  • Последний пост 20 октября 2016
Александр Свентозельский разместил пост 17 октября 2016

Здравствуйте.

Подскажите пожалуйста, что имеется ввиду?

 

Есть домашнее задание к 3 уроку:

Создайте новый проект и разместите на сцене Terrain                    - понятно.

Добавьте ему текстуру и создайте ландшафт на свое усмотрение - понятно.

После, создайте игрока (сферу)                                                          - понятно.

Создайте и прикрепите к нему скрипт PlayerController                   - понятно.

Не понятно!

Внутри скрипта опишите движение игрока-сферы используя метод AddForce().

 

Про метод AddForce() прочитал на офф. сайте в Руководстве.

(https://docs.unity3d.com/ru/current/ScriptReference/30_search.html?q=AddForce)

 

Вот, как именно мне нужно описать движение игрока-сферы используя метод AddForce(), после просмотра видеоуроков №№ 1 – 3, мне не понятно.

 

Объясните пожалуйста можно просто на словах))

Спасибо.

Отсортировать по: Стандартный | Последний | Голоса
Виталий Бойко разместил пост 18 октября 2016

Я тоже стопорнулся на этом моменте. На сколько я помню, тебе нужно добавить игроку Rigidbody, затем в коде получить компонент ригидбоди и добавить к нему AddForce();

Что-то вроде этого: rb = GetComponent(RigidBody3D);

rb.AddForce(пишешь значения);

  • Пост понравился
  • Александр Свентозельский
Oleh Zahorodnii разместил пост 18 октября 2016

Здравствуйте, Александр!

К игроку необходимо прикрепить компонент Rigidbody.

Метод AddForce(Vector3 force, ForceMode mode) позволяет применить силу к объекту в направлении вектора force, также возможно задать тип применяемой силы (параметр mode).

Если для вашей игры очень важны физические взаиможействия между объектами и их реалистичность, рекоммендуется использовать именно этот метод.

Чтобы обратиться к компоненту Rigidbody и его методам через код C#, необходимо сначала получить ссылку на сам компонент, используя для этого метод GetComponent<T>().

 

Пример:

 

using UnityEngine;

 

public class Player : MonoBehaviour

{

   private Vector3 direction = Vector3.zero;

   new private Rigidbody rigidbody;

 

   private void Start()

   {

      rigidbody = GetComponent<Rigidbody>();

   }

 

   private void Update()

   {

      direction = transform.position + transform.forward;

      rigidbody.AddForce(direction, ForceMode.Impulse);

   }

}

 

Этот пример реализует неприрывное движение вперед. Вам останется лишь дописать скрипт, чтобы была возможность регулировать клавишами вектор направления force.

Обязательно обратите внимание на типы применяемой силы (ForceMode), некоторые из них учитывают вес твердого тела, некоторые - нет.

Не забывайте, что вектор force задает направление применяемой силы. Величина же силы регулируется длинной этого вектора.

 

Творческих успехов!

  • Пост понравился
  • Oleg Taritsa
  • Александр Свентозельский
Александр Свентозельский разместил пост 19 октября 2016

Спасибо за ответ) буду разбираться. 

Александр Свентозельский разместил пост 19 октября 2016

Поигрался и немного разобрался с компонентом Rigidbody и методом AddForce.

 sing UnityEngine;

using System.Collections;

 public class PlayerControllersAddForce : MonoBehaviour

{

    private Vector3 direction = Vector3.zero;

     new private Rigidbody rigidbody;

     void Start()

    {

        direction = transform.TransformDirection(direction);

        rigidbody = GetComponent<Rigidbody>();

    }

     void Update()

    {

        direction = new Vector3(Input.GetAxis("Horizontal"), 0, Input.GetAxis("Vertical"));

        rigidbody.AddForce(direction, ForceMode.Acceleration);

    }

}

 Добавил две строки:

// Преобразование координат текущего объекта из локальных в world space

direction = transform.TransformDirection(direction);

direction = new Vector3(Input.GetAxis("Horizontal"), 0, Input.GetAxis("Vertical"));

 По домашке:

Внутри скрипта опишите движение игрока-сферы используя метод AddForce().

 Такое решение позволяет считать его правильным?))

Меня смущает выражение «опишите движение».

 Что из этого всего рекомендуется либо нет писать в методах Start () и Update () ?

Надеюсь на понимание, Спасибо)

 

Oleh Zahorodnii разместил пост 20 октября 2016

Добрый день, Александр!



Вы всё верно написали. Останется только немного отточить, чтобы большое была чувствительность, скорость т.д. Но это уже по вкусу.

Что касается методов Start() и Update(), у вас тоже всё правильно.

 

В Update()  не рекомендуется писать вызовы ресурсоёмких методов:

GetComponent<T>(), GetComponents<T>()

GetComponentInChildren<T>(), GetComponentInChildren<T>()

GetComponentInParent<T>(), GetComponentsInParent<T>()

FindObjectOfType<T>(), FindObjectsOfType<T>()

FindObjectsOfTypeAll(Type type), FindObjectsOfTypeIncludingAssets(Type type)

GameObject.Find(string name)

Resources.Load<T>(string name) (и другие методы загрузки ресурсов)

...

 

Этими методами лучше воспользоваться единожды. Например, при создании объекта, получить ссылки на нужные объекты, компоненты.

  • Пост понравился
  • Oleg Taritsa
  • Александр Свентозельский
Close