Как сделать цвет спрайта зависимым от здоровья(чем меньше хп, тем более красный)
Иерархия обьектов:
У меня есть обьект ShootingEnemy (растение) у которого есть дочерний обьект img(на нем находится SpriteRenderer). Растение стреляет красными пульками. Игрок стреляет синими, и может ими наносить урон растению. С учетом урона у меня никаких проблем нет, но я хочу сделать чтобы цвет спрайта менялся в зависимости от его хп. То есть, чем меньше хп у растения тем краснее оно будет. Делал это так:
void Awake() {
bullet = Resources.Load<Bullet>("Bullet");
rb = FindObjectOfType<Hero>().GetComponent<Rigidbody2D>();
sprite = GetComponentInChildren<SpriteRenderer>();
}
void Update() {
sprite.color = new Color(255, 255f/5*hp, 255f/5*hp);
}
в коде ShootingEnemy
Но это не сработало. Решил проверить то, меняется ли цвет спрайта если его самостоятельно поменять в инспекторе Unity, оказалось что, судя по всему, из-за анимации обьекта цвет спрайта постоянно сбрасывается к стандартному. То есть, если поставить красный цвет и только потом запустить игру, то он станет снова белым. То же самое во время игры
Я даже пробовал вешать скрипт на сам обьект img (на котором отображается спрайт и анимация) но ничего не сработало:
public class ShootingEnemyChild : MonoBehaviour
{
private int hp;
private SpriteRenderer sprite;
private ShootingEnemy parent;
void Start()
{
sprite = GetComponent<SpriteRenderer>();
parent = transform.parent.gameObject.GetComponent<ShootingEnemy>();
}
// Update is called once per frame
void Update()
{
hp = parent.hp;
sprite.color = new Color(255, (255/5)*hp, (255/5)*hp);
}
}
Как можно исправить эту проблему и можно ли вообще реализовать эту идею(без создания новых анимаций)?
Ответы (1 шт):
Оказывается, в Unity Color принимает только числа от 0 до 1, то есть если использовать мою задумку то цвет будет либо белым(стандартным) так как числа будут (255, 51, 51) либо полностью красным. Я поменял формулу на (1f, hp/5, hp/5) и теперь все работает.
sprite.color = new Color(1f, hp/3, hp/3, 1f);
