using UnityEngine; using System.Collections; //load textmeshpro using TMPro; // This script moves the character controller forward // and sideways based on the arrow keys. // It also jumps when pressing space. // Make sure to attach a character controller to the same game object. // It is recommended that you make only one call to Move or SimpleMove per frame. public class Character_ctrl : MonoBehaviour { CharacterController characterController; Camera camera_obj; //win sound public HuDcko hudcko; public AudioClip win_sound; public AudioClip die_sound; public AudioClip walk_sound; public AudioClip jump_sound; public AudioClip teleport_sound; public GameObject spawnpoint; public float speed = 6.0f; //textmeshpro public TextMeshProUGUI textmeshpro; public TextMeshProUGUI hudko; public float jumpSpeed = 8.0f; public float gravity = 20.0f; public float turnSpeed = 1.0f; public bombspawner bs; public Pukvbrane pukvbrane; private float timeks = 0; private bool passed = false; Vector2 camerarot = new Vector2(0, 0); private Vector3 moveDirection = Vector3.zero; private Vector3 moveKeyb = Vector3.zero; private bool ontop = false; void Start() { characterController = GetComponent(); camera_obj = GetComponentInChildren(); Cursor.lockState = CursorLockMode.Locked; Cursor.visible = false; characterController.enabled = false; transform.position = spawnpoint.transform.position; transform.rotation = spawnpoint.transform.rotation; characterController.enabled = true; } void FixedUpdate() { if(timeks >= 0.2f){ timeks = 0; passed = true; } else{ timeks += Time.fixedDeltaTime; passed = false; } // We are grounded, so recalculate // move direction directly from axes //add mouse x and y to camera rotation camerarot.x += Input.GetAxis("Mouse X"); camerarot.y += -Input.GetAxis("Mouse Y"); //use turn speed to rotate camera camerarot.x *= turnSpeed; camerarot.y *= turnSpeed; //then modulo with 360 to keep it in range camerarot.x %= 360; camerarot.y %= 360; //then apply to camera //clip camerarot y to -90 to 90 if (camerarot.y > 90) { camerarot.y = 90; } if (camerarot.y < -90) { camerarot.y = -90; } camera_obj.transform.localRotation = Quaternion.Euler(camerarot.y, 0, 0); transform.localRotation = Quaternion.Euler(0, camerarot.x, 0); //then apply to character controller //moveDirection = camera.transform.TransformDirection(moveDirection); moveKeyb = new Vector3(Input.GetAxis("Horizontal"), 0.0f, Input.GetAxis("Vertical")); //if moving and walk sound is not playing, play it //add movekeyb to moveDirection while accounting for rotation of camera moveDirection = transform.TransformDirection(moveKeyb); //multiply moveDirection by speed moveDirection *= speed; if (Input.GetButtonDown("Jump")) { //if enabled textmeshpro disable if (textmeshpro.enabled) { textmeshpro.enabled = false; hudko.enabled = true; bs.StartBombs(); pukvbrane.StartCubes(); } } if (characterController.isGrounded) { if (moveKeyb != Vector3.zero && !GetComponent().isPlaying) { GetComponent().clip = walk_sound; GetComponent().volume = 0.1f; GetComponent().Play(); } if (Input.GetButtonDown("Jump")) { moveDirection.y = jumpSpeed; //set location of sound to be the same as the character and play sound AudioSource.PlayClipAtPoint(jump_sound, transform.position); } } if (Input.GetButton("Fire1")) { if(passed){ AudioSource.PlayClipAtPoint(teleport_sound, transform.position); if(ontop){ Debug.Log("moved to lower floor"); characterController.enabled = false; transform.position = new Vector3(transform.position.x, transform.position.y - 920, transform.position.z); characterController.enabled = true; ontop = false; } else{ characterController.enabled = false; transform.position = new Vector3(transform.position.x, transform.position.y + 920, transform.position.z); characterController.enabled = true; ontop = true; Debug.Log("moved to upper floor"); } AudioSource.PlayClipAtPoint(teleport_sound, transform.position); } } if(transform.position.y <= -500){ AudioSource.PlayClipAtPoint(die_sound, transform.position); characterController.enabled = false; transform.position = spawnpoint.transform.position; transform.rotation = spawnpoint.transform.rotation; characterController.enabled = true; AudioSource.PlayClipAtPoint(die_sound, transform.position); } // Apply gravity. Gravity is multiplied by deltaTime twice (once here, and once below // when the moveDirection is multiplied by deltaTime). This is because gravity should be applied // as an acceleration (ms^-2) moveDirection.y -= gravity * Time.fixedDeltaTime; // Move the controller characterController.Move(moveDirection * Time.fixedDeltaTime); hudcko.ontop = ontop; } }