- Home /
Help w/variables
Hi there. I am currently working on a 3d platformer/adventure game in Unity. I have implemented the three basic scripts, but I am having some trouble with having certain terrain "damage" the player.
What I mean to say is: There variable for the damage is assigned, but its value is never used. Here are the scripts I'm using:
using UnityEngine; using UnityEngine.UI; using System.Collections;
public class Healthbar : MonoBehaviour
{ public Image currentHealthbar; public Text ratioText;
private float hitpoint = 150;
private float maxHitpoint = 150;
private void Start()
{
UpdateHealthbar ();
}
private void UpdateHealthbar()
{
float ratio = hitpoint / maxHitpoint;
currentHealthbar.rectTransform.localScale = new Vector3 (ratio, 1, 1);
ratioText.text = (ratio * 100).ToString("0") + '%';
}
private void TakeDamage(float damage)
{
hitpoint -= damage;
if (hitpoint < 0)
{
hitpoint = 0;
Debug.Log ("Dead!");
}
UpdateHealthbar ();
}
private void HealDamage(float heal)
{
hitpoint += heal;
if (hitpoint > maxHitpoint)
hitpoint = maxHitpoint;
UpdateHealthbar ();
}
}
using System.Collections; using System.Collections.Generic; using UnityEngine;
public class Fighter : MonoBehaviour {
private CharacterController controller;
private Vector3 moveVector;
private float verticalVelocity;
public Collider[] attackHitboxes;
private void Start()
{
controller = GetComponent<CharacterController>();
}
private void Update()
{
if (Input.GetButtonDown ("A"))
LaunchAttack (attackHitboxes [0]);
if (Input.GetButtonDown ("Z"))
LaunchAttack (attackHitboxes [1]);
if(controller.isGrounded)
{
verticalVelocity = -1;
if(Input.GetButtonDown("Jump"))
verticalVelocity = 10;
}
else
{
verticalVelocity -= 14 * Time.deltaTime;
}
moveVector = Vector3.zero;
moveVector.x = Input.GetAxis("Horizontal") * 5;
moveVector.y = verticalVelocity;
controller.Move(moveVector * Time.deltaTime);
}
private void LaunchAttack (Collider col)
{
Collider[] cols = Physics.OverlapBox (col.bounds.center, col.bounds.extents, col.transform.rotation, LayerMask.GetMask ("Hitbox"));
foreach (Collider c in cols) {
if (c.transform.parent.parent == transform)
continue;
float damage = 0;
switch (c.name) {
case "Head":
damage = 30;
break;
case "Torso":
damage = 10;
break;
}
}
}
}
using UnityEngine; using System.Collections;
public class FloorTriggerZone : MonoBehaviour
{ public bool isDamaging; public float damage = 10;
private void OnTriggerStay(Collider col)
{
if(col.tag == "Player")
col.SendMessage((isDamaging)?"TakeDamage":"HealDamage",Time.deltaTime * damage);
}
}
Also if anyone is wondering where I got the scripting from: https://www.youtube.com/watch?v=mvVM1RB4HXk&t=1402s
Any help would be appreciated -- thank you!
Your answer
Follow this Question
Related Questions
Health Regen Stop After Damage 1 Answer
Health Code, Damage and Healing 0 Answers
Health below zero but shows negative numbers 1 Answer
Take health from enemy 3 Answers
Health Bar going 0 right away 1 Answer