Wayback Machinekoobas.hobune.stream
May JUN Jul
Previous capture 12 Next capture
2021 2022 2023
1 capture
12 Jun 22 - 12 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 Atriace · May 08, 2019 at 11:12 PM · c#materialsmeshrenderer

Assigning Materials[] produces populated array.

Issue

.

Defining an empty array of materials produces a populated array of newly instantiated materials that were never asked for.

.

Example:

 Materials[] emptyMaterials = new Materials[10]; // <-- this is an empty array, 10 indexes long.
 gameObject.GetComponent<MeshRenderer>().materials = emptyMaterials; // <-- this is now full

.

Apparently, materials isn't a simple field, rather someone wrote it as a property (since adding more overhead to every call is always faster than no code... [ha ha]). Funny thing, the original emptyMaterials array is still empty. Assigning it didn't actually update the reference at all. Unity simply loops over that and uses it as a suggestion, and then goes off to make an entirely new array on its own. That property loops through and fills it with entries when it finds a null.

.

I'm already trying to kill unnecessary new calls in my own code. I am going to populate that array of materials eventually. The fact that the getter/setter is automatically volunteering this behind my back is quite vexing.


Tangential

.

  1. I'd like to submit a bug report, but it looks like this will need to start as an inquiry (read as: unable to submit bug report through "Issue Tracker").

  2. The formatting of these questions is horrendous. Notice the periods, and note that they are there because these forums strip returns so as to reduce readability by implying that we have no paragraphs.

  3. This site is missing a decent syntax parser while composing questions (though it exists in the final post).

  4. Selecting a set of return-separated sentences to become a list simply strips the sentences of their return characters, adds one bullet, and inserts new returns at a column width of 36 characters.

  5. List items do not indent properly. Actually... they're running off the page to the left by 1em. Seriously, who left the site in this state?

  6. The "Markdown Basics" tooltip states "basic HTML tags are supported", yet it's not responding to basic html markdown such as: <font color="white">.</font>

Comment
Add comment · Show 1
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 · May 09, 2019 at 01:06 AM 0
Share

That sounds like intended behavior. Along the lines of how just touching a uncloned material makes a clone of it (I've never really worked our material vs. shared$$anonymous$$aterial). Or mesh.vertices=V; is a whole hidden loop copy.

The site bugs are due to it being run by a 3rd party, and UnityCo not being interested in assigning a person here after all of the experienced volunteer mods left.

1 Reply

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

Answer by Bunny83 · May 09, 2019 at 01:31 AM

Assigning an array to materials does on purpose create instances of the supplied materials. That's the point of the materials property. What you may want to use is the sharedMaterials property which will actually use the supplied instances without creating a seperate material instances for this renderer.


Apart from this note that the Unity editor will always create a fake null object for serialized null values. However this behaviour only exists inside the editor and not in a build game. See this Unity blog post for more information.


Note that pretty much all of the build-in Unity classes / components have only properties and no actual fields. That's because those components are actually written in C++ and the C# class is just a managed wrapper class. When you assign an array to materials (or sharedMaterials) Unity will not "save" that array internalls but just use the passed values and store them on the native side. Whenever you read the materials or sharedMaterials property you will actually get a new managed array that is filled with the internally stored references.


Finally we are aware of the broken markdown formatting. Unfortunately the markdown rendering broke about one and a half years ago and hasn't changed since. For example my IMGUI crash course used to look like this:github clone. Basic HTML does work to some degree. Though to actually get a paragraph seperation you have to use the <BR> tag surrounded by empty lines. Note that the font tag is no longer valid in HTML5. Apart from that coloring of text is on most Q&A sites prohibited to avoid abuse. Your sample is the best example. Trying to use white text on white background would be constantly used by spammers to hide links in their posts.

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 Atriace · May 09, 2019 at 02:01 AM 0
Share

Wow, you are correct. I didn't see that "Note" in the API reference. And, the fact that it's a wrapper class for C does explain why all these spurious copies are being generated. Still, I wish they'd internalize these arrays on the C# side so that we aren't forced to write our own mirrored datasets. Finally, when you say "we", I'm assu$$anonymous$$g you mean Unity officially. If so, well... that was the intent, so I guess that's that. Thanks for your answer.

avatar image Bunny83 Atriace · May 09, 2019 at 09:22 AM 0
Share

Unfortunately no ^^ "We" means we the community, not Unity. It's a shame that they kept UA like this for so long. As far as i can tell there was no actual update or change on the site. It just broke the other day.

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

615 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 avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image 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

Multiple Cars not working 1 Answer

Distribute terrain in zones 3 Answers

Change specific material on an object with multiple materials?,Change specific material on an object in a script? 0 Answers

MeshRenderer.materials 1 Answer

Illuminating a 3D object's edges OnMouseOver (script in c#)? 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