Создание и применение нового PhysicsMaterial2D в сценарии (Unity)

1

Я работаю над игрой единства. В нем я хочу иметь возможность давать разные сущности разной степени трения, не создавая в редакторе несколько материалов. В настоящее время я пытаюсь это сделать, определяя PhysicalMaterial2D как переменную-член и создавая его в методе "Пуск". Трение материала затем применяется на основе переменной открытого элемента. Затем я установил actor collider2D sharedMaterial.

public class ActorUpdateScript : MonoBehaviour {

    public float friction;

    PhysicsMaterial2D actorMaterial;

    // Use this for initialization
    void Start () {

        actorMaterial = new PhysicsMaterial2D();
        actorMaterial.friction = friction;
        collider2D.sharedMaterial = actorMaterial;


    }
}

Я могу проверить, что collider2D.sharedMaterial действительно получает новый материал, так как я могу напечатать его трение, и это дает мне ожидаемый результат. Однако, независимо от того, какое число я даю ему трения, он всегда ведет себя как материал по умолчанию. (Я считаю, что 0,4 трения). Коллизионные ящики, на которых он идет, имеют материал с трением 1.

Что я делаю не так? Есть ли у кого-нибудь какие-либо предложения о том, как сделать единство, обратить внимание на материал, который я использовал?

Кроме того, прежде чем вы скажете мне, я знаю, что могу иметь разные материалы (высокое трение, среднее трение, низкое трение и т.д.), Которые я применяю к различным объектам. Но я планирую в конечном итоге добавить супер базовую поддержку моддинга, поэтому трение для данного объекта будет установлено с помощью файла JSON.

Теги:
unity3d
unityscript

1 ответ

0

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

Чтобы исправить это, вы либо удаляете физический материал из персонажа, устанавливаете его достаточно высоким, он всегда перезаписывается или меняет его в зависимости от того, на что вы стоите, чтобы получить правильное поведение.

  • 0
    Кажется, это не так. Когда я устанавливаю трение пола на что-то около 20, а трение игрока на 0,1, это не относится к игроку так, как если бы у него было трение 0,1. Даже если я установлю его трение на 0, высокое трение пола побеждает.
  • 0
    Трение - это значение между 0 и 1, где 0 - отсутствие трения, а 1 - полное трение. Так что, если вы установите его на 0,1 и 20, объект будет иметь трение 0,1 и будет немного скользить, это то, что вы видите? Если вы установите одно из их трений на 0, а другие на 1, получите ли вы тот же результат, что и при переключении?

Ещё вопросы

Сообщество Overcoder
Наверх
Меню