• 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
1
Question by Shiner252 · Aug 23, 2017 at 03:28 AM · c#prefabinstance

Variables changing in Prefab but not in instance

I am currently making a 2D tower defense game, which involves enemies going down a path and the player placing towers along the path to shoot at the enemies. However, when the bullet hits an enemy prefab and the function is called that causes the enemy to lose health, the prefab (as in, the item in the Prefab folder) is losing health in the inspector and not the instance of the enemy (as in, the game object in the hierarchy with (Clone) after it). Each enemies' health should be unique to their instance. I am using a reference to the script on the object to subtract "damage" from the non-static "health" variable of the enemy.

enemyBehavior.TakeDamage (damage);

Comment
Add comment · Show 5
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 bobisgod234 · Aug 23, 2017 at 06:34 AM 0
Share

Sounds like you are accidentally referencing your prefabs enemyBehaviour ins$$anonymous$$d of your clone.

Add

 Debug.Log(enemyBehaviour.gameObject.name, enemyBehaviour.gameObject);

just before you call TakeDamage and see what it says, if it does not have a "(Clone)" after it, that is the case.

avatar image Shiner252 bobisgod234 · Aug 23, 2017 at 07:21 PM 0
Share

When I logged the enemy's name before calling TakeDamage, it came up with "Enemy (Clone)". Then I tried logging the enemy's name in TakeDamage, and it came up with "Enemy". I tried passing the enemy gameObject through TakeDamage as a gameObject variable argument (named e) and then ran Debug.Log (e.name); and it came up with "Enemy (Clone)". So then I tried e.health -= damage; but it says "GameObject does not contain a definition for 'health'" yada yada. Now is there any way I can change the health variable of "e"?

avatar image paranoiks · Aug 23, 2017 at 08:20 PM 0
Share

Can you copy a bigger chunk of your code? $$anonymous$$aybe this way we'll be able to be of more use

avatar image Shiner252 paranoiks · Aug 23, 2017 at 08:57 PM 0
Share
 public class Bullet : $$anonymous$$onoBehaviour {

 public float damage;

     void OnTriggerEnter (Collider collider) {
         if (collider.gameObject.tag == "Enemy") {
             GameObject e = collider.gameObject;
             e.health -= damage;
         }
     }
 }

I am unable to use "e.health" because e does not contain a definition for health.

avatar image paranoiks Shiner252 · Aug 23, 2017 at 11:04 PM 0
Share

You are unable to use "e.health" because "e" is of type GameObject. I assume there is some custom script attached to that GameObject, which has the variable "health". In that case you can do the following: e.GetComponent().health -= damage;

1 Reply

· Add your reply
  • Sort: 
avatar image
2
Best Answer

Answer by SilverSho0t · Aug 23, 2017 at 09:07 PM

You need to use GetComponent because you search health in e but e is a GameObject variable not your script of class 'ClassName' so you need to call this script :

e.GetComponent<ClassName>().health -= damage;
Just replace ClassName by the name of the class/script of which you subtract heath.

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 Shiner252 · Aug 24, 2017 at 01:49 AM 0
Share

That did it! I can't believe I didn't think of using GetComponent...

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.

Welcome to Unity Answers

If you’re new to Unity Answers, please check our User Guide to help you navigate through our website and refer to our FAQ for more information.

Before posting, make sure to check out our Knowledge Base for commonly asked Unity questions.

Check our Moderator Guidelines if you’re a new moderator and want to work together in an effort to improve Unity Answers and support our users.

Follow this Question

Answers Answers and Comments

379 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

Related Questions

How to obtain this prefab name in this circunstances 1 Answer

How to get all objects instantiated from a single prefab? 1 Answer

Distribute terrain in zones 3 Answers

Possible Bug? GameObject.Instantiate copies instance instead of Prefab 1 Answer

Multiple Cars not working 1 Answer


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