private void PlayFootStepAudio() { if (!m_CharacterController.isGrounded) { return; } // pick & play a random footstep sound from the array, // excluding sound at index 0 int n = Random.Range(1, m_FootstepSounds.Length); m_AudioSource.clip = m_FootstepSounds[n]; m_AudioSource.PlayOneShot(m_AudioSource.clip); // move picked sound to index 0 so it's not picked next time m_FootstepSounds[n] = m_FootstepSounds[0]; m_FootstepSounds[0] = m_AudioSource.clip; m_footprints.AddFootprint(transform.position, transform.forward, transform.right); m_dustEmitter.Emit(m_IsWalking ? m_EmittedDustParticlesByStep : m_EmittedDustParticlesByStep * 2); }
// Update is called once per frame void FixedUpdate() { if (GameManager.gameState == GameManager.GameState.Playing && health > 0) { if (!playerHiding) { if (!stunned && !attacking) { if (currentRoom && currentRoom.hasActiveInteracts && (!currentRoom.meshesEnabled || !currentRoom.litByFlashlight)) { transform.position = Vector3.MoveTowards(transform.position, new Vector3(currentRoom.interacts[Random.Range(0, currentRoom.interacts.Length)].transform.position.x, transform.position.y, currentRoom.interacts[Random.Range(0, currentRoom.interacts.Length)].transform.position.z), speed * Time.deltaTime); } else { transform.position = Vector3.MoveTowards(transform.position, new Vector3(player.transform.position.x, transform.position.y, player.transform.position.z), speed * Time.deltaTime); } } if (!attacking && Vector3.Distance(transform.position, player.transform.position) <= attackDist) { StartCoroutine(Attack(attackTime)); } } else { if (!stunned && !attacking) { transform.position = Vector3.MoveTowards(transform.position, new Vector3(targetRoomPos.x, transform.position.y, targetRoomPos.z), speed * Time.deltaTime); } } //Footprint logic float distFromLastFootprint = (lastPos - transform.position).sqrMagnitude; if (distFromLastFootprint > footprintSpacing * footprintSpacing) { footprints.AddFootprint(transform.position, transform.forward, transform.right, Random.Range(0, 4)); lastPos = transform.position; } if (footprints.transform.position.y != currentRoom.transform.position.y - WaypointManager.scale) { footprints.transform.position = new Vector3(0, currentRoom.transform.position.y - WaypointManager.scale, 0); } //Hiding logic if (Physics.Linecast(transform.position, player.transform.position, layerMask) && player.state == Player.State.Hide) //if there is something between the killer and the player { if (!playerHiding) { playerHiding = true; targetRoomPos = FindNewRoom(currentRoom); //should only be called once here } } else { playerHiding = false; } //Animating Logic float horizOff = Mathf.Abs(player.transform.position.x - transform.position.x); float vertOff = Mathf.Abs(player.transform.position.z - transform.position.z); if (vertOff < Mathf.Abs(XOff) && horizOff > Mathf.Abs(YOff)) { if (transform.position.x > player.transform.position.x) { direction = Direction.Left; } if (transform.position.x < player.transform.position.x) { direction = Direction.Right; } } else if (vertOff > Mathf.Abs(XOff) && horizOff < Mathf.Abs(YOff)) { if (transform.position.z < player.transform.position.z) { direction = Direction.Up; } if (transform.position.z > player.transform.position.z) { direction = Direction.Down; } } CheckRotation(direction, player.transform.rotation.eulerAngles); animator.SetTrigger(direction.ToString()); } if (health <= 0) { Debug.Log("Play death animation"); if (GameManager.step == 6) { Debug.Log("Drop Mask object"); maskPrefab = Instantiate(maskPrefab, transform.position, Quaternion.identity); } Destroy(this.gameObject); } }