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 Chocolade · Mar 14, 2018 at 03:08 AM · c#scripting problemscript.

How can I call a function once in Update according to a flag bool variable state false/true ?

 using System.Collections;
 using System.Collections.Generic;
 using UnityEngine;
  
 public class Waypoints : MonoBehaviour
 {
     // Adding selectable behaviour at the end of the path,
     // as requested from the comments.
     public enum PathCompleteBehaviour
     {
         Stop,
         Loop,
         Reverse,
         Random,
         PingPong
     }
     [Header("Path Behaviour")]
     public PathCompleteBehaviour pathBehaviour;
  
     [Space(5)]
  
     [Header("Waypoints")]
     public GameObject[] waypoints;
  
     [Space(5)]
  
     [Header("Instances")]
     public GameObject[] instancesToMove;
  
     [Space(5)]
  
     [Header("Speed")]
     public float constantSpeed;
     public float minRandomSpeed, maxRandomSpeed;
     public bool randomSpeed = false;
     private bool randoms = true;
  
     public bool go = false;
  
     // Store parallel arrays for our movement parameters.
     private float[] movementSpeeds;    // Randomized speed per object.
     private int[] nextWaypointIndices; // Destination per object.
  
     private void Start()
     {
         // Changing terminology to be more standard.
         // - a "prefab" is a source asset you want to copy
         // - an "instance" is a copy of it that's been spawned in the scene
         instancesToMove = GameObject.FindGameObjectsWithTag("InstanceToMove");
  
         movementSpeeds = new float[instancesToMove.Length];
         nextWaypointIndices = new int[instancesToMove.Length];
  
         RandomSpeed();
     }
  
     private void Update()
     {
         if (randomSpeed == true)
             randoms = true;
         RandomSpeed();
  
         if (go)
             WaypointsAI();
     }
  
     private void WaypointsAI()
     {
         // We want to iterate over the instances, not over the waypoints.
         for (int i = 0; i < instancesToMove.Length; i++)
         {
             // Check to see if we reached the last waypoint.
             // If so, stop / loop / turn around as needed.
             int waypointIndex = nextWaypointIndices[i];
             if (waypointIndex < 0 || waypointIndex >= waypoints.Length)
             {
                 switch (pathBehaviour)
                 {
                     case PathCompleteBehaviour.Stop:
                         // Leave it where it is and skip to the next instance.
                         continue;
                     case PathCompleteBehaviour.Loop:
                         // Wrap front to back / back to front.
                         waypointIndex = (waypointIndex + waypoints.Length) % waypoints.Length;
                         break;
                     case PathCompleteBehaviour.Reverse:
                         // Bounce back to the point before last.
                         waypointIndex += (movementSpeeds[i] > 0f) ? -2 : 2;
                         // Reverse direction.
                         movementSpeeds[i] *= -1f;
                         break;
                     case PathCompleteBehaviour.PingPong:
                         // Between two last waypoints.
                         waypointIndex = (waypointIndex) % waypointIndex + 1;
                         break;
                 }
                 nextWaypointIndices[i] = waypointIndex;
             }
  
  
             // Look up the waypoint we want to move toward next.
             Vector3 waypoint = waypoints[waypointIndex].transform.position;
  
             // Read this instance's speed,
             // to compute how far it should move in this frame.
             float travel = Mathf.Abs(movementSpeeds[i]) * Time.deltaTime;
  
             // Apply the motion.
             Vector3 position = instancesToMove[i].transform.position;
             position = Vector3.MoveTowards(position, waypoint, travel);
             instancesToMove[i].transform.position = position;
  
             // If we're within a configurable tolerance of the
             // destination waypoint, set our destination
             // to the next waypoint after it.
             if ((position - waypoint).sqrMagnitude < 0.1f)
             {
                 nextWaypointIndices[i] += (movementSpeeds[i] > 0f) ? 1 : -1;
             }
         }
     }
  
     private void RandomSpeed()
     {
         for (int i = 0; i < instancesToMove.Length; i++)
         {
             if (randomSpeed && randoms == true)
             {
                 movementSpeeds[i] = Random.Range(minRandomSpeed, maxRandomSpeed);
                 randoms = false;
             }
             else
             {
                 movementSpeeds[i] = constantSpeed;
             }
         }
     }
 }

The problem is with the RandomSpeed method in the Update. I want to use the boolean flag randomSpeed to tell the user when he is in random speed mode or constant speed.

But in the Update I did:

 if (randomSpeed == true)
             randoms = true;
         RandomSpeed();


I tried to use another boolean flag but it didn't help. Still if randomSpeed is true also randoms is true. I want that when I change randomSpeed to true keep in the inspector set to true but change the speed value/s in RandomSpeed only once.

Then if I will uncheck and change randomSpeed to false give all the movementSpeeds the constant speed value. And then if I change randomSpeed to true again give all the movementSpeeds random values but only once not every frame. Now it's giving the movementSpeeds new random values every frame.

I don't want to set randomSpeed to true and then to false. I want the user to know it's true so it's in random mode.

I want to change the state of the flag randomSpeed in real time while the game is running. So it must be in the Update I guess. Once I change the randomSpeed to true set random values but once in the method RandomSpeed if I will change the randomSpeed flag to false set in RandomSpeed method once to constant speed.

And again I don't want to change the randomSpeed state inside RandomSpeed method. I want the user to understand and know in what state he is now: Random or Constant. So the randomSpeed variable bool should be stay in the current state he is but the effect inside RandomSpeed method should be once !

So when the game is running and the user is looking in the inspector he see the randomSpeed for example all the time checked but in the code the effect inside RanomSpeed will be once.

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

3 Replies

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

Answer by Deadcow_ · Mar 14, 2018 at 06:31 AM

Okay, I didn't read all the code, but if I get it right - to toggle things in code and call according function only once:

 if (randomSpeed && !randomisedOnce) {
     randomisedOnce = true;
     RandomSpeed();
 }
 else if (!randomSpeed && randomisedOnce) { 
     randomisedOnce = false;
     RegularSpeed();
 }

randomSpeed is public variable in inspector, randomisedOnce is private bool. Both RandomSpeed() and RegularSpeed() will be called once when state is changed

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
1

Answer by DarkToadster · Mar 14, 2018 at 07:07 AM

In addition to Deadcow_'s Code.

You don't have to double check a boolean. Look at the code :

         bool condition = true;

         // Cleaner version
         if(condition) // if condition is true then CallFunc();
         {
             CallFunc();
             CallSecondFunc();
         }
         else // else condition  is false then call another func
         {
             CallAnotherFunc(); 
             condition = true;
         }


If you only want to do one thing in your if statement you dont even have to use these brackets :

     if (condition )
         CallFunc();
     else
         CallAnotherFunc();

Check Microsofts C# Reference for more information

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 vive_creative · Dec 14, 2020 at 11:45 PM

Why not use a counter something like int?

int counter; counter++; if(counter == 1) { call something once }

and reset counter upon calling the next function?

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 Deadcow_ · Dec 15, 2020 at 04:48 AM 0
Share

Why to use int if there is a bool ;)

avatar image vive_creative Deadcow_ · Dec 15, 2020 at 09:46 AM 0
Share

I would love it. But bool is ultimately nothing but 0 or 1 :)

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

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

Can someone please help me find out what wrong with my code. 0 Answers

Enabling & Disabling Script via On Click 1 Answer

How can I check if a object in the hierarchy have been destroyed using EditorWindow type script ? 1 Answer

Reverse memcpy for NativeArray? 0 Answers

The laser problems 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