**Hello Everyone! I’m making a 2 D plat former. When my player dies(falls below the ground the Lives decreases as 3,2,1,-1 & it should be 3,2,1,0. I am in this problem since the last month.
I’m posting the codes below the Player controller and level manager script.
PLEASE PLEASE HELP ME! **
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class PlayerController : MonoBehaviour {
public float moveSpeed;
public Rigidbody2D myRigidbody;
public float jumpSpeed;
public Transform groundCheck;
public float groundCheckRadius;
public LayerMask whatIsGround;
public bool isGrounded;
private Animator myAnim;
private Vector3 initScale;
public Vector3 respawnPosition;
public LevelManager theLevelManager;
public GameObject stompBox;
public float knockbackForce;
public float knockbackLength;
public float knockbackCounter;
public float invincibilityLength;
private float invincibilityCounter;
// Use this for initialization
void Start ()
{
myRigidbody = GetComponent<Rigidbody2D> ();
myAnim = GetComponent<Animator> ();
initScale = transform.localScale;
respawnPosition = transform.position;
theLevelManager = FindObjectOfType<LevelManager>();
}
// Update is called once per frame
void Update () {
isGrounded = Physics2D.OverlapCircle (groundCheck.position, groundCheckRadius, whatIsGround);
if (knockbackCounter <= 0)
{
if (Input.GetAxisRaw ("Horizontal") > 0f)
{
myRigidbody.velocity = new Vector3 (moveSpeed, myRigidbody.velocity.y, 0f);
transform.localScale = new Vector3 (1f, 1f, 1f);
transform.localScale = new Vector3 (initScale.x, initScale.y, initScale.z);
} else if (Input.GetAxisRaw ("Horizontal") < 0f) {
myRigidbody.velocity = new Vector3 (-moveSpeed, myRigidbody.velocity.y, 0f);
transform.localScale = new Vector3 (-1f, 1f, 1f);
transform.localScale = new Vector3 (-initScale.x, initScale.y, initScale.z);
} else {
myRigidbody.velocity = new Vector3 (0f, myRigidbody.velocity.y, 0f);
}
if (Input.GetButtonDown ("Jump") && isGrounded)
{
myRigidbody.velocity = new Vector3 (myRigidbody.velocity.x, jumpSpeed, 0f);
}
}
if (knockbackCounter > 0)
{
knockbackCounter -= Time.deltaTime;
if (transform.localScale.x > 0)
{
myRigidbody.velocity = new Vector3 (-knockbackForce, knockbackForce, 0f);
} else {
myRigidbody.velocity = new Vector3 (knockbackForce, knockbackForce, 0f);
}
}
if (invincibilityCounter > 0)
{
invincibilityCounter -= Time.deltaTime;
}
if (invincibilityCounter <= 0)
{
theLevelManager.invincible = false;
}
myAnim.SetFloat ("Speed", Mathf.Abs (myRigidbody.velocity.x));
myAnim.SetBool ("Grounded", isGrounded);
if (myRigidbody.velocity.y < 0)
{
stompBox.SetActive(true);
}else {
stompBox.SetActive (false);
}
}
public void Knockback()
{
knockbackCounter = knockbackLength;
invincibilityCounter = invincibilityLength;
theLevelManager.invincible = true;
}
void OnTriggerEnter2D(Collider2D other)
{
if (other.tag == "KillPlane")
{
//gameObject.SetActive (false);
//transform.position = respawnPosition;
theLevelManager.Respawn ();
//theLevelManager.healthCount = 0;
}
if (other.tag == "Checkpoint")
{
respawnPosition = other.transform.position;
}
}
void OnCollisionEnter2D(Collision2D other)
{
if (other.gameObject.tag == "MovingPlatform")
{
transform.parent = other.transform;
}
}
void OnCollisionExit2D(Collision2D other)
{
if (other.gameObject.tag == "MovingPlatform")
{
transform.parent = null;
}
}
}
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
public class LevelManager : MonoBehaviour {
public float waitToRespawn;
public PlayerController thePlayer;
public GameObject deathSplosion;
public int coinCount;
public Text coinText;
public Image heart1;
public Image heart2;
public Image heart3;
public Sprite heartFull;
public Sprite heartHalf;
public Sprite heartEmpty;
public int maxHealth;
public int healthCount;
private bool respawning;
public ResetOnRespawn[] objectsToReset;
public bool invincible;
public Text livesText;
public int startingLives;
public int currentLives;
// Use this for initialization
void Start () {
thePlayer = FindObjectOfType<PlayerController> ();
coinText.text = "Coins: " + coinCount;
healthCount = maxHealth;
objectsToReset = FindObjectsOfType<ResetOnRespawn>();
currentLives = startingLives;
livesText.text = "Lives x " + currentLives;
}
// Update is called once per frame
void Update () {
if (healthCount <= 0 )
{
Respawn ();
respawning = true;
}
}
public void Respawn()
{
if (!respawning) {
currentLives -= 1;
livesText.text = "Lives x " + currentLives;
if (currentLives > 0) {
respawning = true;
StartCoroutine ("RespawnCo");
} else {
thePlayer.gameObject.SetActive (false);
}
}
}
public IEnumerator RespawnCo()
{
thePlayer.gameObject.SetActive (false);
Instantiate (deathSplosion, thePlayer.transform.position, thePlayer.transform.rotation);
yield return new WaitForSeconds (waitToRespawn);
healthCount = maxHealth;
respawning = false;
UpdateHeartMeter ();
coinCount = 0;
coinText.text = "Coins: " + coinCount;
thePlayer.transform.position = thePlayer.respawnPosition;
thePlayer.gameObject.SetActive (true);
for (int i = 0; i < objectsToReset.Length; i++)
{
objectsToReset *.gameObject.SetActive (true);*
_ objectsToReset .ResetObject ();_
* }*
* }*
* public void AddCoins(int coinsToAdd)*
* {*
* coinCount += coinsToAdd;*
* coinText.text = "Coins: " + coinCount;*
* }*
* public void HurtPlayer(int damageToTake)*
* {*
* if (!invincible)*
* { *
* healthCount -= damageToTake;*
* UpdateHeartMeter ();*
* thePlayer.Knockback ();*
* }*
* }*
* public void UpdateHeartMeter()*
* {*
* switch (healthCount)*
* {*
* case 6:*
* heart1.sprite = heartFull;*
* heart2.sprite = heartFull;*
* heart3.sprite = heartFull;*
* return;*
* case 5:*
* heart1.sprite = heartFull;*
* heart2.sprite = heartFull;*
* heart3.sprite = heartHalf;*
* return;*
* case 4:*
* heart1.sprite = heartFull;*
* heart2.sprite = heartFull;*
* heart3.sprite = heartEmpty;*
* return;*
* case 3:*
* heart1.sprite = heartFull;*
* heart2.sprite = heartHalf;*
* heart3.sprite = heartEmpty;*
* return;*
* case 2:*
* heart1.sprite = heartFull;*
* heart2.sprite = heartEmpty;*
* heart3.sprite = heartEmpty;*
* return;*
* case 1:*
* heart1.sprite = heartHalf;*
* heart2.sprite = heartEmpty;*
* heart3.sprite = heartEmpty;*
* return;*
* case 0:*
* heart1.sprite = heartEmpty;*
* heart2.sprite = heartEmpty;*
* heart3.sprite = heartEmpty;*
* return;*
* default:*
* heart1.sprite = heartEmpty;*
* heart2.sprite = heartEmpty;*
* heart3.sprite = heartEmpty;*
* return;*
* }*
* }*
}