2015-03-23 13 views
2

У меня есть игра с маленькими автомобилями, и когда я двигаюсь вверх/вниз и влево/вправо, спрайт становится другим. Но физическое тело остается тем же. Как настроить физику? Я добавил скриншот моего спрайта. На данный момент у меня есть физическое тело Полигона, как на правом.Как изменить Polygon Collider на основе моей анимации в Unity3d?

Вот код, который регулирует анимации состояния:

void FixedUpdate() 
{ 
    if (Input.GetKey(KeyCode.W)) { 
     rb2d.AddForce(Vector2.up * physicsConstant); 
     animator.CrossFade("CarUpIdle", 0); 
    } else if (Input.GetKey(KeyCode.S)) { 
     rb2d.AddForce(-Vector2.up * physicsConstant); 
     animator.CrossFade("CarDownIdle", 0); 
    } else if (Input.GetKey(KeyCode.D)) { 
     rb2d.AddForce(Vector2.right * physicsConstant); 
     animator.CrossFade("CarRightIdle", 0); 
    } else if (Input.GetKey(KeyCode.A)) { 
     rb2d.AddForce(-Vector2.right * physicsConstant); 
     animator.CrossFade("CarLeftIdle", 0); 
    } 
} 

enter image description here

ответ

2

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

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

[SerializeField] 
private Sprite[] Sprites; 
[SerializeField] 
private PolygonCollider2D[] Colliders; 
private int index = 0; 
private SpriteRenderer sp; 

void Start() { 
    sp = GetComponent<SpriteRenderer>(); 
    sp.sprite = Value[index]; 
} 

void OnGUI() { 
    if(GUI.Button(new Rect(0,0, 80,35), "ChangeSprite")) { 
     colliders[index].enabled = false; 

     index ++; 
     if(index > Value.Length -1) { 
      index = 0; 
     } 
     sp.sprite = Sprites[index]; 
     colliders[index].enabled = true; 
    } 
} 

Кроме того, в этом руководстве это было объяснено, как решать проблемы такого рода Unity Game Tutorial

Другой способ продолжить это удалить ploygon коллайдер и воссоздать его

Destroy(GetComponent<PolygonCollider2D>()); 
gameObject.AddComponent<PolygonCollider2D>(); 

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