Pontuação e Click
3 participantes
Página 1 de 1
Pontuação e Click
- Código:
using UnityEngine;
using System.Collections;
using UnityEngine.UI;
public class Point : MonoBehaviour
{
public Slider barraPonto;
public float vidaMaxima = 100.0f;
//Dano = ponto
void Start()
{
barraPonto.minValue = 0;
barraPonto.maxValue = vidaMaxima;
barraPonto.value = 0;
}
void Update ()
{
ControleDeVida();
}
private void ControleDeVida()
{
if (barraPonto.value >= vidaMaxima)
{
barraPonto.value = vidaMaxima;
}
if (barraPonto.value <= barraPonto.minValue)
{
barraPonto.value = barraPonto.minValue;
}
}
public void Dano (float dano)
{
barraPonto.value += dano;
if (barraPonto.value >= barraPonto.maxValue)
{
Debug.Log("você ganhou");
}
}
}
- Código:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
public class DanoInimigo : MonoBehaviour
{ //Dano = ponto
public float dano = 25.0f;
void OnTriggerEnter (Collider other)
{
Point player = other.GetComponent<Point>();
if (player != null)
{
player.Dano(dano);
}
}
}
Eu fiz um sistema de pontuação semelhante à barra de vida conforme pedi ajuda aqui. Mas em vez de colisão eu queria que a pontuação fosse feita quando eu clicasse no item com o mouse. (só pra acrescentar: o mouse muda a direção do jogo por ser fps).
Maria Elisa- Iniciante
- PONTOS : 1416
REPUTAÇÃO : 2
Idade : 22
Respeito as regras :
Re: Pontuação e Click
existe o OnMouseEnter(){} por exemplo:
mas aí teria que colocar uma distancia para quando pode apertar e quando não pode apertar...
- Código:
bool mouseDentroDoColisor;
void OnMouseEnter()
{
mouseDentroDoColisor = true;
}
void OnMouseExit()
{
mouseDentroDoColisor = false;
}
void Update()
{
if(mouseDentroDoColisor == true && Input.GetMouseButtonDown(0))
{
//aqui a função
}
}
mas aí teria que colocar uma distancia para quando pode apertar e quando não pode apertar...
Re: Pontuação e Click
@SauloeArthur, fazendo dessa forma você fica limitado a colisores comuns, não funciona com triggers sem mexer com uns parâmetros do Physics.
A maneira mais comum de detectar o click é disparar um raycast na posição do mouse, e checar se o objeto clicado é válido usando tag ou pegando um componente específico.
Digamos que o inimigo tenha um script chamado IAInimigo, você dispara o raycast e checa assim:
IAInimigo inimigo = hit.collider.GetComponent<IAInimigo>();
se inimigo não for nulo, você clicou em um inimigo e de quebra já preencheu a referência, a vantagem aqui é que na Build isso não gera lixo pro GC.
@Maria Elisa Chamar ControleDeVida todo frame na Update é overkill, você pode chamá-la apenas quando é feita alteração no valor em Dano();
Você pode simplificar as coisas usando uma variável específica pra armazenar a quantidade de vida, usar o "barraPonto.value" não me parece a melhor opção, imagina ter que pegar referencia em outro script e ter que ficar lembrando que não é um float comum, mas o valor de um componente da UI;
A maneira mais comum de detectar o click é disparar um raycast na posição do mouse, e checar se o objeto clicado é válido usando tag ou pegando um componente específico.
Digamos que o inimigo tenha um script chamado IAInimigo, você dispara o raycast e checa assim:
IAInimigo inimigo = hit.collider.GetComponent<IAInimigo>();
se inimigo não for nulo, você clicou em um inimigo e de quebra já preencheu a referência, a vantagem aqui é que na Build isso não gera lixo pro GC.
@Maria Elisa Chamar ControleDeVida todo frame na Update é overkill, você pode chamá-la apenas quando é feita alteração no valor em Dano();
Você pode simplificar as coisas usando uma variável específica pra armazenar a quantidade de vida, usar o "barraPonto.value" não me parece a melhor opção, imagina ter que pegar referencia em outro script e ter que ficar lembrando que não é um float comum, mas o valor de um componente da UI;
- Código:
using UnityEngine;
public class PontuacaoClick : MonoBehaviour
{
public Camera cam;
public Point point;
public float distanciaMaxRay = 5f;
void Update()
{
if (Input.GetMouseButtonDown(0))
{
Ray ray = cam.ViewportPointToRay(Input.mousePosition);
RaycastHit hit;
if (Physics.Raycast(ray, out hit, distanciaMaxRay))
{
if (hit.collider.CompareTag("Inimigo"))
{
point.Dano(25f);
}
}
}
}
}
Fagner- Moderador
- PONTOS : 4442
REPUTAÇÃO : 667
Áreas de atuação : Modelagem 3D, Programação.
Respeito as regras :
Tópicos semelhantes
» click mouse
» Pontuação em barra
» Mostrar Pontuação no game over
» Mostrar Pontuação No Game Over
» Click na tela Mobile/PC
» Pontuação em barra
» Mostrar Pontuação no game over
» Mostrar Pontuação No Game Over
» Click na tela Mobile/PC
Página 1 de 1
Permissões neste sub-fórum
Não podes responder a tópicos