Wayback Machinekoobas.hobune.stream
May JUN Jul
Previous capture 14 Next capture
2021 2022 2023
2 captures
13 Jun 22 - 14 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 Halter24 · Apr 12 at 09:39 PM · prefabsreferenceprefab-instance

How do I reference any instance of a prefab?

Hello! I've got a small problem involving one player-controlled character and a lot of bullets.

Every time I get hit by this bullet prefab, I want to have a very short timespan (Done as a coroutine) where I can press "Shift" and save myself.


The code that "Kills" the player is done in the instance of every bullet prefab, its triggered on collision:

     IEnumerator Invincibility()
     {
         yield return new WaitForSeconds(Iframes); //pauses code so you don't die immediately
         if(netCollider.GetComponent<CircleCollider2D>().enabled == true) //checks if shift is pressed
         {
             killItem(); //bullet destroy's itself
             StopCoroutine("Invincibility");
         }
         else
         {
             Debug.Log("You Died!");
         }
     }

This code works, but even when the player presses shift the coroutine must continue executing before stopping, and that looks a little awkward.


I was wondering if there is a way to reference (and terminate) a specific coroutine from the prefab the player collided with? So that I could call for the coroutine to stop from the player Object and have it stop immediately.

I have considered using static variables and update functions in the prefabs, but I don't have a solid understanding of the first (and it didn't seem to work well with coroutines) and update functions in every instance of a prefab sounds very taxing. Any help is welcome and let me know if you need elaboration.

Ah, and deleting the prefab works, but messes with some of the code and isn't a great option, one I'd like to avoid if possible.

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 Captain_Pineapple · Apr 13 at 06:36 AM

In general yes, you can save a reference to a coroutine in a variable. This can be taken from the >Unity Documentation>


Long story short:

    StartCoroutine(Invincibility());

Can also be written as:

   var myRoutineReference = Invincibility();
   StartCoroutine(myRoutineReference);

In the same manner you can stop a coroutine:

  StopCoroutine(myRoutineReference);

I can in general recommend to go this path if you want to stop a routine as this avoids using strings. Strings are imo a bad way to do this as these are not listed as references to a function and thus can be missed when doing refactoring. It's also way easier to add typos here.

you can ofc always force a routine to stop by going out of scope of the routine (so basically a normal "function end") or adding a yield break on a certain point.

Comment
Add comment · 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

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

142 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

Related Questions

Is there a way to prevent non-prefab objects from being linked in the inspector? 0 Answers

Referencing the currrently edited prefab in prefab edit-mode 0 Answers

Creating a scene: instantiating a prefab in a scene or use pre-instantiated prefabs? 1 Answer

Why does changing an instance affect the prefab? 1 Answer

How can you make a Instanciate prefab follow a scene object? 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