简体   繁体   中英

Unity Sword Collision Attack

Hey guys I want to make a sword attack. But I get the error of:

NullReferenceException: Object reference not set to an instance of an object

These are my codes: My weaponattack script:

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

This is my Enemy Health scrpt:

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

Can you helo em I couldnt understan why these codes are not working why am I getting that error.

I think your problem is in this line here GetComponent<Enemy>(); This needs a game object to get the component of

Enemy = col.GetComponent<Enemy>();

Should be what you're doing

You also may have issue calling your variable Enemy exactly the same as your class Enemy, I would change this to Enemy enemy; and

enemy = col.GetComponent<Enemy>();

respectivley

It seems pretty straightforward. You don't assign an Enemy to Weaponattack and so it's barfing when you first reference Enemy ( Enemy.currentHealt ). Either make Enemy public or a SerializedField so you can assign it in the Inspector, or however else you want to get an Enemy into Weaponattack.

Also don't name your property the same name as your script ( Enemy Enemy ). Surprised you didn't get a compile error.

EDIT Based on comments :

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

This also assumes you have an Enemy attached to your Weaponattack ( GetComponent )

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM