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