Wayback Machinekoobas.hobune.stream
May JUN Jul
Previous capture 12 Next capture
2021 2022 2023
1 capture
12 Jun 22 - 12 Jun 22
sparklines
Close Help
  • Products
  • Solutions
  • Made with Unity
  • Learning
  • Support & Services
  • Community
  • Asset Store
  • Get Unity

UNITY ACCOUNT

You need a Unity Account to shop in the Online and Asset Stores, participate in the Unity Community and manage your license portfolio. Login Create account
  • Blog
  • Forums
  • Answers
  • Evangelists
  • User Groups
  • Beta Program
  • Advisory Panel

Navigation

  • Home
  • Products
  • Solutions
  • Made with Unity
  • Learning
  • Support & Services
  • Community
    • Blog
    • Forums
    • Answers
    • Evangelists
    • User Groups
    • Beta Program
    • Advisory Panel

Unity account

You need a Unity Account to shop in the Online and Asset Stores, participate in the Unity Community and manage your license portfolio. Login Create account

Language

  • Chinese
  • Spanish
  • Japanese
  • Korean
  • Portuguese
  • Ask a question
  • Spaces
    • Default
    • Help Room
    • META
    • Moderators
    • Topics
    • Questions
    • Users
    • Badges
  • Home /
avatar image
0
Question by RVDL_IT · Mar 22, 2018 at 09:03 PM · c#variableenemygetcomponentreference

Enemy variable remains null

I'm writing a knockback script for the enemies, so that they gets knocked back, but for some reason my Enemy gameobject remains null.

The knockback script:

 using System.Collections;
 using System.Collections.Generic;
 using UnityEngine;
 
 class KnockBackPlayer : MonoBehaviour {
     
     //GameObjects
         public GameObject Player;
         public GameObject Enemy; //This is the variable that I want to be filled
         
     //Vector Variables
         private Vector2 PlayerVec;
         private Vector2 EnemyVec;
         public Vector2 KnockBackVec;
         
     //Enemy Variables
         public bool EnemyHit;
         public Rigidbody2D EnemyRB;
         
     //Force Variables
         private float Speed;
         public float ForceSpeed;
         
     //Dash Attack Variable
         public bool DashAttack;
     
     void Update() {
         //Vector Declarations
             PlayerVec = Player.transform.position;
             EnemyVec = Enemy.transform.position;
     
         //Speed Calculation
             Speed = ForceSpeed * Time.deltaTime;
     
         //Other Scripts Declarations
             DashAttack = Player.GetComponent<AttackControls>().DashAttack;
             Enemy = this.gameObject.GetComponent<DamagePlayer>().Enemy;
             EnemyHit = this.gameObject.GetComponent<DamagePlayer>().ComboHit;
             
         //Force Calculating by Difference
             KnockBackVec = EnemyVec - PlayerVec;
             
         //Knock Back Added to Enemy
             if(EnemyHit == true && DashAttack == false) {
                 EnemyRB.AddForce(KnockBackVec * Speed, ForceMode2D.Impulse);
         }
     }
 }

The script that I'm trying to take the variable from:

 using System.Collections;
 using System.Collections.Generic;
 using UnityEngine;
 
 public class DamagePlayer : MonoBehaviour {
 
 //GameObjects
     public GameObject Player;
     public GameObject Enemy; //The variable that I'm trying to copy
 
 //Booleans
     public bool NormalAttack;
     public bool ChargedAttack;
     public bool DashAttack;
     public bool ComboHit;
 
 //Floats
     private float EnemyInv;
 
 void Update() {
     //Hit Boolean Declaratioms
         NormalAttack = Player.GetComponent<AttackControls>().NormalAttack;
         ChargedAttack = Player.GetComponent<AttackControls>().ChargedAttack;
         DashAttack = Player.GetComponent<AttackControls>().DashAttack;
     
     //Enemy Hit Cooldown
         if(EnemyInv > 0) {
             EnemyInv -= Time.deltaTime;
         }
         if(EnemyInv < 0) {
             EnemyInv = 0;
         }
 }
 
 void OnTriggerEnter2D(Collider2D EnemyChar) {
     if(EnemyChar.gameObject != Player) {
         ComboHit = true;
         
         Enemy = EnemyChar.gameObject;
         
         //Damage Dealings
             if(EnemyInv == 0) {
                 if(DashAttack == true) {
                     Enemy.gameObject.GetComponent<HealthEnemy>().EnemyHealth-= 8;
                     EnemyInv = 0.1f;
                 }
                 if(NormalAttack == true) {
                     Enemy.gameObject.GetComponent<HealthEnemy>().EnemyHealth-= 5;
                     EnemyInv = 0.1f;
                 } 
                 if(ChargedAttack == true){
                     Enemy.gameObject.GetComponent<HealthEnemy>().EnemyHealth -= 8;
                     EnemyInv = 0.1f;
                 }
             }
     }
 }
 
 void OnTriggerExit2D() {
     ComboHit = false;
 }
 }
Comment
Add comment
10 |3000 characters needed characters left characters exceeded
▼
  • Viewable by all users
  • Viewable by moderators
  • Viewable by moderators and the original poster
  • Advanced visibility
Viewable by all users

1 Reply

· Add your reply
  • Sort: 
avatar image
0

Answer by Glurth · Mar 22, 2018 at 10:08 PM

It looks like you are making a few assumptions, but are not checking via code, that they are in fact valid.

 Enemy = this.gameObject.GetComponent<DamagePlayer>().Enemy;

This line assumes there a a DamagePlayerComponent on the same game object.
You can use the RequiresComponent attribute to ensure this will be the case.

Also,

 Enemy = EnemyChar.gameObject;

appears to be the only line where the Enemy value is actually assigned. This line is called only OnTriggerEnter, which is your second assumption, that a triggerEnter event has actually occurred. What behavior do you want for the Enemy variable when you have NOT had a triggerEnter event? Whatever behavior you choose, you'll need to add some code to check for, and handle this condition.

Lastly, I don't see where EnemyChar is declared, but it looks like you are assuming it is a valid object and that it has a valid gameObject member.

Comment
Add comment · Show 1 · Share
10 |3000 characters needed characters left characters exceeded
▼
  • Viewable by all users
  • Viewable by moderators
  • Viewable by moderators and the original poster
  • Advanced visibility
Viewable by all users
avatar image Bunny83 · Mar 22, 2018 at 10:17 PM 0
Share

He will never reach this line:

 Enemy = this.gameObject.GetComponent<DamagePlayer>().Enemy;

Because the second line in Update is this:

 EnemyVec = Enemy.transform.position;

Since Enemy is not set yet Update will ter$$anonymous$$ate with a NullReferenceException on the second line in Update.

Your answer

Hint: You can notify a user about this post by typing @username

Up to 2 attachments (including images) can be used with a maximum of 524.3 kB each and 1.0 MB total.

Follow this Question

Answers Answers and Comments

469 People are following this question.

avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image

Related Questions

Referencing in a prefab 1 Answer

Distribute terrain in zones 3 Answers

What is the diffrence between Reference and GetComponent ? 1 Answer

Referencing another C# Script Error 1 Answer

Why we have to use getcomponent instead of a simple reference ? 2 Answers


Enterprise
Social Q&A

Social
Subscribe on YouTube social-youtube Follow on LinkedIn social-linkedin Follow on Twitter social-twitter Follow on Facebook social-facebook Follow on Instagram social-instagram

Footer

  • Purchase
    • Products
    • Subscription
    • Asset Store
    • Unity Gear
    • Resellers
  • Education
    • Students
    • Educators
    • Certification
    • Learn
    • Center of Excellence
  • Download
    • Unity
    • Beta Program
  • Unity Labs
    • Labs
    • Publications
  • Resources
    • Learn platform
    • Community
    • Documentation
    • Unity QA
    • FAQ
    • Services Status
    • Connect
  • About Unity
    • About Us
    • Blog
    • Events
    • Careers
    • Contact
    • Press
    • Partners
    • Affiliates
    • Security
Copyright © 2020 Unity Technologies
  • Legal
  • Privacy Policy
  • Cookies
  • Do Not Sell My Personal Information
  • Cookies Settings
"Unity", Unity logos, and other Unity trademarks are trademarks or registered trademarks of Unity Technologies or its affiliates in the U.S. and elsewhere (more info here). Other names or brands are trademarks of their respective owners.
  • Anonymous
  • Sign in
  • Create
  • Ask a question
  • Spaces
  • Default
  • Help Room
  • META
  • Moderators
  • Explore
  • Topics
  • Questions
  • Users
  • Badges