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 /
This post has been wikified, any user with enough reputation can edit it.
avatar image
0
Question by dave321 · Aug 22, 2012 at 05:11 AM · c#inspectorvariables

Public class variables not displaying in the inspector

I am using C# and am having trouble having the class, public variables show up in the inspector. I looked around online and found that it should have System.Serializable before the class, but it doesn't seem to help. Any thoughts?

CharacterController_2D.cs

 using UnityEngine;
 using System.Collections;
 
 public class CharacterController_2D : MonoBehaviour {
     public float f_speed = 5.0f;
     public SpriteManager[] loopSprites;
     private int in_Direction;
     // Use this for initialization
     void Start () {
         in_Direction = 1;
         for(int i = 0; i < loopSprites.Length; i++)
         {
             loopSprites[i].init();
         }
         Camera.main.transform.position = new Vector3(transform.position.x, transform.position.y, Camera.main.transform.position.z);
     }
     
     // Update is called once per frame
     void Update () {
     if(Input.GetButton("Horizontal"))
         {
             in_Direction = Input.GetAxis("Horizontal") < 0 ? -1 : 1;
             rigidbody.velocity = new Vector3((in_Direction * f_speed),rigidbody.velocity.y,0);
             loopSprites[0].resetFrame();
             loopSprites[1].UpdateAnimation(in_Direction,renderer.material);
         }
         else{
             loopSprites[1].resetFrame();
             loopSprites[0].UpdateAnimation(in_Direction,renderer.material);
         }
     }
     
     public void LateUpdate()
     {
         Camera.main.transform.position = new Vector3(transform.position.x, transform.position.y, Camera.main.transform.position.z);
     }
 }

SpriteManager.cs

 using UnityEngine;
 using System.Collections;

 [System.Serializable]
 public class SpriteManager : MonoBehaviour{
     public Texture2D spriteTexture;
     public int in_framePerSec;
     public int in_gridX;
     public int in_gridY;
     public float f_timePercent;
     private float f_nextTime;
     private float f_gridX;
     private float f_gridY;
     private int in_CurFrame;
     
     public void init(){
         f_timePercent = 1.0f / in_framePerSec;
         f_nextTime = f_timePercent;
         f_gridX = 1.0f/ in_gridX;
         f_gridY = 1.0f / in_gridY;
         in_CurFrame = 1;
     }
     public void UpdateAnimation(int _direction, Material _material){
         _material.mainTexture = spriteTexture;
         if(Time.time > f_nextTime)
         {
             f_nextTime = Time.time + f_timePercent;
             in_CurFrame++;
             if(in_CurFrame > in_framePerSec)
             {
                 in_CurFrame = 1;
             }
         }
         
         _material.mainTextureScale = new Vector2(_direction * f_gridX, f_gridY);
         int in_col = 0;
         if(in_gridY > 1)
         {
             in_col = (int)Mathf.Ceil (in_CurFrame / in_gridX);
         }
         
         if(_direction == 1)
         {
             _material.mainTextureOffset = new Vector2(((in_CurFrame) % in_gridX) * f_gridX, in_col * f_gridY);
         }
         else
         {
             _material.mainTextureOffset = new Vector2(((in_gridX + (in_CurFrame) % in_gridX)) * f_gridX, in_col * f_gridY);
             
         }
     }
     
     public void resetFrame(){
         in_CurFrame = 1;
     }
 }
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 Kryptos · Aug 22, 2012 at 09:23 AM 0
Share

You don't need System.Serializable for $$anonymous$$onoBehaviour-derived scripts.

Your class is either a script (extends $$anonymous$$onoBehaviour, no System.Serializable attribute) or a serialized class (don't extends $$anonymous$$onoBehaviour, with System.Serializable attribute). But you can't have both (it will compile but will not work in the inspector like you expect it to).

4 Replies

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

Answer by Muuskii · Aug 22, 2012 at 05:30 AM

Are there two classes in the same file? Which class is the file named after? Which one is supposed to show up? Which one is showing up currently?

Comment
Add comment · Show 3 · 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 dave321 · Aug 22, 2012 at 12:20 PM 0
Share

I modified it by putting it in two seperate files. I'm still having the same problem... I'll update the code to reflect this.

avatar image dave321 · Aug 22, 2012 at 12:32 PM 0
Share

The CharacterController_2D is attached to the player object in the scene. The CharacterController_2d variables are showing up, but in the array where it should have the variables for the class it just says "

avatar image Kryptos · Aug 22, 2012 at 12:37 PM 0
Share

You can only set references to one (or several) Sprite$$anonymous$$anager in the array. You cannot acces their variables that way.

You need to add one (or several) Sprite$$anonymous$$anager as component (script) on your GameObject aswell.

Alternative: don't make Sprite$$anonymous$$anager inherits $$anonymous$$onoBehaviour (just make a single class) and use System.Serializable attribute.

avatar image
0

Answer by SnowKrown_ · Aug 22, 2012 at 06:43 AM

 using System.Collections;
 
 
 public List<SpriteManager> sprite = new List<SpriteManager>();
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 Kryptos · Aug 22, 2012 at 09:24 AM 0
Share

This answer is not false by itself, but does not fix the issue here: arrays and list are serialized in the inspector.

avatar image
0

Answer by by0log1c · Aug 22, 2012 at 06:11 AM

@Muuskii nailed it. You cannot have two MonoBehaviour in the same file. Break these classes into two files and it'll work just fine.

One could not place a SpriteManager through the inspector and generating one through code create a script without any name - its not working right.

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 Kryptos · Aug 22, 2012 at 09:25 AM 0
Share

As a general rule: one class = one file.

avatar image
0

Answer by dave321 · Aug 22, 2012 at 01:53 PM

The problem was that I didn't realize that I have to apply the SpriteManager file to the array within Unity, after splitting it up into two files. I applied the file twice to the Player gameObject and then dragged the SpriteManager component in the inspector onto both items in the array. It now works as it should.

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

11 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

Related Questions

Multiple Cars not working 1 Answer

Distribute terrain in zones 3 Answers

Public Variables not displaying in the inspector 0 Answers

How to expose member variables to the inspector in C#? 1 Answer

Is there a way to extend the amount of values for inspector? 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