public class RingBulletController : MonoBehaviour
{
public int numberOfProjectiles; // 子弹数量
public float projectileSpeed; // 子弹速度
public GameObject ProjectilePrefab; // 子弹预制
private Vector3 startPoint; // 子弹起始点
private const float radius = 1F; // 子弹环形模式半径
private float timer = 0f; // 子弹发射间隔计时器
[SerializeField] private float firingRate = 1f; // 子弹发射间隔
void Update()
{
timer += Time.deltaTime; // 计算子弹发射间隔
if (timer >= firingRate) // 如果子弹发射间隔满足条件
{
startPoint = transform.position; // 设置子弹起始点
SpawnProjectile(numberOfProjectiles); // 发射子弹
timer = 0; // 重置子弹发射间隔计时器
}
}
// 发射子弹
private void SpawnProjectile(int _numberOfProjectiles)
{
float angleStep = 360f / _numberOfProjectiles; // 计算子弹发射角度步长
float angle = 0f; // 子弹发射角度
for (int i = 0; i <= _numberOfProjectiles - 1; i++) // 循环发射子弹
{
float projectileDirXPosition = startPoint.x + Mathf.Sin((angle * Mathf.PI) / 180) * radius; // 计算子弹X坐标
float projectileDirYPosition = startPoint.y + Mathf.Cos((angle * Mathf.PI) / 180) * radius; // 计算子弹Y坐标
Vector3 projectileVector = new Vector3(projectileDirXPosition, projectileDirYPosition, 0); // 计算子弹向量
Vector3 projectileMoveDirection = (projectileVector - startPoint).normalized * projectileSpeed; // 计算子弹移动方向
GameObject tmpObj = Instantiate(ProjectilePrefab, startPoint, Quaternion.identity); // 实例化子弹
tmpObj.GetComponent<Rigidbody>().velocity = new Vector3(projectileMoveDirection.x, 0, projectileMoveDirection.y); // 设置子弹速度
Destroy(tmpObj, 4F); // 销毁子弹(4秒后)
angle += angleStep; // 增加子弹发射角度
}
}
}
public class RingBulletController : MonoBehaviour
{
public int numberOfProjectiles; // 子弹数量
public float projectileSpeed; // 子弹速度
public GameObject ProjectilePrefab; // 子弹预制
private Vector3 startPoint; // 子弹起始点
private const float radius = 1F; // 子弹环形模式半径
private float timer = 0f; // 子弹发射间隔计时器
[SerializeField] private float firingRate = 1f; // 子弹发射间隔
void Update()
{
timer += Time.deltaTime; // 计算子弹发射间隔
if (timer >= firingRate) // 如果子弹发射间隔满足条件
{
startPoint = transform.position; // 设置子弹起始点
SpawnProjectile(numberOfProjectiles); // 发射子弹
timer = 0; // 重置子弹发射间隔计时器
}
}
// 发射子弹
private void SpawnProjectile(int _numberOfProjectiles)
{
float angleStep = 360f / _numberOfProjectiles; // 计算子弹发射角度步长
float angle = 0f; // 子弹发射角度
for (int i = 0; i <= _numberOfProjectiles - 1; i++) // 循环发射子弹
{
float projectileDirXPosition = startPoint.x + Mathf.Sin((angle * Mathf.PI) / 180) * radius; // 计算子弹X坐标
float projectileDirYPosition = startPoint.y + Mathf.Cos((angle * Mathf.PI) / 180) * radius; // 计算子弹Y坐标
Vector3 projectileVector = new Vector3(projectileDirXPosition, projectileDirYPosition, 0); // 计算子弹向量
Vector3 projectileMoveDirection = (projectileVector - startPoint).normalized * projectileSpeed; // 计算子弹移动方向
GameObject tmpObj = Instantiate(ProjectilePrefab, startPoint, Quaternion.identity); // 实例化子弹
tmpObj.GetComponent<Rigidbody>().velocity = new Vector3(projectileMoveDirection.x, 0, projectileMoveDirection.y); // 设置子弹速度
Destroy(tmpObj, 4F); // 销毁子弹(4秒后)
angle += angleStep; // 增加子弹发射角度
}
}
}
以上代码有两个重复的类定义,应该合并为一个类。
评论 (0)