Asteroid.cs 2.3 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879
  1. //------------------------------------------------------------
  2. // Game Framework
  3. // Copyright © 2013-2021 Jiang Yin. All rights reserved.
  4. // Homepage: https://gameframework.cn/
  5. // Feedback: mailto:ellan@gameframework.cn
  6. //------------------------------------------------------------
  7. using UnityEngine;
  8. using UnityGameFramework.Runtime;
  9. namespace MetaClient
  10. {
  11. /// <summary>
  12. /// 小行星类。
  13. /// </summary>
  14. public class Asteroid : TargetableObject
  15. {
  16. [SerializeField]
  17. private AsteroidData m_AsteroidData = null;
  18. private Vector3 m_RotateSphere = Vector3.zero;
  19. #if UNITY_2017_3_OR_NEWER
  20. protected override void OnInit(object userData)
  21. #else
  22. protected internal override void OnInit(object userData)
  23. #endif
  24. {
  25. base.OnInit(userData);
  26. }
  27. #if UNITY_2017_3_OR_NEWER
  28. protected override void OnShow(object userData)
  29. #else
  30. protected internal override void OnShow(object userData)
  31. #endif
  32. {
  33. base.OnShow(userData);
  34. m_AsteroidData = userData as AsteroidData;
  35. if (m_AsteroidData == null)
  36. {
  37. Log.Error("Asteroid data is invalid.");
  38. return;
  39. }
  40. m_RotateSphere = Random.insideUnitSphere;
  41. }
  42. #if UNITY_2017_3_OR_NEWER
  43. protected override void OnUpdate(float elapseSeconds, float realElapseSeconds)
  44. #else
  45. protected internal override void OnUpdate(float elapseSeconds, float realElapseSeconds)
  46. #endif
  47. {
  48. base.OnUpdate(elapseSeconds, realElapseSeconds);
  49. CachedTransform.Translate(Vector3.back * m_AsteroidData.Speed * elapseSeconds, Space.World);
  50. CachedTransform.Rotate(m_RotateSphere * m_AsteroidData.AngularSpeed * elapseSeconds, Space.Self);
  51. }
  52. protected override void OnDead(Entity attacker)
  53. {
  54. base.OnDead(attacker);
  55. GameEntry.Entity.ShowEffect(new EffectData(GameEntry.Entity.GenerateSerialId(), m_AsteroidData.DeadEffectId)
  56. {
  57. Position = CachedTransform.localPosition,
  58. });
  59. GameEntry.Sound.PlaySound(m_AsteroidData.DeadSoundId);
  60. }
  61. public override ImpactData GetImpactData()
  62. {
  63. return new ImpactData(m_AsteroidData.Camp, m_AsteroidData.HP, m_AsteroidData.Attack, 0);
  64. }
  65. }
  66. }