В Unity3D,Unity3D, возвращать значение из одного класса/метода в другой класс/метод в Unity3D
У меня есть сценарий оружия и сценарий выносливостью. Теперь я хочу, чтобы вытереть выносливость, когда мое оружие качается.
Я пробовал свой код, и я играл с ним в течение нескольких часов.
Я использую единство, поэтому он также дает мне комментарий об использовании нового и что я должен использовать Add.component и т. Д., Поэтому я был бы признателен за ответ на этот вопрос!
Надеюсь, этот пост немного лучше с точки зрения названия и информации/компоновки, поскольку я очень устал и с низким энергопотреблением. Я собираюсь взять короткий перерыв на продукты, прежде чем я вернусь к нему!
Вот система выносливости:
`
public class HandS : MonoBehaviour {
public int startingHealth = 100;
public int currentHealth;
public int healthReg;
Sword mySword;
bool isRegenHealth;
public float startingStam = 100;
public float currentStam;
public float stamReg;
bool isRegenStam;
void Awake()
{
currentStam = startingStam;
}
void Update()
{
if (currentStam != startingStam && !isRegenStam)
{
StartCoroutine(RegainStamOverTime());
}
}
private IEnumerator RegainStamOverTime()
{
isRegenStam = true;
while (currentStam < startingStam)
{
Stamregen();
ReduceStamina(mySword.stamDrain);
yield return new WaitForSeconds(1);
}
isRegenStam = false;
}
public void Stamregen()
{
currentStam += stamReg;
}
public void ReduceStamina(float _stamDrain)
{
currentStam -= _stamDrain;
}
}
`
Вот сценарий Sword:
using UnityEngine;
using System.Collections;
public class Sword : MonoBehaviour {
static Animator anim;
public GameObject hitbox;
HandS hp = new HandS();
public int Sworddamage = 20;
public float sec = 0.5f;
public float maxStamina = 20;
public float AttackCD;
public float delayBetweenAttacks = 1.5f;
public float stamDrain = 50;
public AudioSource WeaponSource;
public AudioClip WeaponSound;
void Start() {
anim = GetComponentInParent<Animator>();
WeaponSource = GetComponent<AudioSource>();
}
// Update is called once per frame
void Update() {
attack();
block();
}
public void attack()
{
if (Input.GetButtonDown("Fire1") && Time.time > AttackCD)
{
AttackCD = Time.time + delayBetweenAttacks;
anim.SetBool("IsAttacking", true);
hitbox.SetActive(true);
StartCoroutine(LateCall());
WeaponSource.PlayOneShot(WeaponSound);
Debug.Log("hit");
hp.ReduceStamina(stamDrain);
}
else
{
anim.SetBool("IsAttacking", false);
}
}
public void block()
{
if (Input.GetButtonDown("Fire2"))
{
anim.SetBool("IsBlocking", true);
}
else
{
anim.SetBool("IsBlocking", false);
}
}
IEnumerator LateCall()
{
yield return new WaitForSeconds(sec);
hitbox.SetActive(false);
}
}
Возможный дубликат [Простая система событий в Unity] (http://stackoverflow.com/questions/36244660/simple-event-system-in-unity) – Fattie
Привет C-Noobster. То, что вы хотите узнать о следующем, - ** UnityEvent **. Обязательно прочитайте связанный вопрос. Это очень просто. – Fattie
Обязательно сделайте учебник по связанному вопросу, наслаждайтесь – Fattie