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 phloxicin · Feb 20, 2015 at 05:26 PM · instantiateserialization

Non-Monobehaviour data member not being serialised

I have a gun with a Barrel class. A gun can have lots of barrels. Each barrel can shoot projectiles in a variety of formations. I want one prototype barrel that all other barrels are cloned from. Let's say the game starts and the player picks up a gun with one barrel that only shoots one projectile straight ahead. Later he gets an upgrade that increases both the number of barrels on the gun and the number of projectiles each barrels fires. I want it so the gun has just one prototype barrel that is cloned when the player picks up an item that adds an additional barrel to the gun. Here's where the problem occurs. My barrel class looks like this.

 public class Barrel : MonoBehaviour
 {
     [SerializeField] public Formation projectileFormation_;
     [SerializeField] int numProjectiles_;
 
 ...
 }

(I added the "public" and "SerializeField" part trying to fix this problem but it hasn't worked yet. ). Here's where the actual cloning takes place in a separate class.

 void AddBarrel(Barrel prototype)
 {
     Barrel barrel = GameObject.Instantiate(prototype) as Barrel;
     barrels_.Add(barrel);
     Debug.Log("Barrel newly created: " + barrel.ToString()); // null Formation
     Debug.Log("Barrel prototype: " + prototype.ToString()); // not null Formation
 }

The ToString tells me that the numProjectiles part of the Barrel was cloned correctly, but the Formation part is null in the clones. The Formation is not null in the prototype. My formation class looks like this.

 public interface Formation
 {
     List<Quaternion> CalculateDirections(int numMembers);
 }

 [System.Serializable] 
 public class FanFormation : ScriptableObject, Formation
 {
     [SerializeField] public Transform transform_;
     [SerializeField] public float angle_;
 
     List<Quaternion> Formation.CalculateDirections(int numMembers)
     {
         ...
     }
     ...
 }

Originally this class didn't inherit from ScriptableObject and didn't have public fields but I added them in my attempts to get this problem solved.

Why do the clones have null Formations when the object they're cloning from does not?

Edit: I discovered that it doesn't work when I specify the interface but it does work when I specify the class:

 [SerializeField] Formation projectileFormation1_; // doesn't work
 [SerializeField] FanFormation projectileFormation2_; // works

Still not sure how to fix it.

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

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

2 People are following this question.

avatar image avatar image

Related Questions

Unity object cloning and public/private variables 0 Answers

Instantiate scripts with class relationships 1 Answer

Instantiate not duplicating ScriptableObject hierarchy 0 Answers

Properly reverting to a cashed state 0 Answers

Checking if object intersects? 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