[RESOLVIDO] Bug no tittle screen
2 participantes
SchultzGames :: UNITY 3D :: Resolvidos
Página 1 de 1
[RESOLVIDO] Bug no tittle screen
estou dento um bug envolvendo a tittle screen do meu jogo
uso a tecla espaço para poder começar o jogo porém se eu clicar múltiplas vezes a tecla começa a spammar o jogador e os inimigos na tela
por conta disso tive que mudar a tecla que dava ação do ataque e acaba ficando desconfortavel
alguém sabe como resolver????
segue os scripts do (1)jogador, (2) spawnmanager e (3) UIManager:
(1)
(2)
(3)
uso a tecla espaço para poder começar o jogo porém se eu clicar múltiplas vezes a tecla começa a spammar o jogador e os inimigos na tela
por conta disso tive que mudar a tecla que dava ação do ataque e acaba ficando desconfortavel
alguém sabe como resolver????
segue os scripts do (1)jogador, (2) spawnmanager e (3) UIManager:
(1)
- Código:
public class Jogador : MonoBehaviour
{
public bool _canTripleShot = false;
public bool _canSpeedBoost = false;
public bool _shieldsActive = false;
public int lives = 3;
[SerializeField]
private GameObject _laserPrefab;
[SerializeField]
private GameObject _ShieldGameObject;
[SerializeField]
private GameObject _MorreuPorraPrefab;
[SerializeField]
private GameObject[] _engines;
[SerializeField]
private float _fireRate = 0.25f;
[SerializeField]
private float _canFire = 0.0f;
[SerializeField]
public float _speed = 5.0f;
private UI_Manager _uiManager;
private GameManager _gameManager;
private Spanw_Maneger _spanwManager;
[SerializeField]
private AudioClip _clip;
private AudioSource _audioSource;
private int hitCount = 0;
private void Start()
{
//current pos = new position
transform.position = new Vector3(0, 0, 0);
_uiManager = GameObject.Find("Canvas").GetComponent<UI_Manager>();
if (_uiManager != null)
{
_uiManager.UpdateLives(lives);
}
_gameManager = GameObject.Find("GameManager").GetComponent<GameManager>();
_spanwManager = GameObject.Find("Spanw_Manager").GetComponent<Spanw_Maneger>();
if (_spanwManager != null)
{
_spanwManager.StartSpawnRoutines();
}
_audioSource = GetComponent<AudioSource>();
hitCount = 0;
}
private void Update()
{
Movement();
//se o space for pressionado
//spawn um laser na posição do player
if (Input.GetMouseButton(0))
{
Shoot();
}
}
private void Shoot()
{
if (Time.time > _canFire)
{
_audioSource.Play();
if (_canTripleShot == true)
{
//esquerda
Instantiate(_laserPrefab, transform.position + new Vector3(-0.7f, -0.12f, 0), Quaternion.identity);
//centro
Instantiate(_laserPrefab, transform.position + new Vector3(0, 1.2f, 0), Quaternion.identity);
//direita
Instantiate(_laserPrefab, transform.position + new Vector3(0.7f, 0.12f, 0), Quaternion.identity);
}
else
{
Instantiate(_laserPrefab, transform.position + new Vector3(0, 1.2f,0), Quaternion.identity);
}
_canFire = Time.time + _fireRate;
}
}
private void Movement()
{
float horizontalInput = Input.GetAxis("Horizontal");
float verticalInput = Input.GetAxis("Vertical");
//se o speed boost tiver ativado
//mover 1.5x a velocidade normal
//else
//mover velociade normal
if (_canSpeedBoost == true)
{
transform.Translate(Vector3.right * _speed * 1.9f * horizontalInput * Time.deltaTime);
transform.Translate(Vector3.up * _speed * 1.9f * verticalInput * Time.deltaTime);
}
else
{
transform.Translate(Vector3.right * _speed * horizontalInput * Time.deltaTime);
transform.Translate(Vector3.up * _speed * verticalInput * Time.deltaTime);
}
if (transform.position.y > 0)
{
transform.position = new Vector3(transform.position.x, 0, 0);
}
else if (transform.position.y < -4.2f)
{
transform.position = new Vector3(transform.position.x, -4.2f, 0);
}
if (transform.position.x > 9.4f)
{
transform.position = new Vector3(-9.4f, 0, 0);
}
else if (transform.position.x < -9.4f)
{
transform.position = new Vector3(9.4f, 0, 0);
}
}
public void Damage()
{
//se o jogador estiver com shield
//não fazer nada
hitCount++;
if (_shieldsActive == true)
{
_shieldsActive = false;
_ShieldGameObject.SetActive(false);
return;
}
if (hitCount == 1)
{
//turn left engine_failura on
_engines[0].SetActive(true);
}
else if (hitCount == 2)
{
//tunr righ engine_failure on
_engines[1].SetActive(true);
}
lives--;
_uiManager.UpdateLives(lives);
if (lives <= 0)
{
Instantiate(_MorreuPorraPrefab, transform.position, Quaternion.identity);
_gameManager.GameOver = true;
_uiManager.ShowTitleScreen();
AudioSource.PlayClipAtPoint(_clip, Camera.main.transform.position, 1f);
Destroy(this.gameObject);
}
}
public void TripleShotPowerupon()
{
_canTripleShot = true;
StartCoroutine(TripleShotPowerDownRoutine());
}
public void SpeedBosstPorwerupon()
{
_canSpeedBoost = true;
StartCoroutine(SpeedBoostDownRoutine());
}
public void EnableShields()
{
_shieldsActive = true;
_ShieldGameObject.SetActive(true);
}
//coroutine mothod (inemerator) para remover o impulso de velocidade
public IEnumerator TripleShotPowerDownRoutine()
{
yield return new WaitForSeconds(10.0f);
_canTripleShot = false;
}
public IEnumerator SpeedBoostDownRoutine()
{
yield return new WaitForSeconds(10.0f);
_canSpeedBoost = false;
}
}
(2)
- Código:
public class Spanw_Maneger : MonoBehaviour
{
[SerializeField]
private GameObject NaveInimigaPrefab;
[SerializeField]
private GameObject[] powerups;
private GameManager _gameManager;
void Start ()
{
_gameManager = GameObject.Find("GameManager").GetComponent<GameManager>();
StartCoroutine(SpawnEnemyRoutine());
StartCoroutine(SpwanPowerUPRoutine());
}
public void StartSpawnRoutines()
{
StartCoroutine(SpawnEnemyRoutine());
StartCoroutine(SpwanPowerUPRoutine());
}
//criar uma coroutine para spanwnar o inimigo a cada 5 segundos
IEnumerator SpawnEnemyRoutine()
{
while(_gameManager.GameOver == false)
{
Instantiate(NaveInimigaPrefab, new Vector3(Random.Range(-6f, 6f), 6, 0), Quaternion.identity);
yield return new WaitForSeconds(5.0f);
}
}
IEnumerator SpwanPowerUPRoutine()
{
while(_gameManager.GameOver == false)
{
int randomPowerup = Random.Range(0, 3);
Instantiate(powerups[randomPowerup], new Vector3(Random.Range(-6f, 6f), 6, 0), Quaternion.identity);
yield return new WaitForSeconds(5.0f);
}
}
}
(3)
- Código:
public class UI_Manager : MonoBehaviour
{
public Sprite[] lives;
public Image livesImageDisplay;
public GameObject titleScreen;
public GameObject avisoScreen;
public Text scoreText;
public int score;
public void UpdateLives(int currentLives)
{
UnityEngine.Debug.Log ("Player lives: " + currentLives);
livesImageDisplay.sprite = lives[currentLives];
}
public void UpdateScore()
{
score += 10;
scoreText.text = "Score: " + score;
}
public void ShowTitleScreen()
{
titleScreen.SetActive(true);
avisoScreen.SetActive(true);
}
public void HideTitleScreen()
{
titleScreen.SetActive(false);
avisoScreen.SetActive(false);
scoreText.text = "Score: ";
}
}
brunera- Iniciante
- PONTOS : 1238
REPUTAÇÃO : 1
Respeito as regras :
Re: [RESOLVIDO] Bug no tittle screen
ops esqueci de postar o script do game manager
aqui esta ele
aqui esta ele
- Código:
public class GameManager : MonoBehaviour
{
public bool GameOver = true;
public GameObject jogador;
private UI_Manager _uiManager;
private void Start()
{
_uiManager = GameObject.Find("Canvas").GetComponent<UI_Manager>();
}
//se o gameover for verdadeiro
//se espaço for pressionado
//gerar o jogador
//gameover é falso
//esconder a tela de titulo
void Update()
{
if(Input.GetKeyDown(KeyCode.Space))
{
Instantiate(jogador, Vector3.zero, Quaternion.identity);
GameOver = false;
_uiManager.HideTitleScreen();
}
}
}
brunera- Iniciante
- PONTOS : 1238
REPUTAÇÃO : 1
Respeito as regras :
Re: [RESOLVIDO] Bug no tittle screen
Achei estranho porque eu nao tinha achado onde voce apertava espaço kk. Mas enfim, acredito que é só voce cria uma bool e seu problema é resolvido.
- Código:
public class GameManager : MonoBehaviour
{
public bool GameOver = true;
private bool play = false;
public GameObject jogador;
private UI_Manager _uiManager;
private void Start()
{
_uiManager = GameObject.Find("Canvas").GetComponent<UI_Manager>();
}
//se o gameover for verdadeiro
//se espaço for pressionado
//gerar o jogador
//gameover é falso
//esconder a tela de titulo
void Update()
{
if(Input.GetKeyDown(KeyCode.Space) && !play)
{
Instantiate(jogador, Vector3.zero, Quaternion.identity);
GameOver = false;
_uiManager.HideTitleScreen();
play = true;
}
}
}
Pokedlg- ProgramadorMaster
- PONTOS : 2336
REPUTAÇÃO : 198
Áreas de atuação : Iniciante: ShaderLab, Blender, Java, C++, ASP.NET.
Intermediário: C#.NET, Unity, Shader Graph.
Respeito as regras :
Re: [RESOLVIDO] Bug no tittle screen
kkkk eu acordei hj sentindo que esqueci algo ai lembrei que tinha faltado esse scriptPokedlg escreveu:Achei estranho porque eu nao tinha achado onde voce apertava espaço kk. Mas enfim, acredito que é só voce cria uma bool e seu problema é resolvido.
- Código:
public class GameManager : MonoBehaviour
{
public bool GameOver = true;
private bool play = false;
public GameObject jogador;
private UI_Manager _uiManager;
private void Start()
{
_uiManager = GameObject.Find("Canvas").GetComponent<UI_Manager>();
}
//se o gameover for verdadeiro
//se espaço for pressionado
//gerar o jogador
//gameover é falso
//esconder a tela de titulo
void Update()
{
if(Input.GetKeyDown(KeyCode.Space) && !play)
{
Instantiate(jogador, Vector3.zero, Quaternion.identity);
GameOver = false;
_uiManager.HideTitleScreen();
play = true;
}
}
}
brunera- Iniciante
- PONTOS : 1238
REPUTAÇÃO : 1
Respeito as regras :
Tópicos semelhantes
» [Resolvido] - Rotacionar a camera com touch screen
» [RESOLVIDO] Alguem pode ajudar com o pos processamento screen space reflection
» [RESOLVIDO] Tela (Screen) Android e Joystick adaptável à tela !
» Fading Screen Unity 4.6
» [RESOLVIDO] De me uma luz
» [RESOLVIDO] Alguem pode ajudar com o pos processamento screen space reflection
» [RESOLVIDO] Tela (Screen) Android e Joystick adaptável à tela !
» Fading Screen Unity 4.6
» [RESOLVIDO] De me uma luz
SchultzGames :: UNITY 3D :: Resolvidos
Página 1 de 1
Permissões neste sub-fórum
Não podes responder a tópicos