12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273 |
- using UnityEngine;
- /* 控制音符生命周期管理
- * 1. 音符的生成
- * 2. 音符的销毁
- * 3. 音符的移动
- * 4. 音符的音效播放
- * 5. 音符的碰撞检测
- * 6. 音符需要提前4秒创建
- */
- public class NoteController : MonoBehaviour
- {
- public float speed = 2; // 音符移动速度
- public float hitTime = 4f; // 音符点击的时间
- private float endTime; // 音符消失时间
- public string action = ""; // 音符对应的动作
- private float hitLeadTime = 4f; // 音符提前创建的时间
- // Start is called once before the first execution of Update after the MonoBehaviour is created
- void Start()
- {
- hitLeadTime = GameData.noteStartLeadTime; // 获取音符提前创建的时间
- transform.position = new Vector3(-1 * hitLeadTime * speed, -2, 5); // 初始化音符位置
- transform.localScale = NoteSize(); // 设置音符大小
- endTime = Time.time + hitTime + hitLeadTime/2; // 设置音符消失时间
- if (action == "left")
- {
- transform.rotation = Quaternion.Euler(0, 0, -90); // 设置音符旋转角度
- }
- else if (action == "right")
- {
- transform.rotation = Quaternion.Euler(0, 0, 90); // 设置音符旋转角度
- }
- else if (action == "up")
- {
- transform.rotation = Quaternion.Euler(0, 0, 180); // 设置音符旋转角度
- }
- else if (action == "down")
- {
- // transform.rotation = Quaternion.Euler(0, 0, 0); // 设置音符旋转角度
- }
- }
- // Update is called once per frame
- void Update()
- {
- // 检测是否超过消失时间,如果超过则销毁音符
- if (Time.time > endTime)
- {
- Destroy(gameObject);
- }
- else
- {
- transform.position += new Vector3(speed * Time.deltaTime, 0, 0); // 移动音符
- // transform.Translate(new Vector3(speed * Time.deltaTime, 0, 0)); // 移动音符
- transform.localScale = NoteSize(); // 设置音符大小
- }
- }
- // 根据距离hitTime的时间差来调整音符的大小
- public Vector3 NoteSize()
- {
- float positionX = transform.position.x; // 获取音符当前X坐标
- float deltaSize = 1 - (Mathf.Abs(positionX / speed) / hitLeadTime);
- float size = 0.2f + 0.8f * deltaSize; // 根据时间差计算音符大小
- return new Vector3(size, size, 1); // 调整音符大小
- }
- void OnDestroy()
- {
- }
- }
|