thePlayerHealth.currentHealth = thePlayerHealth.HP; и HP = startHealth * currentCON; работают как бы с запозданием, то есть при переходе со 2 на 3 уровень HP так же переходит со 2 на 3 уровень, а вот currentHealth в этот момент с 1 на 2 уровень (а должно со 2 на 3 уровень как и HP)
Синтаксис:
Используется csharp
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
public class PlayerEXP : MonoBehaviour
{
public int[] lvlSTR;
public int[] lvlDEX;
public int[] lvlINT;
public int[] lvlCON;
public int currentLvlSTR;
public int currentLvlDEX;
public int currentLvlINT;
public int currentLvlCON;
private playerHealth thePlayerHealth;
public int currentLevel;
public int currentExp;
public int[] toLevelUp;
public Slider expSlider;
[SerializeField]
Text lvlText;
// Start is called before the first frame update
void Start()
{
thePlayerHealth = FindObjectOfType<playerHealth>();
currentLvlSTR = lvlSTR[1];
currentLvlDEX = lvlDEX[1];
currentLvlINT = lvlINT[1];
currentLvlCON = lvlCON[1];
}
// Update is called once per frame
void Update()
{
if (currentExp >= toLevelUp[currentLevel])
{
//currentLevel++;
LevelUp();
currentExp = 0;
lvlText.text = currentLevel.ToString();
}
}
public void AddExp(int expToAdd)
{
currentExp += expToAdd;
expSlider.value = currentExp;
}
public void LevelUp()
{
currentLevel++;
currentLvlSTR = lvlSTR[currentLevel];
currentLvlDEX = lvlDEX[currentLevel];
currentLvlINT = lvlINT[currentLevel];
currentLvlCON = lvlCON[currentLevel];
thePlayerHealth.currentHealth = thePlayerHealth.HP;
}
}
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
public class PlayerEXP : MonoBehaviour
{
public int[] lvlSTR;
public int[] lvlDEX;
public int[] lvlINT;
public int[] lvlCON;
public int currentLvlSTR;
public int currentLvlDEX;
public int currentLvlINT;
public int currentLvlCON;
private playerHealth thePlayerHealth;
public int currentLevel;
public int currentExp;
public int[] toLevelUp;
public Slider expSlider;
[SerializeField]
Text lvlText;
// Start is called before the first frame update
void Start()
{
thePlayerHealth = FindObjectOfType<playerHealth>();
currentLvlSTR = lvlSTR[1];
currentLvlDEX = lvlDEX[1];
currentLvlINT = lvlINT[1];
currentLvlCON = lvlCON[1];
}
// Update is called once per frame
void Update()
{
if (currentExp >= toLevelUp[currentLevel])
{
//currentLevel++;
LevelUp();
currentExp = 0;
lvlText.text = currentLevel.ToString();
}
}
public void AddExp(int expToAdd)
{
currentExp += expToAdd;
expSlider.value = currentExp;
}
public void LevelUp()
{
currentLevel++;
currentLvlSTR = lvlSTR[currentLevel];
currentLvlDEX = lvlDEX[currentLevel];
currentLvlINT = lvlINT[currentLevel];
currentLvlCON = lvlCON[currentLevel];
thePlayerHealth.currentHealth = thePlayerHealth.HP;
}
}
Синтаксис:
Используется csharp
using UnityEngine;
using System.Collections;
using System.Collections.Generic;
using UnityEngine.UI;
public class playerHealth : MonoBehaviour
{
public int currentSTR;
public int currentDEX;
public int currentINT;
public int currentCON;
private PlayerEXP thePlayerEXP;
public float startHealth;
public float HP;
public float currentHealth;
public GameObject deathFX;
[SerializeField]
Text hpText;
public float PArmor;
float PDamage;
playerController controlMovement;
public Slider healthSlider;
void Start()
{
startHealth = 100f;
currentHealth = startHealth;
thePlayerEXP = FindObjectOfType<PlayerEXP>();
controlMovement = GetComponent<playerController>();
}
void Update()
{
currentSTR = thePlayerEXP.currentLvlSTR;
currentDEX = thePlayerEXP.currentLvlDEX;
currentINT = thePlayerEXP.currentLvlINT;
currentCON = thePlayerEXP.currentLvlCON;
HP = startHealth * currentCON;
healthSlider.value = currentHealth;
hpText.text = currentHealth.ToString();
}
public void addDamage(float damage)
{
if (damage <= 0) return;
PDamage = damage;
currentHealth -= PDamage;
Debug.Log(transform.name + " получает " + PDamage + " ед. урона.");
if (currentHealth <= 0)
{
makeDead();
}
}
public void makeDead()
{
Instantiate(deathFX, transform.position, transform.rotation);
Destroy(gameObject);
}
}
using System.Collections;
using System.Collections.Generic;
using UnityEngine.UI;
public class playerHealth : MonoBehaviour
{
public int currentSTR;
public int currentDEX;
public int currentINT;
public int currentCON;
private PlayerEXP thePlayerEXP;
public float startHealth;
public float HP;
public float currentHealth;
public GameObject deathFX;
[SerializeField]
Text hpText;
public float PArmor;
float PDamage;
playerController controlMovement;
public Slider healthSlider;
void Start()
{
startHealth = 100f;
currentHealth = startHealth;
thePlayerEXP = FindObjectOfType<PlayerEXP>();
controlMovement = GetComponent<playerController>();
}
void Update()
{
currentSTR = thePlayerEXP.currentLvlSTR;
currentDEX = thePlayerEXP.currentLvlDEX;
currentINT = thePlayerEXP.currentLvlINT;
currentCON = thePlayerEXP.currentLvlCON;
HP = startHealth * currentCON;
healthSlider.value = currentHealth;
hpText.text = currentHealth.ToString();
}
public void addDamage(float damage)
{
if (damage <= 0) return;
PDamage = damage;
currentHealth -= PDamage;
Debug.Log(transform.name + " получает " + PDamage + " ед. урона.");
if (currentHealth <= 0)
{
makeDead();
}
}
public void makeDead()
{
Instantiate(deathFX, transform.position, transform.rotation);
Destroy(gameObject);
}
}