示例#1
0
        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);
        }
示例#2
0
    // 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);
        }
    }