Поскольку кулак вашего игрока не контролируется системой физики, будет невозможно прочитать скорость руки игрока, как если бы вы были обычным твердым телом. При этом вы все равно можете рассчитать скорость и обработать все, что вы хотите сделать в одном скрипте.
Вот пример:
[RequireComponent(typeof(DamageScript))]
public class HandSpeedMonitor : Monobehaviour
{
public float threshold;
DamageScript damageScript;
Vector3 lastPos;
public void Awake()
{
damageScript = this.GetComponent<DamageScript>();
}
public void Start()
{
lastPos = this.transform.position;
}
public void Update()
{
float velocity = (lastPos - this.transform.position).magnitude / Time.deltaTime;
if(!damageScript.enabled && velocity > threshold)
damageScript.enabled = true;
else if(damageScript.enabled)
damageScript.enabled = false;
}
}
Однако, поскольку. Magnitude является дорогимДля вызова, возможно, вы захотите сохранить свой «порог» в квадрате скорости «sqrThreshold» и использовать .sqrMagnitude, так как он удаляет компонент квадратного корня из векторной математики (экономия на обработке).