[英]Projectile shooting with custom force
我做了一个弹丸射击系统。 我想按照指示的路径从 position A 到 B 拍摄 object。 除了一件事,一切都很好。 object 上应用的速度是根据 A 和 B 之间的距离计算的,时间的值为 1 来移动这个距离。 这意味着我打得越远,它走得越快。 我想控制施加的力。 这意味着无论我打近还是远,它都应该以我设定的速度 go 。 尝试标准化速度并将其乘以我的自定义力值,但随后它会远离其轨迹。 (请参阅下面的此链接,无论我们击中 object 的距离有多近或多远。它按照指示的轨迹以相同的速度运行。我想开发此功能。https://play.google.com/store/apps/详细信息?id=com.ghakilo.trickytrack )
Vector3 calculateVelocity(Vector3 target, Vector3 origin, float time)
{
Vector3 distance = target - origin;
Vector3 distanceXZ = distance;
distanceXZ.y = 0f;
float Sy = distance.y;
float Sxz = distanceXZ.magnitude;
float Vxz = Sxz / time;
float Vy = 0f;
Vy = Sy / time + 0.5f * Mathf.Abs(Physics.gravity.y) * time;
Vector3 result = distanceXZ.normalized;
result = result * Vxz;
result.y = Vy;
return result;
}
物理时间!
速度是一个矢量,其大小为速度。
如果你想确定你的弹丸开始的速度,那只剩下你手中的速度方向,所以你需要计算你想要弹丸的方向。
如果你像我一样,你直接朝目标射击,所以你需要将方向矢量设置为从原点到目标的 go。 这只是target - origin
,或者你计算的distance
。 我将称之为这个direction
,因为这就是它真正的用途。
现在将其用作速度的方向向量,将distance
转换为单位向量(不确定在统一框架中如何执行此操作,但direction.Normalize()
?)
然后乘以速度得到你的速度向量!
Vector3 calculateVelocity(Vector3 target, Vector3 origin, float speed)
{
Vector3 direction = target - origin;
direction.Normalize();
Vector3 result = direction * speed;
return result;
}
首先为你的子弹添加rigidbody
并将重力比例设置为.5
并将此代码添加到您的子弹预制件中
Vector3 calculateVelocity(Transform target, Transform origin, float time)
{
Vector3 direction = target.transform.position - origin.transform.position;
float distance = Vector3.Distance(origin.transform.position, target.transform.position);
result = direction.normalized * distance * speed * Time.deltaTime;
return result;
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.