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 clancy1066 · Apr 13, 2020 at 09:49 PM · scripting probleminstantiate

LayoutKind.Explicit FieldOffset structs getting wrecked at Instantiate()

Hi,

I have a structure defined like this(To be a Union):

 using UnityEngine;StructLayout(LayoutKind.Explicit, Pack = 16)]
 public struct CJI_ORDER_PARAM
 {
         #region
         [FieldOffset(0)]
         public bool isOn;
         [FieldOffset(0)]
         public bool triggered;
 
         [FieldOffset(0)]
         public float fVal;
         [FieldOffset(0)]
         public float timeVal;

}

And a class that uses it thus:

 public class AIOrderBase : MonoBehaviour
 {
     public CJI_ORDER_PARAM param1;
 }

And still another that does:

 AIOrderBase gameAIOrderTemplate; // This is set to a valid value
             
 AIOrderBase retVal  = Instantiate(gameAIOrderTemplate);
 
 retVal.param1.fVal = 42.0f;  // Or any member...this crashes Unity hard

If I use a regular struct(no layout), it works fine. Anyone out there know why the Field offset version would hard crash Unity and sometimes require a restart of my machine?

No warning or complaints from the compiler or the runtime...just hard Unity-stopping crash. Clues?

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

1 Reply

· Add your reply
  • Sort: 
avatar image
0

Answer by clancy1066 · Apr 14, 2020 at 12:45 AM

Ah, it was because I had these in the structure at the same offset as some intrinsic types. Look at the comment for "other objects" at the bottom to see the offenders:

 [StructLayout(LayoutKind.Explicit, Pack = 4)]
 public struct CJI_ORDER_PARAM
 {
   
         #region
         [FieldOffset(0)]
         public bool isOn;
         [FieldOffset(0)]
         public bool triggered;
     
         // Other objects OFFENDERS
         [FieldOffset(0)]
         public Transform target;
         [FieldOffset(0)]
         public AIAgentBase focusObj;
         [FieldOffset(0)]
         public AIAgentBase targetObj;

I put them at some other offset like this:

 // Other objects
          [FieldOffset(16)]
          public Transform target;
          [FieldOffset(16)]
          public AIAgentBase focusObj;
          [FieldOffset(16)]
          public AIAgentBase targetObj;

And:

 retVal.param1.isTriggered = true;

// OR retVal.param1.fVal = 42.0f; // OR retVal.param1.focusObj = this;

...Works. It seems when they overlap that they will cause a crash even if just using retVal.param1.fVal only--when never touching the other members. Weird and my solution defeats the attempt at a true union Maybe GameObject thingees/pointers/refs cannot share space like this.It is scary that nothing catches it before or during runtime.

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

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

242 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

Related Questions

GUIText transition trouble 1 Answer

There is a generation lag 1 Answer

Projectile not firing 2 Answers

My prefab isn't getting destroyed 1 Answer

Instantiate not working? 0 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