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
0
Question by harveyhb · Mar 20, 2014 at 06:47 PM · shaderalphamaterial color

Change a property of a material and effect all Gameobjects using that material

I've got a material I'm using for a number of gameobjects. Is it possible to change the Main color alpha value for this shared material and have it effect all other gameobjects using the same material.

I've tried like this, but this just creates an instance of the material which is affected.

     public void ObjectOneTransparency (float value) {
     
         Vector4 tempCol = object1.material.color;
         tempCol.w = value; 
         object1.sharedMaterial.SetColor("_Color",tempCol);
     
     }

Whats really frustrating is the when the game is running you can edit the the main color alpha just by clicking on color and this effects all gameobjects.

.................................................................................. ..................................................................................

For anyone reading this, a workaround which works is to just create a public Material in your script and then simply adjust values of this , which will effect all other objects using this material.

     public Material matOne;
 
 
 
     public void ObjectOneTransparency (float value) {
         
         Vector4 tempCol1 = matOne.color;
         tempCol1.w = value; 
         matOne.color = tempCol1;
     }
 
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

2 Replies

· Add your reply
  • Sort: 
avatar image
1

Answer by Arshia001 · Mar 20, 2014 at 07:17 PM

The reason for this is that Unity instantiates every material at run-time so that you DON'T modify every object with the same material. The solution to that would be to use sharedMaterial instead of material:

object1.sharedMaterial.color = Color.black;

sharedMaterial is the (non-instantiated) material you actually assigned to your object. I don't know what happens if you modify the sharedMaterial and then modify the material instance on some objects though, so be cautious how you use 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 Arshia001 · Mar 20, 2014 at 07:42 PM 0
Share

Oh and one more thing: $$anonymous$$odifying shared$$anonymous$$aterial actually modifies your material asset (the one you have created in your project) and any changes will be saved along with your project and will be present the next time you run your game. $$anonymous$$eep in $$anonymous$$d that modifying shared stuff (shared$$anonymous$$aterial, shared$$anonymous$$esh, etc.) is generally a bad idea.

(Sorry about the double answer, can't post comments tonight for some reason)

avatar image
0

Answer by SirCrazyNugget · Mar 20, 2014 at 07:44 PM

You've got the right idea using sharedMaterial but when you do

 Vector4 tempCol ...

you're creating a new material, just use

 Vector4 tempCol = object1.sharedMaterial.color

or (Color tempCol)

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 Owen-Reynolds · Mar 20, 2014 at 10:25 PM 0
Share

Worth emphasizing: using material in code works differently than everything else. Just looking at renderer.material copies the shared material, and hooks the gameObject to that.

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

22 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

Related Questions

Material alpha is 1 but still see through 0 Answers

Rewrite simple alphamask fixed function shader to surface or cg shader 2 Answers

Use multiple materials? 1 Answer

Soft edge shader - Issues when objects using same material overlap 0 Answers

Altering color / alpha on a Game 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