- Home /
Question by
IutbaZion · Sep 28, 2015 at 06:39 AM ·
collisioncolliderprogrammingcollision detection
How can i get harmed and healed by diferent game objects
Hi, i recently watch a tutorial about health bars, and i successfully complete it, however i can only set two enemys (in this case "cars") one of the cars harm me when i crash with it (Game Object 2)and the other one heal me (Game Object 1).
What i want to do is put more than that two cars, but when i duplicate the car nothing happens when i crash it. heres a copy of the code, ignore the comments most of them are dead code that i didn't use. The code is in C#
using UnityEngine;
using System.Collections;
using UnityEngine.UI;
public class CarPlus : MonoBehaviour {
//variables
float Speed = 10f;
float rotation =50f;
public RectTransform htrans;
private float cachedY;
private float minXval;
private float maxXval;
public int currentHealth;
public int CurrentHealth {
get {return currentHealth;}
set {currentHealth = value;
handlehealth();
}
}
public int MaxHealth;
public Image Imageh;
public float cooldown;
public bool cd;
//aqui es para cambiar el texto, si es que se quiere agregar
public Text healthtext;
void Start () {
cachedY = htrans.position.y;
maxXval = htrans.position.x;
minXval = htrans.position.x - htrans.rect.width;
currentHealth = MaxHealth;
cd = false;
}
// Update is called once per frame
void Update () {
//estos floats hacen que el auto se mueva, como es un jueguillo caca no es muy realista xD
float trans = Input.GetAxis ("Vertical") * Speed;
float rot = Input.GetAxis ("Horizontal") * rotation;
//no recuerdo que hacen
trans *= Time.deltaTime;
rot *= Time.deltaTime;
//Estas lineas determinan en que eje se movera el auto
transform.Translate (trans, 0, 0);
transform.Rotate (0, rot, 0);
//transform.Rotate (0, rotd, 0);
}
private void handlehealth()
{
//healthtext.text = "Health: " + currentHealth;
float CurrentXval = MapValues (currentHealth, 0, MaxHealth, minXval, maxXval);
htrans.position = new Vector3 (CurrentXval, cachedY);
//if (currentHealth > MaxHealth / 2) {
//Imageh.color=new Color32((byte)MapValues(currentHealth, MaxHealth/2, MaxHealth,255,0),255,0,255);
//} else
//{
//Imageh.color=new Color32(255,(byte) MapValues(currentHealth,0,MaxHealth/2,0,255),0,255);
//}
}
IEnumerator cooldowndmg()
{
cd = true;
yield return new WaitForSeconds (cooldown);
cd = false;
}
void OnTriggerStay(Collider other)
{
if(other.name == "GameObject 1" )
{
if(!cd && currentHealth > 0)
StartCoroutine(cooldowndmg());
CurrentHealth -=1;
Debug.Log("Getting health");
}
if(other.name == "GameObject 2")
{
if(!cd && currentHealth < MaxHealth)
{
StartCoroutine(cooldowndmg());
CurrentHealth +=1;
Debug.Log("Getting harmed");
}
}
}
private float MapValues(float x, float inmin, float inmax, float outmin, float outmax)
{
return (x - inmin) * (outmax - outmin) / (inmax - inmin) + outmin;
}
}
Comment