Top.Mail.Ru
Ответы

Как сделать пол в 2d игре на unity?

Как расположить полигон колайдер так чтобы игрок не перемещался на верх? Просто хочу сделать игру по типу soul knight, а как сделать так пол не понимаю.

По дате
По Рейтингу
Аватар пользователя
Новичок

Зачем тебе вообще коллайдер на полу в top-down перспективе? Тут коллайдерами стены должны быть, а не пол.
Коллайдер, если что, это /непроходимый/ элемент, а не тот, внутри которого персонаж ходит ;) В 3д, или в 2д но в перспективе с боку, коллайдер нужен на полу что б персонаж не проваливался сквозь пол. Ты сейчас, судя по скринам, работаешь в 2д, и два доступных измерения это горизонтальное и вертикальное. Вглубь (по z), провалиться нельзя, т. к. никакого z у тебя быть не должно. В твоём случае - коллайдеры это стены.
А если нужно (зачем-то) постоянно детектить столкновения, то тогда должен быть триггер.

Аватар пользователя
Мыслитель

public class Персонаж : MonoBehaviour
{

// -1- Наш персонаж (То что будет у персонажа и его действие)
public int Жизни = 3; // Количество жизней
public float Скорость = 3.0F; // Скорость Шага
public float Прыжок = 10; // Сила прыжка
// -1- Конец кода Персонажа

// -7- Создаем компонент Character Controller 2D для нормального прыжка
public bool isGrounded = false;
// -7- Конец кода cоздание компонента Character Controller 2D

// -10- Анимация (вторая часть кода)
private CharState State // Значения свойств персонажа
{
get //Получаем стейк значения свойства персонажа
{
return //Возвращает текущий стейк в Animator
(CharState) // Получаем возвращаемое значение для перечисления анимации
animator. // Мы обращаемся к Animator
GetInteger("State"); // И из метода State передаем анимацию которая там есть
}
set //Задаем значение
{
animator.SetInteger // Которое будет записывать
(
"State", // Параметр имени указаный в animator при создании переключателя.
(int) //преобразовываем значение СтатусПерсонажа
value // И то что мы записали
);
}
}
// -10- Конец кода Анимация (Вторая часть кода)

// -2- Здесь мы создаем ссылки на компоненты
new public Rigidbody2D rigidbody; // Создается сылка на Rigidbody2D
public Animator animator; // Создается сылка на Animator
public SpriteRenderer sprite; // Создается сылка на sprite (Для зеркального отражения спрайта)
// -2- Конец кода получение сылок компонентов

// -3- Сдесь мы получаем ссылки на созданные компоненты
public void Awake()
{
rigidbody = GetComponent(); //Получаем сылку на Rigidbody2D
animator = GetComponent(); //Получаем сылку на Animator
sprite = GetComponentInChildren(); //Получаем сылку на SpriteRenderer (Дочерний спрайт)

}
// -3- Конец кода получения ссылок компонентов

// -9- Вызов метода Запись колайдера (Вторая часть кода)
private void FixedUpdate() // для всей 2D физики луче вызывать этот метод
{
CheckGround(); // Тут мы вызываем этот метод персонажа
}
// -9- Конец кода Вызов метода Запись колайдера

public void Update() // Кнопки

{

Аватар пользователя
Мыслитель

1) для прямоугольной геометрии всегда используйте BoxCollider2D, а не PolygonCollider2D - так производительнее.
2) у любых коллайдеров настраиваемая геометрия: центр + точки (Polygon) или центр + размер (Box).
Измените геометрию коллайдера так, как вам нужно.