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 MaxPower42 · Aug 30, 2015 at 07:28 AM · arrayinspectorvariablesrangesetters

Problem with variables and inspector

I'm new to C# and I need some help with this.

In a script, I need a public array of float values and I want the inspector to create sliders for them. So this is what I wrote:

[Range (-1f, 1f)] public float[] targetWeight;

It's working as it should. The problem is, I want to know when the values have been changed. Afaik, using a "setter" is the way to go here. So I tried this:

[Range (-1f, 1f)] public float[] targetWeight { set { OnValueChanged (); } get{ return targetWeight;} }

But then I get a compiler error "Range attribute is only valid on field declarations". Help please?

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 EvilTak · Aug 30, 2015 at 10:07 AM

First of all, the property you have made wouldn't work, i.e. nothing will be stored in the array because you need to have a backing field to make properties work this way. Second, properties don't show in the inspector. Third is just what the error says. You can't have the Range attribute on a property because it won't come up in the Inspector!

If you want to know when the values have been changed during gameplay, just do something like this:

 [SerializeField]
 private float[] mTargetWeight;
 
 public float[] targetWeight {
     get {
         return mTargetWeight;
     }
     set {
         mTargetWeight = value;
         OnValueChanged();
     }
 }

and access the array in scripts using the targetWeight property. If not, read on!

One solution (actually the only solution) to your problem can be to make a Custom Editor for your script. You can know more about how to do that here and here. In the OnInspectorGUI() method, you can do something like this to check whether the value has changed or not:

 //MyScript is your script's class name
 var myTarget = target as MyScript;
 foreach(var f in myTarget.targetWeight) {
     var prev = f;
     f = EditorGUILayout.Slider(f, -1, 1);
     if(prev != f) OnValueChanged();
 }
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

28 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

Related Questions

View script variables within an array of scripts in Inspector 1 Answer

Array with multiple variables in Inspector 1 Answer

Why does new GUIStyle() give "object reference not set to an instance of an object" error? 1 Answer

Access to components and their variables in Array. 0 Answers

Array not updating in 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