Unity3d Starter

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

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

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

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

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

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

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

Не понятно!

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

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

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

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

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

Спасибо.

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

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

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

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

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

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

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

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

Пример:

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 задает направление применяемой силы. Величина же силы регулируется длинной этого вектора.

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

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

Поигрался и немного разобрался с компонентом 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 () ?

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

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



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

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

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

GetComponent(), GetComponents()

GetComponentInChildren(), GetComponentInChildren()

GetComponentInParent(), GetComponentsInParent()

FindObjectOfType(), FindObjectsOfType()

FindObjectsOfTypeAll(Type type), FindObjectsOfTypeIncludingAssets(Type type)

GameObject.Find(string name)

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

...

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

Андрей, Здравствуйте.
Я смотрел вашу запись стрима по созданию 2D платформера.
Передвижение сделал правильно, триггеры вроде разместил правильно, код правильный, rigidbody хз (там чуть не так, версия 5.5.2f1), но персонаж передвигается небольшими прыжками и упирается в ближний юнит (сравнится между двух юнитов и упирается в края каждого). Делал другой триггер - точно так же. Помогите, пожалуйста. Если что-то нужно дополнительно (информация, скрины) пишите.