Alp Eren Gül
Alp Eren Gül

Reputation: 103

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.

Upvotes: 1

Views: 2716

Answers (2)

Jay
Jay

Reputation: 2946

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

Upvotes: 2

NastyDiaper
NastyDiaper

Reputation: 2558

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)

Upvotes: 0

Related Questions