C# 在两个角度之间实例化多个游戏对象

C# 在两个角度之间实例化多个游戏对象,c#,unity3d,C#,Unity3d,我试图在等距分布的角度之间生成n游戏对象 理想情况下,我希望能够调整“圆锥体”,以便敌人可以在任何方向、任何密度进行射击 有人能看出我做错了什么吗? 这些是敌人的炮弹。我正在尝试“分散射击”。想象一下NES Zelda中一级的龙: 尽管如此,我并不完全确定我的实现发生了什么 投射物.cs public Vector2 moveDirection = Vector2.zero; public float moveSpeed = 4.0f; private void

我试图在等距分布的角度之间生成n游戏对象

理想情况下,我希望能够调整“圆锥体”,以便敌人可以在任何方向、任何密度进行射击

有人能看出我做错了什么吗?

这些是敌人的炮弹。我正在尝试“分散射击”。想象一下NES Zelda中一级的龙:

尽管如此,我并不完全确定我的实现发生了什么

投射物.cs

    public Vector2 moveDirection = Vector2.zero;
    public float moveSpeed = 4.0f;

    private void FixedUpdate()
    {
        _body.MovePosition(transform.position + (new Vector3(moveDirection.x, moveDirection.y, 0).normalized) * (moveSpeed * Time.deltaTime));
    }
MultiShooter.cs

public GameObject projectileObject;
public Transform projectileEmitter;
[Range(2, 10)] public int numToShoot = 3;
[Space]
[Range(0, 360)] public int angle = 30;
[Range(1, 50)]  public float rayRange = 10.0f;
[Range(0, 360)] public float coneDirection = 180;
public void OnStartShooting()
{
    for (int i = 1; i <= numToShoot; i++)
    {
        var projectile = Instantiate(projectileObject);
        projectile.transform.position = projectileEmitter.position;
        var projectileScript = projectile.GetComponent<Projectile>();
        projectileScript.moveDirection = DirFromAngle(((angle / i) + coneDirection)* pointDistance, rayRange);
        projectile.SetActive(true);
    }
}
public Vector3 DirFromAngle(float angleInDegrees, float range)
{
   return Quaternion.AngleAxis(angleInDegrees, Vector3.forward) * transform.up * range;
}

对于
i
th对象,对于numtoshot>1的值,可以用公式i/(numtoshot-1)表示范围一侧到另一侧的角距离分数。如果NothToHooTo==1,你可以只占50%的百分比在范围的中间拍摄。< /P> 您的绘图方法似乎适用于conedition±angle/2,因此我们可以从该角度百分比中减去.5,以距离范围中心的角度距离表示

然后,我们可以使用与绘图方法相同的数学公式,即CONEDITION+角度百分比*角度范围:

public void OnStartShooting()
{
    for (int i = 0; i < numToShoot; i++)
    {
        var projectile = Instantiate(projectileObject);
        projectile.transform.position = projectileEmitter.position;
        var projectileScript = projectile.GetComponent<Projectile>();
        float anglePercentage;
        if (numToShoot == 1)
            anglePercentage = 0f;
        else
            anglePercentage = (float)i/(numToShoot-1f) - .5f;

        projectileScript.moveDirection = DirFromAngle(
                  coneDirection 
                + anglePercentage * angle, rayRange);
        projectile.SetActive(true);
    }
}
public void OnStartShooting()
{
对于(int i=0;i
使用当前代码会发生什么?
public void OnStartShooting()
{
    for (int i = 0; i < numToShoot; i++)
    {
        var projectile = Instantiate(projectileObject);
        projectile.transform.position = projectileEmitter.position;
        var projectileScript = projectile.GetComponent<Projectile>();
        float anglePercentage;
        if (numToShoot == 1)
            anglePercentage = 0f;
        else
            anglePercentage = (float)i/(numToShoot-1f) - .5f;

        projectileScript.moveDirection = DirFromAngle(
                  coneDirection 
                + anglePercentage * angle, rayRange);
        projectile.SetActive(true);
    }
}