Test2DLocalMove.cs 1.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556
  1. using UnityEngine;
  2. using System.Collections;
  3. public class Test2DLocalMove : MonoBehaviour {
  4. //public Transform from;
  5. //public Transform to;
  6. public Vector3 mStart = Vector3.zero;
  7. public Vector3 mEnd = Vector3.zero;
  8. Vector3 center = Vector3.zero;
  9. private float mF1;
  10. private float mF2;
  11. private float mFloat = 0;
  12. bool isYes = false;
  13. public void Init(Vector3 start, Vector3 end)
  14. {
  15. this.mStart = start;
  16. this.mEnd = end;
  17. LogHelper.Log(this.mStart.ToString() + "/" + this.mEnd.ToString());
  18. mF1 = Random.Range(-2.0f, 2.0f);
  19. mF2 = Random.Range(0.0f, 1.0f);
  20. isYes = true;
  21. // 弧线的中心
  22. center = (mStart + mEnd) * 0.5f;
  23. }
  24. void Update()
  25. {
  26. if (isYes)
  27. {
  28. mFloat += Time.deltaTime*30000;
  29. // 向下移动中心,垂直于弧线
  30. center -= new Vector3(mF2, mF1, 0);
  31. // 相对于中心在弧线上插值
  32. Vector3 riseRelCenter = mStart - center;
  33. Vector3 setRelCenter = mEnd - center;
  34. transform.position = Vector3.Slerp(riseRelCenter, setRelCenter, mFloat);
  35. transform.position += center;
  36. if (transform.position == mEnd)
  37. {
  38. isYes = false;
  39. StartCoroutine(Destroy());
  40. }
  41. }
  42. }
  43. IEnumerator Destroy()
  44. {
  45. yield return new WaitForSeconds(0.2f);
  46. //Destroy(this.gameObject);
  47. }
  48. }