Unity edge collider 2d не работает

Обновлено: 04.07.2024

Здравствуйте, я недавно начал изучать Юнити, так как подумал что хочется не только играть а и создать что-то своё, и спустя день столкнулся с тем чего не понимаю. Я создал два объекта и дал им компонент Сollider 2D, так как один из объектов герой, также я ему дал Rigidbody 2D и скрипт передвижения по клавишам. (У героя Body Type - Kinematic). Когда я запустил проверить персонаж к моей радости двигался и весьма неплохо, вот только он проходил сквозь объект насквозь место того что бы ударится об него.
Помогите!
Вот скрипт для передвижения, может в нём ошибка.

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class control : MonoBehaviour
public float speed;
private Rigidbody2D rb;
private Vector2 moveVelocity;

void Start()
rb = GetComponent < Rigidbody2D > ();
>


void Update()
Vector2 moveInput = new Vector2(Input.GetAxisRaw("Horizontal"), Input.GetAxisRaw("Vertical"));
moveVelocity = moveInput.normalized * speed;

>
void FixedUpdate()
rb.MovePosition(rb.position + moveVelocity * Time.fixedDeltaTime);
>
>

  • Вопрос задан более года назад
  • 884 просмотра

>У героя Body Type - Kinematic
У героя Body Type должен быть Dynamic, иначе физика не заработает. Тип Kinematic - положение объектом полностью управляется скриптом, а не физикой. Значит, если вы хотите использовать физику, то используйте тип Dynamic.

Препятствия можно сделать кинематичными или даже статичными (например, земля или неподвижные платформы), тогда они не будут двигаться персонажем (кинематичные можно двигать скриптом), а если вы хотите расшвыривать булыжники или ящики (с помощью физики), то они тоже должны быть динамичными. Плюс для динамичных объектов нужно указывать правильную массу.

Для начала рекомендую серию из трёх статей (во второй см. комментарий для доработки старого кода в новых версиях юнити)


Проблема в том, что мне нужно создать открывающуюся дверь. Эта дверь должна открываться, когда игрок входит в Box Collider, который соединен с дверью. Но проблема в том, что когда дверь начинает открываться и вращаться, Коллайдер тоже начинает вращаться, что доставляет мне много проблем с такой идеей. Я пытаюсь создать EmptyObject с его коллайдером, но я не могу подключить этот коллайдер со скриптом и самой функцией OnTriggerEnter. Может я чего-то не понимаю, кто знает, я просто начинающий. Как умеет помочь, напишите пожалуйста ответ. Мой код, если он кому-то нужен:

  • i += 1; if (i == 70) . ты действительно хочешь подождать 70 кадры ? Что делать, если частота кадров изменится?

Вот как я буду обращаться со сценарием

DoorHandler.cs

Он должен быть прикреплен к родительскому элементу двери.

Door.cs

Прикрепите это к Door GameObject

Иерархия будет похожа на DoorHandler-> Дверь-> DoorModel (где Дверь - это просто пустой стержень игрового объекта двери)


В DoorHandler GameObject прикрепить BoxCollider и отметьте галочкой IsTrigger .


Также игрок ДОЛЖЕН ИМЕТЬ ЖЕСТКИЙ КОРПУС (желательно Kinametic) и, очевидно, коллайдер

  • Еще один вопрос: Door-Handler - это просто пустой объект с Box Collider?
  • Да, это просто пустой объект игрового объекта с Box Collider в качестве триггера.
  • Боже мой, спасибо большое! Вы мне очень помогли. Мне тоже нужно было закрыть дверь, но я это уже сделал. Еще раз спасибо! + rep)
  • Рад помочь! : D

Добавьте еще одну проверку в OnTriggerEnter, которая проверяет, открывается дверь в данный момент или нет.

  • Я хотел обездвижить BoxCollider, но это не то, что мне нужно. Но все равно спасибо)
  • @ Вы можете использовать отдельный объект (и запускать коллайдер) от двери, чтобы обнаружить игрока. Я не хотел, чтобы вы заморозили коллайдер коробки на двери, потому что вы не хотите, чтобы игроки прорезали дверь, когда она движется. Суть в том, что если вы хотите, чтобы область триггера была отделена от объекта, на который она влияет? Если у вас есть стальная пластина, к которой игрок подойдет, чтобы открыть дверь с другой стороны, действительно ли вы хотите, чтобы эти объекты были прикреплены к одной иерархии?

прикрепите дверь к пустому объекту. поставить спусковой крючок на пустой объект. затем заставьте вход ontrigger вращать дверь, а не закрытый объект, и коллайдер останется на месте.

Читайте также: