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
0
Question by artofcode · Nov 30, 2017 at 08:44 PM · buildserializationbuildpipeline

Build pipeline and wrong values in OnValidate / ISerializationCallbackReceiver

I'm trying to understand how the build pipeline works in Unity after we call 'BuildPipeline.BuildPlayer(...)'.


There has been some weird behavior on our build machine where objects that implemented the ISerializationCallbackReceiver got calls to the OnBeforeSerialize and was causing null references. I've since removed any ISerializationCallbackReceiver to avoid these.


Now I've noticed that OnValidate has the same issue, where it gets called during the build process. In the OnValidate function the code calls a GetComponent() and the values inside the component that has been obtained are empty. (In this particular case a string variable).


 #if UNITY_EDITOR
 protected override void OnValidate()
 {
     Something something = GetComponent<Something>();
     if (something != null)
     {
         Debug.Log("OnValidate: " + something.id + ", gameObject: " + gameObject.name + ", scene: " + gameObject.scene.name);
     }
 }
 #endif


This results in the log-file showing lines of objects with empty 'id' values, while the gameobject name and scene name are printed as expected, after the BuildPipeline.BuildPlayer(...) call.


This is also having me believe that there is something going wrong where we are losing references to component references being stored (RuntimeAnimatorController) in classes that are only build through our build machine.


Extra information: I'm on Unity 5.6.3p2, build process is running through TeamCity. Build machine runs on Windows, as a normal process, not a service.

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 artofcode · Dec 06, 2017 at 12:11 PM 0
Share

After removing any OnValidate function in the project builds are fine again. It seems that whatever is causing the OnValidate to be called on objects with lost references causes it to be marked dirty and thus being saved.


By removing the OnValidate, I prevent it from being marked as dirty and objects with the lost references don't get saved. It still doesn't answer why OnValidate is being called on an object that's loaded in with lost data though.

0 Replies

· Add your reply
  • Sort: 

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

79 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

Related Questions

Distribute terrain in zones 3 Answers

Build hang on compiling scripts in Unity 2018.2 2 Answers

Is it possible to set android sdk path via script? 1 Answer

How to create a BuildOptions mask in the Editor Window? 2 Answers

What could automatically toggle a checkbox in the PluginInspector ? 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