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 /
avatar image
1
Question by TinyUtopia · Jul 08, 2010 at 02:03 PM · menubooleanonguiflicker

boolean flicker

I'm using a raycast detection to activate a boolean function in another script. This boolean then turns on or off a OnGUI screen. The problem that I'm having is when the state is true, the OnGUI flashes on/off like it's switching between true/false rapidly.

Is there a way that I can only call the function when the collision state changes, not on every frame?

From the collider script:

function Update()
{   
    var hit : RaycastHit;
    // check if we're colliding
    if(Physics.Raycast(transform.position, transform.forward, hit, speakarea))
    {
        // with a dog
        if(hit.collider.gameObject.tag == "dog")
        {
        otherScript = NPCObject;
        otherScript.ShowIntro();
        }
    }
    else{
        otherScript = NPCObject;
        otherScript.HideIntro();
        }
}

From the OnGUI script:

function ShowIntro() { showIntro = true; }

function HideIntro() { showIntro = false; }

function OnGUI() { if (showIntro) { GUI.Box (Rect (Screen.width .2 ,Screen.height .2,240,360), "");}

}

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
3
Best Answer

Answer by spinaljack · Jul 08, 2010 at 02:21 PM

You can try using OnTriggerStay() instead of ray casting to check if you're within range of the dog and attach a sphere collder to it.

If you only want the GUI to appear when you're facing the dog and you try a combination of rays and triggers so that if you are a) facing the dag and b) within the sphere collider then showIntro is true.

If you leave the trigger showIntro = false so that once the GUI is on it'll stay on until you walk away even if you turn the player around.

e.g.

function OnTriggerExit (other : Collider) {
   if(other.gameObject.CompareTag("dog")){
      HideIntro();
   }
}
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 TinyUtopia · Jul 08, 2010 at 03:31 PM

Solved this by doing like spinaljack said and added another boolean.

function OnTriggerStay () { insideTrigger = true; }

function OnTriggerExit (other : Collider) { if(other.gameObject.CompareTag("dog")){ insideTrigger = false; NPCObject.HideIntro(); } }

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 DFLY · Mar 15, 2014 at 05:55 AM

Hi TinyUtopia

I was searching for the same answer and came across your question. I have just solved it by using an intermediate boolean like this:

 private var touched: boolean;
 private var touching: boolean;
 
 function Update(){
 
         var ray = cam.ScreenPointToRay (Vector2 (Screen.width*0.5, Screen.height *0.5));
         var hit : RaycastHit;
 
             if (Physics.Raycast (ray, hit, 20) && hit.collider == yourTrigger  ) {
             
             rayTouching = true;
             
             }
 
         else {
             rayTouching = false;
             
             }
             
          if (rayTouching && !rayTouched){ 
             
             DoSomething();
             rayTouched = true; 
             
             }
             
         if (!rayTouching && rayTouched){
             
             DoSomethingElse();
             rayTouched = false;
 
                 }
 }

I know it's way later than you question. But other people with this same problem will find this useful.

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

1 Person is following this question.

avatar image

Related Questions

OnGUI Script Not Working With Boolean... 1 Answer

if statement will only execute once 1 Answer

If using a conditional-situational menu, such as a pop-up, must wait till next OnGUI? 2 Answers

Simple if condition in function not turning off 1 Answer

GUI Box appear when you are close to something? 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