public class Test : MonoBehaviour
{
public GameObject OriPosObj;
public GameObject TargetPosObj;
[Range(1, 180)]
public float fAngle;
public GameObject goEffect;
private List<Vector3> mPosList = new List<Vector3>();
public bool bChange = true;
private void Start()
{
TrailRenderer trailRenderer = null;
trailRenderer.Clear();
}
private void Update()
{
if (bChange)
{
bChange = false;
Vector3 OriPos = OriPosObj.transform.position;
Vector3 TargetPos = TargetPosObj.transform.position;
Vector3 OTZuoBiao_centerPos = (OriPos + TargetPos) / 2f;
Vector3 centerPos = OTZuoBiao_centerPos;
float r = Vector3.Distance(TargetPos, OriPos) / 2;
float fMinAngle = Mathf.Atan((OriPos.y - centerPos.y) / (OriPos.x - centerPos.x));
float fMaxAngle = Mathf.Atan((TargetPos.y - centerPos.y) / (TargetPos.x - centerPos.x));
Debug.Log("开始角000 : " + Mathf.Rad2Deg * fMinAngle);
Debug.Log("结束角000 : " + Mathf.Rad2Deg * fMaxAngle);
if (OriPos.y - centerPos.y >= 0 && OriPos.x - centerPos.x >= 0)
{
fMinAngle = Mathf.Abs(fMinAngle);
}
else if (OriPos.y - centerPos.y >= 0 && OriPos.x - centerPos.x <= 0)
{
fMinAngle = Mathf.PI - Math.Abs(fMinAngle);
}
else if (OriPos.y - centerPos.y <= 0 && OriPos.x - centerPos.x <= 0)
{
fMinAngle = Mathf.PI + Math.Abs(fMinAngle);
}
else if (OriPos.y - centerPos.y <= 0 && OriPos.x - centerPos.x >= 0)
{
fMinAngle = Mathf.PI * 2 - Math.Abs(fMinAngle);
}
if (TargetPos.y - centerPos.y >= 0 && TargetPos.x - centerPos.x >= 0)
{
fMaxAngle = Math.Abs(fMaxAngle);
}
else if (TargetPos.y - centerPos.y >= 0 && TargetPos.x - centerPos.x <= 0)
{
fMaxAngle = Mathf.PI - Math.Abs(fMaxAngle);
}
else if (TargetPos.y - centerPos.y <= 0 && TargetPos.x - centerPos.x <= 0)
{
fMaxAngle = Mathf.PI + Math.Abs(fMaxAngle);
}
else if (TargetPos.y - centerPos.y <= 0 && TargetPos.x - centerPos.x >= 0)
{
fMaxAngle = Mathf.PI * 2 - Math.Abs(fMaxAngle);
}
if (OriPos.x >= TargetPos.x)
{
if (fMaxAngle < fMinAngle)
{
fMaxAngle += Mathf.PI * 2;
}
}
else
{
if (fMaxAngle > fMinAngle)
{
fMaxAngle -= Mathf.PI * 2;
}
}
Debug.Log("开始角111: " + Mathf.Rad2Deg * fMinAngle);
Debug.Log("结束角111: " + Mathf.Rad2Deg * fMaxAngle);
//float fAddAngle = (fMaxAngle - fMinAngle) / nSegmentCount;
//mPosList.Clear();
//for (int i = 0; i <= nSegmentCount; i++)
//{
// float fAngle2 = fMinAngle + i * fAddAngle;
// float fTempPosX = 0;
// float fTempPosY = 0;
// fTempPosX = centerPos.x + r * Mathf.Cos(fAngle2);
// fTempPosY = centerPos.y + r * Mathf.Sin(fAngle2);
// mPosList.Add(new Vector3(fTempPosX, fTempPosY, 0));
// goEffect.transform.position = new Vector3(fTempPosX, fTempPosY, 0);
//}
goEffect.transform.position = OriPos;
LeanTween.value(fMinAngle, fMaxAngle, 1.0f).setOnUpdate((float fAngle2)=>
{
float fTempPosX = 0;
float fTempPosY = 0;
fTempPosX = centerPos.x + r * Mathf.Cos(fAngle2);
fTempPosY = centerPos.y + r * Mathf.Sin(fAngle2);
goEffect.transform.position = new Vector3(fTempPosX, fTempPosY, 0);
});
}
}
}