Я работаю над игрой единства. В нем я хочу иметь возможность давать разные сущности разной степени трения, не создавая в редакторе несколько материалов. В настоящее время я пытаюсь это сделать, определяя 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.
Вероятно, проблема заключается в том, что у вас есть физический материал как для вашего персонажа, так и для пола, а метод комбинирования состоит в том, чтобы взять меньший из двух, вы всегда получите меньшее значение.
Чтобы исправить это, вы либо удаляете физический материал из персонажа, устанавливаете его достаточно высоким, он всегда перезаписывается или меняет его в зависимости от того, на что вы стоите, чтобы получить правильное поведение.