[gamedev] Пауза между выстрелами. Как реализовать?
Здравствуйте друзья! Я начинающий игродел и в процессе изучения столкнулся с вопросом на который не могу найти ответ, точнее ответы нахожу но не могу понять как можно их реализовать в моем случае.
Вопрос следующий:
Как сделать так чтобы выстрел происходил с определенной периодичностью?
Как вы можете видеть в коде ниже игрок начинает стрелять когда начинает движение по оси Z но дело в том что выстрелы происходят беспрерывно. Пробовал реализовать паузу между выстрелами с помощью Invoke но из-за недостатка опыта вероятно просто не правильно это сделал.
Подскажите пожалуйста что мне нужно изменить в коде чтобы выстрелы происходили с определенной периодичностью? Заранее спасибо)
using System.Collections; using System.Collections.Generic; using UnityEngine; public class Ctrl : MonoBehaviour { private Animator anim; public Rigidbody rb; public GameManager gm; public float runSpeed = 500f; public float strafeSpeed = 500f; public float jumpForce = 50f; public float invoke_delay = 5000f; protected bool strafeRun = false; protected bool strafeLeft = false; protected bool strafeRight = false; protected bool doJump = false; public GameObject Pula; public GameObject Dulo; private void Start() { anim = GetComponent<Animator>(); } void OnCollisionEnter(Collision collision) { if (collision.collider.tag == „Enemy”) { gm.EndGame(); Debug.Log("Game Over"); } } void Fier() { if (transform.position.z > 0f) { Vector3 SpawnPoint = Dulo.transform.position; Quaternion SpawnRoot = Dulo.transform.rotation; GameObject Pula_For_Fire = Instantiate(Pula, SpawnPoint, SpawnRoot) as GameObject; Rigidbody Run = Pula_For_Fire.GetComponent<Rigidbody>(); Run.AddForce(Pula_For_Fire.transform.forward * 1000, ForceMode.Impulse); Destroy(Pula_For_Fire, 5); } } void Update() { if (transform.position.z > 0f) { anim.SetBool("Shoot", true); } //анимация бега if (transform.position.z > 0f) { anim.SetBool("Runing", true); } if(Input.GetKey("a")) { strafeLeft = true; } else { strafeLeft = false; } if (Input.GetKey("d")) { strafeRight = true; } else { strafeRight = false; } if (Input.GetKey("space")) { doJump = true; } if (transform.position.y < −5f) { gm.EndGame(); Debug.Log("Game Over"); } } void FixedUpdate() { Fier(); //беспрерывный бег rb.MovePosition(transform.position + Vector3.forward * runSpeed * Time.deltaTime); if (strafeLeft) { rb.MovePosition(transform.position + Vector3.left * runSpeed * Time.deltaTime); } if (strafeRight) { rb.MovePosition(transform.position + Vector3.right * runSpeed * Time.deltaTime); } if (doJump) { rb.AddForce(Vector3.up * jumpForce, ForceMode.Impulse); doJump = false; } } }
2 коментарі
Додати коментар Підписатись на коментаріВідписатись від коментарів