// 依照部件啟動傷害特效 public string ActiveDamageEffect( GameObject _Attacker , string _ComponentObjName ) { // Debug.Log( "ActiveDamageEffect() " + _ComponentObjName ) ; UnitData unitData = this.gameObject.GetComponent<UnitData>() ; // find correct effect object DamageEffect newDamage = null ; string [] strVec = ConstName.GetSplitVec( _ComponentObjName ) ; if( strVec.Length > 1 && strVec[1] != ConstName.UnitDataComponentUnitIntagraty ) { // it's a component , // active shield effect string ShieldComponentName = strVec[ 1 ] ; if( null != unitData && true == unitData.componentMap.ContainsKey( ShieldComponentName ) && true == unitData.m_ShieldDataSet.ContainsKey( ShieldComponentName ) ) { UnitComponentData componentData = unitData.componentMap[ ShieldComponentName ] ; ComponentDataSet shieldSet = unitData.m_ShieldDataSet[ ShieldComponentName ] ; if( false == componentData.IsOffline() ) { newDamage = new DamageEffect() ; newDamage.m_EffectObj.Setup( shieldSet.Effect3DObject ) ; newDamage.IsDestroyAtEnd = false ; newDamage.Start() ; ObjectShakeEffect shake = shieldSet.Effect3DObject.GetComponent<ObjectShakeEffect>() ; if( null != shake ) { shake.Active( true ) ; } } } } else { // it's unit // active sparks effect string sparksTemplateName = ConstName.EffectSparksTemplateName ; string effectObjName = ConstName.CreateEffectName( this.gameObject.name , sparksTemplateName , true ) ; GameObject effectObj = PrefabInstantiate.CreateByInit( sparksTemplateName , effectObjName , this.gameObject.transform.position , this.gameObject.transform.rotation ) ; // Debug.Log( "ActiveDamageEffect() effectObjName" + effectObjName ) ; if( null == effectObj ) { Debug.Log( "ActiveDamageEffect() null == effectObj=" + sparksTemplateName ) ; return "" ; } // parent effectObj.transform.parent = this.gameObject.transform ; newDamage = new DamageEffect() ; newDamage.m_EffectObj.Setup( effectObj ) ; newDamage.IsDestroyAtEnd = true ; newDamage.Start() ; } string retEffectName = "" ; if( null != newDamage ) { this.m_DamageEffects.Add( newDamage ) ; retEffectName = newDamage.EffectName() ; } // push effect // try add shift effect if( null != unitData ) { Vector3 ToAttacker = this.gameObject.transform.position - _Attacker.transform.position ; ToAttacker.y = 0 ;// do not move in y direction ToAttacker.Normalize() ; // Debug.Log( ToAttacker ) ; ShiftEffect shiftDamage = new ShiftEffect() ; shiftDamage.m_ShiftVec = ToAttacker ; shiftDamage.m_TargetObject = this.gameObject ; shiftDamage.StartByTime(1.0f) ; this.m_DamageEffects.Add( shiftDamage ) ; //*/ } return retEffectName ; }