• 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 Ninjapro2k_ · Nov 06, 2017 at 08:00 PM · c#2dcollidertagcomparetag

CompareTag being ignored?

So, I have a small 2D platformer I'm working on. In the game there are platforms (of course), and colliders in specific positions under them. When the player falls off the platform, I want them to teleport to a specified respawn node and add 1 to the number of times they've fallen (a UI element).

It seems like the code below is completely ignoring the CompareTag command, as each of the colliders are tagged uniquely. It's just recognizing that I've hit something and respawning me. I fixed an issue where it would add 3 instead of 1 every time I died, but now it spawns me at the 1st respawn point regardless, even when I should be at the 2nd or 3rd.

This is the code I'm using, written in C#. The two sections commented out are the ones in question. It's been a couple months since I worked on the game. Has any of the code been deprecated? I greatly appreciate any help.

using UnityEngine; using UnityEngine.UI; using System.Collections;

public class Spawning : MonoBehaviour {

 public AudioSource source;
 public AudioClip deathSound;

 public bool dead = false;

 public Transform spawnPoint;
 public Transform respawnPoint;
 public Transform respawnPoint2;
 public Transform respawnPoint3;
 public Text Falls;

 public int timesFallen;

 // Use this for initialization
 void Start () {
     transform.position = spawnPoint.position;
     timesFallen = 0;
     Falls.text = "Falls:";
 }

 void OnTriggerEnter2D(Collider2D other) //When I hit a "deadzone", or the colliders below
 {
     if (other.gameObject.CompareTag ("Respawn")) //if it's the 1st collider, take me to respawn point 1
         respawn();
         transform.position = respawnPoint.position;
         
         
     /*if (other.gameObject.CompareTag ("Respawn2")) //the same thing but for spawn point 2
         respawn();
         transform.position = respawnPoint2.position;
         
         
     if (other.gameObject.CompareTag ("Respawn3")) // same but for 3
         respawn();
         transform.position = respawnPoint2.position;*/
            
 }

 void SetTimesFallen()
 {
     timesFallen = timesFallen + 1;
     Falls.text = "Falls: " + timesFallen.ToString();
 }

 void respawn ()
 {
     dead = true;
     source.PlayOneShot(deathSound);
     SetTimesFallen();
     dead = 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
2

Answer by FlaSh-G · Nov 07, 2017 at 11:05 AM

I'll have to admit that I cringe massively every time someone tries to use Tags this way. Tags are useful for common groups of objects. You can only create a finite number tags, so using tags to identify a potentially infinite number of objects is not getting you very far.

You can see a very related issue in the if statements you have commented out. You have three times pretty much the same code, only slightly different. If you have 20 respawns, you will have 20 of those if statements and 20 variables cluttering up your code.

The best solution to avoid this kind of code depends on the situation. In your case, you seem to have a set of objects that each refer to one specific object of another set. Namely, each of the respawn triggers the player can touch implies one specific respawn point.

So I'd recommend to write a very small script:

 public class ReapwnTrigger : MonoBehaviour
 {
   public Transform respawnPoint;
 }

that goes on each of your respawn triggers. You can then drag the respawn point corresponding to the platform into the "Respawn Point" property.

The player script, in the meantime, does this:

 void OnTriggerEnter2D(Collider2D other)
 {
   var respawnTrigger = other.GetComponent<RespawnTrigger>();
   // Since the trigger we entered might be something other than a RespawnTrigger,
   // we need to check if it has the component first
   if(respawnTrigger)
   {
     // Okay, it is a RespawnTrigger, so lets teleport to the respawn point it wants us to go to
     transform.position = respawnTrigger.respawnPoint;
   }

And that's that.

No more tags, no more potentially infinite if statements, no more the player knowing the whole level before even going into it.

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 Ninjapro2k_ · Nov 13, 2017 at 03:18 PM 0
Share

Thanks a ton man. Yeah, I'm still a very beginner programmer and I just recently got back into it. I'll try this out and let you know what happens.

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

450 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

Related Questions

C# Invalid Points Assigned to 2D Edge Collider 1 Answer

AI Attack Not Working! W/Video 1 Answer

RaycastHit2D not getting any information? 2 Answers

Player ignores tilemap collider on fall 1 Answer

what else could be wrong, OnTriggerEnter 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