Сцепление между двумя объектами - PullRequest
3 голосов
/ 17 мая 2019

Мне нужно сцепление между двумя объектами enter image description here на самом деле маленький куб - это игрок с твердым телом, а большой куб - это объект, который помогает маленькому кубу прыгать на нем и продолжать прыгать на других больших кубах, чтобы достичьк месту назначения.Мне нужно, когда игрок прыгает и приземляется на вращающийся куб, поэтому между ними должно быть трение, по умолчанию игрок должен вращаться с большим кубом, потому что он на большом кубе.

Ожидаемый результат состоял в том, что маленький кубик имел твердое телотакже должен вращаться с большим кубом, потому что большой куб вращается и находится на большом кубе:

my scene

Ответы [ 2 ]

2 голосов
/ 17 мая 2019

Вы можете установить игровой объект малого куба как дочерний объект игрового объекта большого куба.Это должно к хитрости.

enter image description here

---- РЕДАКТИРОВАТЬ ПОСЛЕ КОММЕНТАРИЙ

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

=> Когда игрок (маленький кубик) находится на большом кубе, вы намного больше становитесь дочерним игроком большого куба.

=> Когда игрок (маленький кубик) отходит от большого куба, вы, как правило, проигрываете его в большой куб.

Если вы используете жесткие тела, вы можете использовать OnCollisionEnter и OnCollisionExit .

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

public class BigCubeScript : MonoBehaviour
{
    private void OnCollisionEnter(Collision other)
    {
        //check if the colliding object is player (here I'm using a tag, but you may check it as you prefer)
        if (other.gameObject.tag == "Player")
            //change the parent of the player, setting it as this cube
            other.transform.SetParent(this.transform);
    }

    void OnCollisionExit(Collision other)
    {
        if (other.gameObject.tag == "Player")
            //remove the player from the cube
            other.transform.SetParent(null);
    }
}

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

public class BigCubeScript : MonoBehaviour
{
    //you may change this to add or remove the force
    Vector3 _rotationForce = new Vector3(0, 5, 0);

    private void OnCollisionStay(Collision other)
    {
        var rigidbody = other.gameObject.GetComponent<Rigidbody>();
        Quaternion deltaRotation = Quaternion.Euler(_rotationForce * Time.deltaTime);
        rigidbody.MoveRotation(rigidbody.rotation * deltaRotation);
    }
}

Дополнительная информация о OnCollisioEnter и OnCollisionExit в этом Unity Tutorial

Дополнительная информация о тегах в этом Unity Tutorial

1 голос
/ 19 мая 2019

Вы можете попытаться ограничить положение и вращение твердого тела маленького кубика.После этого вы можете вызывать constrains.none, чтобы вы могли снова разрешить прыжок и делать это каждый раз, когда маленький кубик сталкивается с большим.Надеюсь, это поможет:)

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