//------------------------------------------------------------ // Game Framework // Copyright © 2013-2021 Jiang Yin. All rights reserved. // Homepage: https://gameframework.cn/ // Feedback: mailto:ellan@gameframework.cn //------------------------------------------------------------ using UnityEngine; using UnityGameFramework.Runtime; namespace MetaClient { /// /// 小行星类。 /// public class Asteroid : TargetableObject { [SerializeField] private AsteroidData m_AsteroidData = null; private Vector3 m_RotateSphere = Vector3.zero; #if UNITY_2017_3_OR_NEWER protected override void OnInit(object userData) #else protected internal override void OnInit(object userData) #endif { base.OnInit(userData); } #if UNITY_2017_3_OR_NEWER protected override void OnShow(object userData) #else protected internal override void OnShow(object userData) #endif { base.OnShow(userData); m_AsteroidData = userData as AsteroidData; if (m_AsteroidData == null) { Log.Error("Asteroid data is invalid."); return; } m_RotateSphere = Random.insideUnitSphere; } #if UNITY_2017_3_OR_NEWER protected override void OnUpdate(float elapseSeconds, float realElapseSeconds) #else protected internal override void OnUpdate(float elapseSeconds, float realElapseSeconds) #endif { base.OnUpdate(elapseSeconds, realElapseSeconds); CachedTransform.Translate(Vector3.back * m_AsteroidData.Speed * elapseSeconds, Space.World); CachedTransform.Rotate(m_RotateSphere * m_AsteroidData.AngularSpeed * elapseSeconds, Space.Self); } protected override void OnDead(Entity attacker) { base.OnDead(attacker); GameEntry.Entity.ShowEffect(new EffectData(GameEntry.Entity.GenerateSerialId(), m_AsteroidData.DeadEffectId) { Position = CachedTransform.localPosition, }); GameEntry.Sound.PlaySound(m_AsteroidData.DeadSoundId); } public override ImpactData GetImpactData() { return new ImpactData(m_AsteroidData.Camp, m_AsteroidData.HP, m_AsteroidData.Attack, 0); } } }