public class Cash1
{
private float _value;
public Cash1(float value)
{
_value = value;
}
public override string ToString() => $"${_value}";
}
public class Cash2
{
private float _value;
public Cash2(float startValue)
{
_value = startValue;
}
public void SetValue(float value)
{
_value = value;
}
public override string ToString() => $"${_value}";
}
public class Cash3
{
private float _value = 0;
public void SetValue(float value)
{
_value = value;
}
public float GetValue() => _value;
public override string ToString() => $"${_value}";
}
using UnityEngine;
public class Rotation : MonoBehaviour
{
[SerializeField] private float _minAngle = 0;
[SerializeField] private float _maxAngle = 90f;
[SerializeField] private float _speed = 10f;
private float _angle = 0;
private void FixedUpdate()
{
Rotate();
}
private void Rotate()
{
var nextAngle = _angle + _speed * Time.deltaTime;
_angle = Mathf.Clamp(nextAngle, _minAngle, _maxAngle);
transform.rotation = Quaternion.Euler(0, 0, _angle);
if (_angle == _minAngle || _angle == _maxAngle) SwitchDirection();
}
private void SwitchDirection() => _speed *= -1;
}
1. TryGetComponent вместо нескольких обычных GetComponent используется, чтобы не делать миллион проверок на null, как у тебя в примере.
2. Посмотри доки по TryGetComponent и out. TryGetComponent возвращает bool, а этот параметр нужен, чтобы получать компонент, если он найден.
3. Вызывает ивент Over, если значение хп == 0. Вопросительный знак - проверка на нулл. Если на Over не будет подписано ни одного метода, то вызываться он не будет.
4. Какую фукнцию(метод) и откуда ты его будешь вызывать?
5.Обобщенный интерфейс, чтобы потом, в случае чего можно было в качестве зависимости передавать не какую-то реализацию, а абстракцию в виде IMutable. IMutable и IFinal нужны для того, чтобы не перегружать IHealth лишними ответственностями, чтобы потом взаимодействовать только с нужным интерфейсом.