public void playDamageSoundAndEffect(int attackerUniqueId, bool useHitEffect = true, string soundId = null, string effectId = HIT_STRIKE_EFFECT, bool useCharacterSizeEffect = true, bool useCustomPos = false, float posX = 0.0f, float posY = 0.0f, float posZ = 0.0f, bool useRoration = false)
    {
                #if UNITY_EDITOR
        if (BattleSimulator.nowSimulation && BattleSimulator.instance.skipTime > 0)
        {
            return;
        }
                #endif
        if (GameManager.me.recordMode == GameManager.RecordMode.continueGame)
        {
            return;
        }

        if (useCustomPos)
        {
            _v.x = posX;
            _v.y = posY;
            _v.z = posZ;
        }
        else
        {
            _v    = cTransformPosition;
            _v.y += hitObject.height * 0.5f;
            _v.z -= 5.0f;            //hitObject.distance * 0.5f;
        }

        if (soundId != null)
        {
            SoundData.play(soundId);
        }
        //GameManager.soundManager.playEffect("critical");

        if (isPlayer)
        {
            SoundData.playDamageSound(monsterData.resource, playerData.characterId);
        }

        if (useHitEffect)
        {
            if (string.IsNullOrEmpty(effectId) == false)
            {
                if (_useEffectRecords.ContainsKey(effectId) == false)
                {
                    _useEffectRecords.Add(effectId, Time.realtimeSinceStartup);
                }
                else
                {
                    if (_useEffectRecords[effectId] + 0.3f > Time.realtimeSinceStartup)
                    {
                        return;
                    }

                    _useEffectRecords[effectId] = Time.realtimeSinceStartup;
                }

                if (useCharacterSizeEffect)
                {
                    if (useRoration)
                    {
                        GameManager.info.effectData[effectId].getParticleEffectByCharacterSize(attackerUniqueId, this).tf.localRotation = tf.localRotation;
                    }
                    else
                    {
                        GameManager.info.effectData[effectId].getParticleEffectByCharacterSize(attackerUniqueId, this);
                    }
                }
                else
                {
                    if (useRoration)
                    {
                        GameManager.info.effectData[effectId].getEffect(attackerUniqueId, _v, null, null).transform.localRotation = tf.localRotation;
                    }
                    else
                    {
                        GameManager.info.effectData[effectId].getEffect(attackerUniqueId, _v, null, null);
                    }
                }
            }
        }
    }