Почему куб попадает в другой куб, а не останавливается при ударе обоих коллайдеров? - PullRequest
0 голосов
/ 19 марта 2020

Я не хочу использовать сценарий с OnTriggerEnter или что-то в этом роде, но для имитации красного куба в качестве стены, и когда коллайдер синего куба столкнулся с коллайдером красного куба, он должен остановиться. У обоих кубов есть коллайдер, и в обоих случаях триггер Is отмечен как true. Я также пробовал один из них или оба, когда не отмечен как true. Размер обоих коллайдеров на Z установлен на 3.

Но синий куб становится красным и не останавливается при столкновении:

Cubes

Синий кубик попадает внутрь красного:

Cubes

Я пытался добавить твердое тело к движущемуся кубу, синий куб, но при использовании Является ли Kinemati c таким же поведением, если не используется Is Kinemati c синий кубик падает.

Это скрипт, прикрепленный к синему кубу для перемещения его в целевой красный куб:

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

public class MoveObject : MonoBehaviour
{
    public GameObject target;
    public float speed;

    // Update is called once per frame
    void Update()
    {
        transform.position = Vector3.MoveTowards(transform.position, target.transform.position, Time.deltaTime * speed);
    }
}

Я хочу, чтобы синий кубик остановился при столкновении с коллайдером красного куба, поэтому я установил для них значение Z на 3. Сейчас мне не нужна физика.

Нужно ли мне использовать OnTriggerEnter? в моем сценарии для этого?

Я думал, что тоже пробовал, но, похоже, это работает: оба флажка коллайдеров на кубах сняты, установили ложный триггер, и я добавил твердое тело к движущемуся кубу, синий и снял галочку с использования силы тяжести и теперь, похоже, работает. * 10 26 *

Так что мне нужно твердое тело, даже если я не использую физику. Интересно, почему.

This is working. Then why do I need a rigidbody if not using gravity and don't want to use physics ?

Мой персонаж сходит с ума, когда пытается заставить его столкнуться с красным кубом, как я это делал с синим кубом. Но теперь с характером солдата все становится не так. У солдата твердое тело и коробочный коллайдер, и он движется вперед, используя контроллер аниматора с состоянием анимации Humanoidwalk:

Not working good with a soldier character I tried also other characters same problem/s

1 Ответ

1 голос
/ 19 марта 2020

На красном кубе:

  • Коробчатый коллайдер

Вам не нужно твердое тело на красном кубе, потому что вы этого не делаете хотите изменить его положение или вращение.

На синем кубе:

  • Коробчатый коллайдер
  • Жесткое тело
    • Использование Гравитация выключена
    • Является ли Kinemati c выключенным
  • Заставьте скрипт изменить скорость твердого тела или используйте Rigidbody.AddForce в FixedUpdate вместо изменения позиции преобразования , Этот ответ на сайте вопросов и ответов Unity aldonaletto может быть довольно легко принят для этого:
public class MoveObject : MonoBehaviour
{
    public GameObject target;
    public float toVel = 2.5f;
    public float maxVel = 15.0f;
    public float maxForce = 40.0f;
    public float gain = 5f;
    public Rigidbody rb;

    void Awake()
    {
        rb = GetComponent<Rigidbody>();
    }

    void FixedUpdate()
    {
        Vector3 dist = target.transform.position - transform.position;
        dist.y = 0; // ignore height differences

        // calc a target vel proportional to distance (clamped to maxVel)
        Vector3 tgtVel = Vector3.ClampMagnitude(toVel * dist, maxVel);

        // calculate the velocity error
        Vector3 error = tgtVel - rb.velocity;

        // calc a force proportional to the error (clamped to maxForce)
        Vector3 force = Vector3.ClampMagnitude(gain * error, maxForce);
        rb.AddForce(force);
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...