NoteController.cs 2.3 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364
  1. using UnityEngine;
  2. /* 控制音符生命周期管理
  3. * 1. 音符的生成
  4. * 2. 音符的销毁
  5. * 3. 音符的移动
  6. * 4. 音符的音效播放
  7. * 5. 音符的碰撞检测
  8. * 6. 音符需要提前4秒创建
  9. */
  10. public class NoteController : MonoBehaviour
  11. {
  12. public float speed = 2; // 音符移动速度
  13. public float hitTime = 0f; // 音符点击的时间
  14. private float endTime = 0f; // 音符消失时间
  15. public string action = ""; // 音符对应的动作
  16. private float hitLeadTime = 4f; // 音符提前创建的时间
  17. // Start is called once before the first execution of Update after the MonoBehaviour is created
  18. void Start()
  19. {
  20. hitLeadTime = GameData.noteStartLeadTime; // 获取音符提前创建的时间
  21. transform.position = new Vector3(-1 * hitLeadTime * speed, -2, 5); // 初始化音符位置
  22. transform.localScale = NoteSize(); // 设置音符大小
  23. endTime = hitTime + hitLeadTime; // 设置音符消失时间
  24. if (action == "left")
  25. {
  26. transform.rotation = Quaternion.Euler(0, 0, -90); // 设置音符旋转角度
  27. }
  28. else if(action == "right")
  29. {
  30. transform.rotation = Quaternion.Euler(0, 0, 90); // 设置音符旋转角度
  31. }
  32. else if (action == "up")
  33. {
  34. transform.rotation = Quaternion.Euler(0, 0, 180); // 设置音符旋转角度
  35. }
  36. }
  37. // Update is called once per frame
  38. void Update()
  39. {
  40. // 检测是否超过消失时间,如果超过则销毁音符
  41. if (Time.time > endTime)
  42. {
  43. Destroy(gameObject);
  44. }
  45. else
  46. {
  47. transform.position += new Vector3(speed * Time.deltaTime, 0, 0); // 移动音符
  48. // transform.Translate(new Vector3(speed * Time.deltaTime, 0, 0)); // 移动音符
  49. transform.localScale = NoteSize(); // 设置音符大小
  50. }
  51. }
  52. // 根据距离hitTime的时间差来调整音符的大小
  53. public Vector3 NoteSize()
  54. {
  55. float positionX = transform.position.x; // 获取音符当前X坐标
  56. float deltaSize = 1 - (Mathf.Abs(positionX / speed) / hitLeadTime);
  57. float size = 0.4f + 0.6f * deltaSize; // 根据时间差计算音符大小
  58. return new Vector3(size, size, 1); // 调整音符大小
  59. }
  60. }