Здравствуйте друзья! Я начинающий игродел и в процессе изучения столкнулся с вопросом на который не могу найти ответ, точнее ответы нахожу но не могу понять как можно их реализовать в моем случае.
Вопрос следующий:
Как сделать так чтобы выстрел происходил с определенной периодичностью?
Как вы можете видеть в коде ниже игрок начинает стрелять когда начинает движение по оси 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;
}
}
}
1 комментарий
Добавить комментарий