如何在Unity中使用行为?

时间:2016-07-24 15:59:40

标签: c# unity3d

我对c#和编码很新。

我得到的是一个武器脚本,其公共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 个答案:

答案 0 :(得分:1)

假设这些都在c#中的另一个主类中实例化(意思是那些不同于另一个主类),你只需使用'。'运算符来访问类中的公共元素,属性和函数

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

我在这里使用'。'操作员访问武器类中的公共损坏然后使用'。' oeprator将它传递给健康类中的公共TakeDamage函数

答案 1 :(得分:0)

答案很简单!谢谢noone392

&#13;
&#13;
SELECT  p.kddsa,
        p.kdkec,
        p.kdkab,
        p.kdprop,
        a.jumlahA,
        b.jumlahB,
        c.jumlahC
FROM (
SELECT kddsa, kdkec, kdkab, kdprop
FROM tes_a
UNION
SELECT kddsa, kdkec, kdkab, kdprop
FROM tes_b
UNION
SELECT kddsa, kdkec, kdkab, kdprop
FROM tes_c) as p
LEFT JOIN tes_a as a
    ON p.kddsa=a.kddsa and p.kdkev=a.kdkec and p.kdkab=a.kdkab and p.kdprop=a.kdprop
LEFT JOIN tes_b as b
    ON p.kddsa=b.kddsa and p.kdkev=b.kdkec and p.kdkab=b.kdkab and p.kdprop=b.kdprop
LEFT JOIN tes_c as c
    ON p.kddsa=c.kddsa and p.kdkev=c.kdkec and p.kdkab=c.kdkab and p.kdprop=c.kdprop
&#13;
&#13;
&#13;