【问题标题】:OnTriggerEnter2D (Collider2D other) ... accessing mutiple outside script functionsOnTriggerEnter2D (Collider2D other) ... 访问多个外部脚本函数
【发布时间】:2018-05-05 17:14:11
【问题描述】:

所以我有这个脚本可以很好地影响另一个脚本。它附加到一个游戏对象(一个攻击箱)上,该对象会损坏另一个游戏对象(一个敌人)。它使敌人的游戏对象执行动画(它受到伤害)并带走一定的生命值。这一切都很好。

我坚持的是,我试图让它对不止一种类型的敌人做同样的事情,因此,访问多个脚本。脚本是相对相同的,我已经单独测试了它们并且都工作正常。但是,当我尝试将脚本附加到我的攻击箱,影响多个脚本时,我什么也得不到。我认为这只是它的输入方式,我已经尝试了几种方法。但我已将其恢复为最简单的形式以在此处显示。如何让这个脚本同时适用于两者,这样我就不必将多个脚本附加到一个 hitbox 上?

我应该提到,在这个脚本中,它确实访问了 OnTriggerEnter2D 函数中提到的第一个脚本。对于后面提到的任何其他脚本,它只是不这样做。

using UnityEngine;
using System.Collections;

public class slicer : MonoBehaviour {

public int damage = 5;
private foeHP foe;
private goblin gobby;
public float timer;



void Update()
{
    Destroy ();
    timer -= Time.deltaTime;

}

public void OnTriggerEnter2D (Collider2D other)
{

    if (other.gameObject.tag == "Enemy") {

        other.gameObject.GetComponent<foeHP> ().takeDamage (damage);
        var foe = other.GetComponent<foeHP> ();
        other.gameObject.GetComponent<goblin> ().takeDamage (damage);
        var gobby = other.GetComponent<goblin> ();

    }



    if (foe == null) {
        return;
    }
    if (gobby == null) {
        return;
    }
}

public void Destroy(){
    if (timer <=0)
        Destroy(gameObject);
}
}

【问题讨论】:

    标签: c# triggers null return 2d


    【解决方案1】:

    声明所有敌人类型派生自的通用 Enemy 类。

    public class Enemy : MonoBehaviour
    {
        int health;
    
        public void TakeDamage(int amount)
        {
            health -= amount;
        }
    }
    

    改变你的敌人类,使它们都派生自Enemy

    public class Goblin : Enemy
    {
        // Extra fields/methods
    }
    
    public class Foe : Enemy
    {
        // Extra fields/methods
    }
    

    现在您可以将检查简化为:

    public void OnTriggerEnter2D (Collider2D other)
    {
        if (other.gameObject.tag == "Enemy")
        {
            other.GetComponent<Enemy>().TakeDamage(5);
        }
    }
    

    由于GoblinFoe 都是Enemy 类型,GetComponent&lt;Enemy&gt;() 将返回它们各自的派生类型,您可以对它们调用TakeDamage()

    【讨论】:

      猜你喜欢
      • 2018-04-16
      • 2023-03-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多