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 Xetros · Aug 30, 2015 at 03:56 PM · functionlightshooting

Variable goes into the negative even if I reset it when it goes below 0.

Hey guys,

I was adding a muzzle flash to my gun and found a weird problem, the light itself is just a point light. First of all, im using this function to time the muzzle flash so it only lights up when I fire my gun:

 function WaitForMuzzle()
 {
     if(muzzleTimer < 0)
     {
         muzzleFlash.enabled = false;
         muzzleTimer = 0.5;
     }
     
     else
     {
         muzzleTimer = muzzleTimer - 50.0 * Time.deltaTime;
     }
 }

I call this function at the input of the left mouse button just like I do for my shooting function. As you can see in my if statement i set muzzleFlash back to 0.5, the thing is that when I have my inspector open the muzzleTimer variable is sometimes still in the negative which results to the muzzle flash not lighting up when shooting. How can I prevent this from happening?

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
1

Answer by Dave-Carlile · Aug 30, 2015 at 03:59 PM

Pretend muzzleTimer = 0.1...

It's not less than 0 so the muzzleTimer < 0 condition is false, so your else gets executed.

That subtracts 50 * Time.deltaTime. At 60fps that will subtract 0.83 from 0.1, resulting in -0.73.

You can deal with this by doing the subtraction first, then doing the negative check...

 muzzleTimer -= 50 * Time.deltaTime;
 if (muzzleTimer < 0)
 {
   muzzleTimer = 0.5;
   muzzleFlash.enabled = false;
 }

Also, you may want to do muzzleTimer <= 0 instead of < 0, since your 0.5 seconds has elapsed if muzzleTimer is 0. You'll wait an extra frame if you're just doing < 0.

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 Xetros · Aug 30, 2015 at 04:51 PM 0
Share

I modified what you told me to do, but now the muzzle flash won't turn on at all. Why is this the case?

avatar image Dave-Carlile · Aug 30, 2015 at 05:15 PM 0
Share

You probably need to reduce the multiplier from 50 to something smaller. It's going to go negative immediately so it's probably disabling muzzleFlash in the same frame you're enabling it.

So tweak the 50 starting with something much smaller until you get the flash the way you want. Or you can set the timer to something higher than 0.5 so it takes a couple of frames.

For this sort of timer I usually just use Time.deltaTime by itself, then set my timer to the amount of time I want something to take...

 muzzleTimer -= Time.deltaTime;

 if (muzzleTimer  <= 0)
 {
    muzzleTimer = 0.5;
    muzzleFlash.enabled = false;
 }

This will take 0.5 seconds for the timer to get to

avatar image Xetros · Aug 30, 2015 at 05:32 PM 0
Share

Alright thanks, after some tweaking with your help I managed to get it to work properly now!

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

3 People are following this question.

avatar image avatar image avatar image

Related Questions

Error with unity shooting script: Monster Death Script Doesent Work 0 Answers

Tag calling is calling all my objects with the same tag 2 Answers

How can I delay 1 second this code? 3 Answers

How do i get a switch to turn on and off fluid flow? 0 Answers

LIST full itself with the last element after leaving a for loop 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