我正在开发一款虚拟现实游戏。是一款格斗游戏,玩家将能够对敌人拳打脚踢(他的拳头上将会有一个碰撞器和一个残废的物体,上面有损坏的脚本)。我需要一个脚本来激活另一个对象(有伤害脚本的那个)-(放在他的拳头上),但只是在一定的速度或力量下(你知道,就像在现实生活中-如果敌人的手被触摸,他不应该受到伤害,只是在高强度或高速度)什么是最好的解决方案?谢谢!
发布于 2019-10-04 04:08:50
因为你玩家的拳头不受物理系统的控制,所以你不可能像正常的刚体那样读取玩家的手的速度。话虽如此,你仍然可以计算速度,并在一个脚本中处理所有你想要做的事情。
下面是一个例子:
[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,因为它删除了向量数学的平方根部分(节省了处理时间)。
https://stackoverflow.com/questions/58224189
复制相似问题