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]); } }
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; } }
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); } } }