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
0
Question by Travis 2 · Nov 08, 2010 at 11:02 PM · if-statements

Distance sensor

I have made a collision sphere parented to my enemy so that if my players trigger enters the collision sphere then it moves and attacks. just something to make it more realistic so i have two scrips one for the enemy and one for the sphere, the one forthe sphere has a static variable set to false and when my players trigger enters it, it turns to true and another function the turns it back to false when the trigger exits. the thing im having trouble with is on the other script. i have it so the rest of the AI charecteristics work but i tried to make it

function Update () {
    if(ISDETECTED) {
        var rotate = Quaternion.LookRotation(LookAt.position-transform.position);
        transform.rotation = Quaternion.Slerp(transform.rotation, rotate, 
                                              Time.deltaTime * damp);
        transform.position += transform.forward * Mspeed * Time.deltaTime;
        var seconds : int = Time.time;
        var oddeven = (seconds %  2);
        if(oddeven) Shoot(seconds);
    }
}

i know everything but the if statement is correct how do i fix it

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 skovacs1 · Nov 08, 2010 at 11:47 PM

Not everything but the if statement is correct.

Every frame, if ISDETECTED (which is a terrible variable name), you create a look rotation to look along LookAt(which is an even worse variable name since it is also the name of a function)'s position-the current poisition with up along the world up vector and then slerp your rotation by Time.deltaTime * damp and move along forward.

Slerping from transform.rotation when you are changing transform.rotation by some non-incrementing value will create a smoothing at the end of the slerp.

Slerping by Time.deltaTime makes your slerp framerate dependent. If your frame rate gets really slow, your slerp will jump to look at the target and if it gets really fast, your slerp may barely move. If you are Slerping by a non-incrementing value, you should probably use a constant in stead so that your behaviour is at least consistent, although by slerping with a non-incrementing value, your rotation will never exactly reach the target rotation.

You then get the number of seconds that have passed cast to an int (which may round) and get whether the returned value is odd. If the amount of time is odd (by coercing an integer into a boolean), you call Shoot. For an entire second, every frame, that happens that second, you call Shoot. Is this what you want?

To fix it the calling of Shoot every frame for a whole second, you could include a boolean or time to track when last you shot and whether you should shoot again or add a yield statement to Shoot and then you could just drop the second calculation entirely.

There are a lot of ways to fix the things wrong with your script, but since you really don't describe which broken part of your script is causing you problems and in what way, it's really quite hard to give a specific answer.

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

No one has followed this question yet.

Related Questions

The name 'Joystick' does not denote a valid type ('not found') 2 Answers

Can someone help me fix my Javascript for Flickering Light? 6 Answers

Setting Scroll View Width GUILayout 1 Answer

Multiple Else Statments? 2 Answers

Material doesn't have a color property '_Color' 4 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