朝着目标物体发射子弹,子弹在两点之间平均分布,可以控制平均角度,离点半径和数量
/// <summary>
/// 实例化子弹
/// </summary>
/// <param name="_obj">预制</param>
/// <param name="_parent">节点</param>
/// <param name="_r">半径</param>
/// <param name="_num">子弹数量</param>
/// <param name="_angleArea">平分角度[0-360]</param>
/// <param name="_pointA"></param>
/// <param name="_pointB"></param>
void SpawnPoint(Transform _obj, Transform _parent, float _r, int _num, float _angleArea, Vector3 _pointA, Vector3 _pointB)
{
float jiajiao = GetAngle(_pointA, _pointB).z;
if (_angleArea > 360)
_angleArea -= 360;
float _angle = -jiajiao + (_angleArea / _num) * (_num - 1) * 0.5f;
for (int i = 0; i < _num; i++)
{
Transform tr = Instantiate(_obj, _parent);
float hudu = _angle * Mathf.Deg2Rad;
float xx = _pointA.x + _r * Mathf.Sin(hudu);
float yy = _pointA.y + _r * Mathf.Cos(hudu);
Vector3 newPoint = new Vector3(xx, yy, 0);
tr.position = newPoint;
tr.eulerAngles = GetAngle(_pointA, newPoint);
_angle -= _angleArea / _num;
}
}
/// <summary>
/// 求夹角-2d
/// </summary>
/// <param name="aPoint"></param>
/// <param name="bPoint"></param>
/// <returns></returns>
Vector3 GetAngle(Vector3 aPoint, Vector3 bPoint)
{
Vector3 direct= bPoint - aPoint;
Vector3 normal = Vector3.Cross(Vector2.up, direct.normalized);
#region 点乘求夹角
/*
float normal1 = Vector3.Dot(Vector2.up, direct.normalized);
float angle = Mathf.Acos(normal1) * Mathf.Rad2Deg;
*/
#endregion
float zAngle = Vector2.Angle(Vector2.up, direct.normalized);
// Debug.Log($"{zAngle},{normal}");
zAngle = normal.z > 0 ? zAngle : -zAngle;
return new Vector3(0,0, zAngle);
}
下载链接
https://download.csdn.net/download/sinat_38829681/89669940