Wayback Machinekoobas.hobune.stream
May JUN Jul
Previous capture 13 Next capture
2021 2022 2023
1 capture
13 Jun 22 - 13 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
1
Question by Patrik · Sep 02, 2010 at 01:55 PM · hierarchylayeradd

Fast layer assignment

Hi, I need to add a gameobject and all its children to a layer via c# code. In editor i'm asked if i want to add the single object or the whole hierarchy. i wonder if there is an equally fast way to do this in a script without writing explicit code

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

3 Replies

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

Answer by skovacs1 · Sep 02, 2010 at 07:21 PM

To put a stop to your wondering, the short answer is that there is no implemented method to do this that I can find.

As == says, you will have to recurse through the hierarchy.

You could do something like:

//recursive calls
void MoveToLayer(Transform root, int layer) {
    root.gameObject.layer = layer;
    foreach(Transform child in root)
        MoveToLayer(child, layer);
}

or

//no recursive calls
using System.Collections;
void MoveToLayer(Transform root, int layer) {
    Stack<Transform> moveTargets = new Stack<Transform>();
    moveTargets.push(root);
    Transform currentTarget;
    while(moveTargets.Count != 0)
    {
        currentTarget = moveTargets.Pop();
        currentTarget.gameObject.layer = layer;
        foreach(Transform child in currentTarget)
            moveTargets.Push(child);
    }
}
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
avatar image
8

Answer by Bezzy · Aug 07, 2013 at 11:39 AM

An extension version of the above for anyone who wants:

 using UnityEngine;
 using System.Collections;
 
 public static class TransformExtensions
 {
     public static void SetLayer(this Transform trans, int layer) 
     {
         trans.gameObject.layer = layer;
         foreach(Transform child in trans)
             child.SetLayer( layer);
     }
 }

Use like this:

 someOtherGameObject.transform.SetLayer( gameObject.layer );
Comment
Add comment · Show 2 · 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 hattrik_4 · Nov 12, 2014 at 08:08 PM 0
Share

Would upvote, but too new to the forums! Thanks for this.

avatar image Ali-Nagori · Jan 26, 2017 at 02:20 PM 0
Share

swell ...!

avatar image
1

Answer by equalsequals · Sep 02, 2010 at 02:16 PM

There is no reason you couldn't recursively move down the top-most object's transform hierarchy and set each gameobject's layer accordingly.

Add this script to your Editor folder:

using UnityEngine; using UnityEditor; using System.Collections;

public class LayerChanger : ScriptableWizard {

 public int layer;
 public GameObject gameObject;
 [MenuItem ("GameObject/Manage Layers Recursively")]

 static void CreateWizard () {
     ScriptableWizard.DisplayWizard("Manage Layers", typeof (LayerChanger),"Improv!");
 }

 void OnWizardCreate () {
     Pew(gameObject);
 }

 void Pew(GameObject g)
 {
     g.layer = layer;
     foreach(Transform t in g.transform)
     {
         t.gameObject.layer = layer;
         Pew(t.gameObject);
     }
 }

}

Cheers

==

Comment
Add comment · Show 7 · 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 Patrik · Sep 02, 2010 at 02:40 PM 0
Share

I know. I was asking if there is already a method to do this

avatar image equalsequals · Sep 02, 2010 at 07:17 PM 0
Share

Write the 20-odd lines of code needed to do it?

avatar image skovacs1 · Sep 02, 2010 at 07:24 PM 0
Share

It's even less. $$anonymous$$ore like 5-13 lines.

avatar image equalsequals · Sep 02, 2010 at 07:33 PM 0
Share

Feeling generous, wrote it for you.

avatar image skovacs1 · Sep 02, 2010 at 09:05 PM 0
Share

Did the question specify whether the code being asked about was for the editor or the run-time? I figured since the editor will do this for you as the question describes that they didn't really need an editor script. Thanks for covering the other interpretation - one of us has to have the correct answer.

Show more comments

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

2 People are following this question.

avatar image avatar image

Related Questions

Does SpriteManger2 can duel with layer's components? 0 Answers

Finding objects with TextMeshPro component. 1 Answer

My Player Gameobject is missing on hierarchy during the play mode 1 Answer

LayerMask vs 1<< gameObject.layer ? 2 Answers

Raycast not working 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