2016-07-24 58 views
1

我對c#和編碼一般都很陌生。如何在Unity中使用行爲?

我得到的是一個武器腳本,其公共int爲50(傷害)。然後我得到另一個腳本,這是敵人的健康。

現在我想要做的就是使用武器腳本中的值將它應用到敵人的健康腳本,我不知道該怎麼做。

我知道這件事很簡單,但我一直在抨擊我的頭靠在牆上試圖找出這件事。

請幫忙!

Weapon.cs

using UnityEngine; 
using System.Collections; 

public class Weapon : MonoBehaviour { 

    static Animator anim; 
    public GameObject hitbox; 
    public int damage = 50; 
    private AudioSource MyAudioSource; 
    private AudioClip WeaponSound; 

    void Start() { 
     anim = GetComponentInParent<Animator>(); 
     MyAudioSource = GetComponent<AudioSource>(); 
     GetComponent<EnemyHealth>().TakeDamage(damage);     
    } 

    void Update() { 
     attack(); 
     block(); 
    } 

    public void attack() { 
     if (Input.GetButtonDown("Fire1")) { 
      GetComponent<EnemyHealth>().TakeDamage(damage); 
      anim.SetBool("IsAttacking", true); 
      hitbox.SetActive(true); 
      Debug.Log("hit"); 
      MyAudioSource.PlayOneShot(WeaponSound); 
     } 
     else { 
      anim.SetBool("IsAttacking", false); 
      hitbox.SetActive(false); 
     } 
    } 

    public void block() { 
     if (Input.GetButtonDown("Fire2")) { 
      anim.SetBool("IsBlocking", true); 
     } 
     else { 
      anim.SetBool("IsBlocking", false); 
     } 
    } 
} 

EnemyHealth.cs

using UnityEngine; 
using System.Collections; 

public class EnemyHealth : MonoBehaviour { 

    public int maxHealth = 100; 
    private int currentHealth;   
    private Animator animator; 

    void Start() { 
     currentHealth = maxHealth; 
     animator = GetComponent<Animator>(); 
    } 

    public void OnTriggerEnter(Collider other) { 
     other.GetComponent<Weapon>().attack(); 
    } 

    public void TakeDamage(int _damage) { 
     currentHealth -= _damage; 
     animator.SetTrigger("IsHit"); 
     if(currentHealth <= 0) { 
      Die(); 
     } 
    } 

    void Die() { 
     animator.SetBool("Isdead", true); 
     Destroy(gameObject); 
    } 
} 
+2

告訴我們你有什麼已經嘗試過 – Mostafiz

+0

我甚至不知道如何使用這個論壇。我很不好。添加了我認爲的代碼。 – CSharpNoob

+1

你應該閱讀[如何提問?](http://stackoverflow.com/help/how-to-ask) – dotctor

回答

1

假設這些在另一主類實例都在C#中(意爲那些不是從另一個isntatiate)你只需使用'。'運營商訪問公共元素,屬性和功能在一個類

main() 
{ 
    EnemyHealth myehlth = new EnemyHealth(); 
    Weapon myweapn = new Weapon(); 
    myehlth.TakeDamage(myweapn.damage); 
} 

在這裏,我用'。'操作員訪問武器類中的公共傷害,然後使用'。'。 oeprator將其傳遞給公衆TakeDiag功能在您的健康類

+0

就像我說的,我對編碼很陌生,所以我不知道你的意思。他們都是他們自己的班級(單獨的腳本),沒有其他班級等。 – CSharpNoob

+0

好吧,我喜歡我說我是一個超級新手,所以我做的只是:武器myweapon =新的武器();然後把TakeDamage(myweapon.damage);它的工作! – CSharpNoob

+0

那麼我提供給你的三行代碼將工作拷貝並粘貼。我假定你已經編寫了上面的代碼。如果你不懂如何複製和粘貼代碼,那麼我真的會推薦一個簡單的「hello world」示例的c#教程,因爲很難向您展示如何在此處設置項目。 – noone392

0

答案很簡單!由於noone392

main() 
 
{ 
 
    
 
    Weapon myweapn = new Weapon(); 
 
    TakeDamage(myweapn.damage); 
 
}

+0

請不要在'C#'中使用代碼片段。它們用於'HTML','CSS'和'JavaScipt'。 – ventiseis