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 /
  • Help Room /
avatar image
0
Question by JustJunuh · Jan 09, 2017 at 05:31 AM · c#scripting problemscriptingbasicsif-elselerping

How to tell if the code flow changed

Alright, so this is something I've never quite figured out how to do efficiently.

You could have:

 bool last;
 //true = was last in the if statement
 //false = was last in the else statement
 
 if (/*not important*/)
 {
        if (!last)
        //Special code
        last = true;
 
    //Normal Logic
 }
 else
 {
        if (last)
        //Special code
        last = false;
 
    //Normal Logic
 }

This is a technique that I've always used to circumvent this problem, but I was just wondering if there was a more efficient way of doing this.

The situation I'm dealing with now is I want to switch between two different camera positions and be able to tell WHEN it switches modes. If I know when it switched, I'll use some special code to lerp it to the correct position.

I'm sure I could use this method or something similar, but I just wanted to minimize my use of variables.

Thanks if anyone can help!

Comment
Add comment · Show 2
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 Dave29483 · Jan 09, 2017 at 08:08 AM 0
Share

The alternative is effectively a state machine. If you lookup a simple state machine example you can see how they can be easily used to represent any number of states and a clean way of handling transitions to said states. Also, having code run when you enter or leave those states.

Overkill for two states I suppose.

Just food for thought.

avatar image JustJunuh Dave29483 · Jan 09, 2017 at 03:28 PM 0
Share

Thanks so much. Doing a lot of research in that area now. I've always heard of that area of logic, but I never got its purpose and functionality until now. Definitely moving in the right direction now, thanks :)

2 Replies

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

Answer by JustJunuh · Jan 09, 2017 at 07:43 PM

Once again, I show just how noobish I really am to coding. Basically the solution I was looking for is found in FSM.

Anyone who wants to learn more can follow these links: http://gameprogrammingpatterns.com/state.html https://www.youtube.com/watch?v=hhByGZZbcOc

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
avatar image
0

Answer by UnityCoach · Jan 09, 2017 at 09:25 PM

If all you need is to know when a bool value changed, you can simply use a property (variable + accessor), like :

 private bool _state;
 public bool State
 {
     get { return _state; }
     set
     {
         if (value != _state) // is value changed
         {
             // do whatever based on old value
             _state = value; // assign new value to variable
             // do whatever based on new value
         }
     }
 }
Comment
Add comment · Show 2 · 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 JustJunuh · Jan 09, 2017 at 09:34 PM 0
Share

Interesting. I'll see what I can make of that. $$anonymous$$y whole question is pretty open ended and I was more asking for future techniques that I could use to improve my code. I'll definitely keep this one in the back of my $$anonymous$$d. Thanks :)

avatar image UnityCoach JustJunuh · Jan 09, 2017 at 09:46 PM 0
Share

Actually, it works with any type, you can even add an event in it, so that other classes can subscribe to this value change, like :

 public enum STATE {Initialising, Ready, Starting, Started, Running, Stopping, Stopped};
 
 public delegate void StateChange(STATE state) ;
 public event StateChange StateChanged;
 
 private STATE _state;
 public STATE State
 {
     get { return _state; }
     set
     {
         if (value != _state)
         {
             _state = value;
             if (StateChanged != null)
                 StateChanged(_state);
         }
     }
 }

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

305 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 avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image 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

Should I inherit from Monobehaviour if the use of my C# script is only to hold script references? 2 Answers

Interchangeable animations in a script? 0 Answers

OnCollisonEnter2D Not Firing after checking collider 1 Answer

Mathf.Lerp Time problems. 1 Answer

Performance peaks in ScriptRunBehaviourUpdate 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