@ZeynGort

Unity 2d функция Collider 2D почему не работает?

Здравствуйте, я недавно начал изучать Юнити, так как подумал что хочется не только играть а и создать что-то своё, и спустя день столкнулся с тем чего не понимаю. Я создал два объекта и дал им компонент С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);
}
}
  • Вопрос задан
  • 1742 просмотра
Решения вопроса 1
lexxpavlov
@lexxpavlov
Программист, преподаватель
>У героя Body Type - Kinematic
У героя Body Type должен быть Dynamic, иначе физика не заработает. Тип Kinematic - положение объектом полностью управляется скриптом, а не физикой. Значит, если вы хотите использовать физику, то используйте тип Dynamic.

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

Для начала рекомендую серию из трёх статей (во второй см. комментарий для доработки старого кода в новых версиях юнити)
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
@Gera01
Unity, С# и больше ничего.
rb = GetComponent(); Это так не работает, потому что у тебя на обьекте много компонентов, поэтому нужно указать тип.rb = GetComponent<Rigidbody2D >();
И еще чтобы сработала функцияOnCollisionEnter2D тебе нужно ее написать...

То есть:
private void OnCollisionEnter2D(Collision2D collision)
    {
        //и тут ты описываешь что тебе нужно сделать при столкновении. 
    }


И на следующий раз проверь все сам, а потом задавай вопрос)
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы