我不知道如何正确计算角度。现在我拥有的是一把可以瞄准任何方向的枪,所以我也考虑了它的旋转。然后子弹就朝着所指的方向射去。
这是我目前拥有的伪代码。但现在,我不知道如何计算角度并相对于当前方向进行半圆子弹传播。
我已经研究过像this这样的教程,但理解不够,无法应用于我目前拥有的内容。
intprojectileCount = 5;
Quaternion gunRotation = GetGunGlobalRotation();
for (var i = 0; i < projectileCount; i++)
{
Projectile projectile = Instantiate(projectilePrefab);
projectile.transform.position = gunBarrelPos;
projectile.rigidbody.velocity = (gunRotation * Vector3.forward) * speed;
}
我尝试过做类似的事情。
var angleStep = testAngle / projectileCount;
var angle = FP._0;
var direction = gunRotation * Vector3.forward;
var xDir = FPMath.Sin(angle * FP.Deg2Rad);
var zDir = FPMath.Cos(angle * FP.Deg2Rad);
var scatteredDir = new FPVector3(xDir, 0, zDir).Normalized;
direction += scatteredDir;
angle += angleStep;
projectile.rigidbody.velocity = direction * speed;
当然,这不能正常工作。我刚刚做了一些尝试和错误,所以我不确定如何解决它。
我不太明白你尝试这样做的方式,但我可能会做类似的事情:
for (int i = 0; i < projectileCount; i++)
{
GameObject projectile = Instantiate(projectilePrefab, gunBarrelPos, gunRotation);
Vector3 scatteredDir = new Vector3(Random.Range(-90,90),Random.Range(-90, 90), Random.Range(-90, 90));
projectile.transform.Rotate(scatteredDir);
projectile.GetComponent<Rigidbody>().velocity=projectile.transform.forward*speed;
}
此代码通过枪的旋转来初始化射弹,并为其添加随机旋转。然后让它朝它所面对的方向走就完成了。