#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 увеличивается вместе со спрайтом, что означает, что мне не нужно самому изменять радиус коллайдера.