Выравнивание CircleCollider2D с единством спрайтов

#c# #unity5

#c# #unity3d

Вопрос:

Я создаю 2D-симуляцию завода с использованием 2D-спрайтов в Unity. Растения представлены в виде круговых спрайтов. Что я хочу сделать, так это увеличить радиус спрайта и заставить CircleCollider2D следовать за ним. Поскольку они имеют разные масштабы, я использую постепенное увеличение радиуса вместо абсолютного увеличения. Но проблема в том, что радиус коллайдера увеличивается быстрее, чем спрайт, хотя соотношение между радиусом коллайдера и радиусом спрайта остается неизменным.

Вот код, который увеличивает размер:

 void Grow(GameObject plant)
{
    float currentRadius = plant.GetComponent<CircleCollider2D>().radius;            //Radius of the collider 
    float scaledRadius = Mathf.Max(plant.transform.localScale.x, transform.localScale.y);       //Radius of the sprite

    float radiusIncrease = growthSpeed * Time.deltaTime;

    float procIncrease = (currentRadius   radiusIncrease) / currentRadius;    //The procuental increase of the radius, need for sprite scaling
    plant.GetComponent<CircleCollider2D>().radius *= procIncrease;

    Vector3 oldLocalScale = plant.transform.localScale;
    Vector3 newLocalScale = new Vector3(oldLocalScale.x * procIncrease, oldLocalScale.y * procIncrease, oldLocalScale.z);
    plant.transform.localScale = newLocalScale;
}
  

Комментарии:

1. Вы должны использовать одинаковое масштабирование для вашего коллайдера и спрайта. Кстати, вы опубликовали полный код? Например, в этом случае вообще не используется «scaledRadius».

2. Это полный код для увеличения размера спрайта. scaledRadius был просто чем-то, что я забыл удалить, так как мне это было не нужно. Как я могу использовать одинаковое масштабирование для обоих? Чтобы CircleCollider2D соответствовал спрайту, мне нужно значительно уменьшить радиус коллайдера и увеличить масштабирование спрайта. В моем случае спрайт имеет масштабирование 100 (как по оси x, так и по оси y), а радиус коллайдера установлен равным 0,09.

Ответ №1:

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