Пример #1
0
        public void StartAttack()
        {
            if (attackAudio != null)
            {
                attackAudio.RandomPlay();
            }

            isInAttack        = true;
            previousAttackPos = new Vector3[attackPointArray.Length];
            hasAttackedSet.Clear();

            for (int i = 0; i < previousAttackPos.Length; i++)
            {
                previousAttackPos[i] = GetAttackPointWorldPos(attackPointArray[i]);
            }
        }
Пример #2
0
        private void PlayAudio()
        {
            float footCurve = animator.GetFloat(hashFootFall);

            if (footCurve > 0.01f && !stepAudio.isPlaying && stepAudio.canPlay)
            {
                stepAudio.isPlaying = true;
                stepAudio.canPlay   = false;
                stepAudio.RandomPlay(currentWalkingSurface);
            }
            else if (stepAudio.isPlaying)
            {
                stepAudio.isPlaying = false;
            }
            else if (footCurve < 0.01f && !stepAudio.canPlay)
            {
                stepAudio.canPlay = true;
            }
        }
Пример #3
0
        private void CheckDamage(Collider col, Vector3 attackDir, Vector3 worldPos)
        {
            if (hasAttackedSet.Contains(col.gameObject))
            {
                return;
            }

            Damageable damageable = col.GetComponent <Damageable>();

            if (damageable == null)
            {
                return;
            }

            if (damageable.gameObject == mastar)
            {
                return;
            }

//            if ((targetLayers.value & (1 << col.gameObject.layer)) == 0)
//                return;

            if (hitAudio != null)
            {
                Renderer otherRenderer = col.GetComponent <Renderer>();
                if (!otherRenderer)
                {
                    otherRenderer = col.GetComponentInChildren <Renderer>();
                }
                if (otherRenderer)
                {
                    hitAudio.RandomPlay(otherRenderer.sharedMaterial);
                }
                else
                {
                    hitAudio.RandomPlay();
                }
            }

            DamageData data = new DamageData();
            int        k    = 1;

            if (Random.Range(0, 100) < doubleDamageRate)
            {
                k = 2;
            }

            data.damage    = Random.Range(-2, 3) + k * damage;
            data.attacker  = mastar;
            data.direction = attackDir;
            data.damagePos = col.ClosestPointOnBounds(worldPos);


            damageable.TryGetDamage(data);
            hasAttackedSet.Add(col.gameObject);

            if (effectPrefab != null && effectPrefab.Length > 0)
            {
                if (k > 1 && effectPrefab.Length > 1)
                {
                    FightingParticleManager.Instance.ShowEffect(effectPrefab[1], data.damagePos);
                }
                else
                {
                    FightingParticleManager.Instance.ShowEffect(effectPrefab[0], data.damagePos);
                }
            }
        }