向不同方向产生子弹(Unity/C#)

问题描述 投票:0回答:1

我正在尝试创建一个半圆形子弹分布(类似于所附插图IMAGE)。

我不知道如何正确计算角度。现在我拥有的是一把可以瞄准任何方向的枪,所以我也考虑了它的旋转。然后子弹就朝着所指的方向射去。

这是我目前拥有的伪代码。但现在,我不知道如何计算角度并相对于当前方向进行半圆子弹传播。

我已经研究过像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;

当然,这不能正常工作。我刚刚做了一些尝试和错误,所以我不确定如何解决它。

c# unity-game-engine quaternions angle
1个回答
0
投票

我不太明白你尝试这样做的方式,但我可能会做类似的事情:

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;
}

此代码通过枪的旋转来初始化射弹,并为其添加随机旋转。然后让它朝它所面对的方向走就完成了。

© www.soinside.com 2019 - 2024. All rights reserved.