【问题标题】:Unity Sword Collision Attack统一剑碰撞攻击
【发布时间】:2020-05-05 23:49:32
【问题描述】:

大家好,我想做一个剑攻击。但我得到以下错误:

NullReferenceException:对象引用未设置为 对象

这些是我的代码: 我的武器攻击脚本:

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class Weaponattack : MonoBehaviour
{
    Enemy Enemy;
    public float power;
    // Use this for initialization
    void Start () {

    }
    // Update is called once per frame
    void Update () {

    }
    public void OnTriggerEnter(Collider col)
    {
       if(col.tag == "Enemy")
        {
            var kılıc = GetComponent<Enemy>();
            Enemy.currentHealt -= 10;
            Enemy.TakeDamage();
            Debug.Log("Düşman Vuruldu");
        }
    }
}

这是我的敌人健康脚本:

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class Enemy : MonoBehaviour {
    public float currentHealt;
    public float maxHealth;
    // Use this for initialization
    void Start () {
        currentHealt = maxHealth;
    }

    // Update is called once per frame
    void Update () {

    }
    public void TakeDamage()
    {
        currentHealt -= 10;
        if(currentHealt < 0)
        {
            die();
        }
    }
    void die()
    {
        Destroy(gameObject);
    }
}

你能告诉他们吗?我不明白为什么这些代码不起作用为什么我会收到这个错误。

【问题讨论】:

标签: c# visual-studio unity3d


【解决方案1】:

我认为你的问题出在GetComponent&lt;Enemy&gt;();这行这需要一个游戏对象来获取组件

Enemy = col.GetComponent<Enemy>();

应该是你正在做的事情

你也可能在调用你的变量 Enemy 与你的类 Enemy 完全相同时遇到问题,我会将其更改为 Enemy enemy;

enemy = col.GetComponent<Enemy>();

各自

【讨论】:

  • 是的,谢谢它的工作。是的,它是非常基本的代码,但我宁愿不要写很多代码。
【解决方案2】:

看起来很简单。您没有将 Enemy 分配给 Weaponattack,所以当您第一次引用 Enemy (Enemy.currentHealt) 时,它会令人讨厌。将 Enemy 设为 public 或 SerializedField 以便您可以在 Inspector 中分​​配它,或者您想让 Enemy 进入 Weaponattack。

另外,不要将您的属性命名为与脚本相同的名称 (Enemy Enemy)。很惊讶你没有收到编译错误。

基于 cmets 编辑

Enemy enemy;


public void OnTriggerEnter(Collider col)
{
   if(col.tag == "Enemy")
    {
        var kılıc = GetComponent<Enemy>();
        kilic.currentHealt -= 10;
        kilic.TakeDamage();
        Debug.Log("Düşman Vuruldu");
    }
}

这也假设你有一个 Enemy 附加到你的 Weaponattack (GetComponent)

【讨论】:

  • var kılıc = GetComponent(); kılıc.currentHealt -= 10;
  • 当我这样更改它时,它不再起作用。你能展示一个关于访问的代码块吗?
  • 那你为什么不使用kilic?敌人仍未分配。此外,您所说的Enemy 非常令人困惑。 TakeDamagecurrentHealt 似乎是静态的。
猜你喜欢
  • 2015-07-10
  • 2021-12-31
  • 2015-03-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多