2016-07-25 1 views
0

В 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); 
} 

}

+0

Возможный дубликат [Простая система событий в Unity] (http://stackoverflow.com/questions/36244660/simple-event-system-in-unity) – Fattie

+0

Привет C-Noobster. То, что вы хотите узнать о следующем, - ** UnityEvent **. Обязательно прочитайте связанный вопрос. Это очень просто. – Fattie

+0

Обязательно сделайте учебник по связанному вопросу, наслаждайтесь – Fattie

ответ

0

Вы можете создать методы геттер/сеттер, чтобы установить/получить атрибуты из класса А. в классе B, вы можете создайте экземпляр o класса A и получите доступ к этим атрибутам.

Пример Класс A:

public class Genre 
{ 
    public string Name { get; set; } 
} 

Пример экземпляра в классе В:

Genre genre = new Genre(); 
string name = genre.getName(); 

Надежда это помогает.

+0

Это вопрос ** Unity3D ** - это не имеет значения, Ангел. Вопрос здесь относится к конструкциям GameObject в Unity – Fattie

+0

Joe Blow, вы изменили вопрос, и вы добавили теги Unity3D. Я не знаю, почему вы проголосуете меня, если знаете, что у исходного вопроса был только тег C#. Так грустно. –

+0

Привет @angelGuevara! Нет, я не добавил тег Unity3D! *** Я просто добавил его в заголовок вопроса, чтобы сохранить кого-либо еще впустую. *** Обратите внимание, что вопрос абсолютно ** о Unity3D, и ничего больше. – Fattie

Смежные вопросы