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 BossDes · May 21, 2018 at 11:59 AM · rotationrandom.rangemathftransform.rotate

Calculating a randomized rotation of a 2D projectile to keep it inside the Y axis on-screen,

New to Unity, and rather rusty on my programming so I'm struggling with this calculation in particular.

Basically I'm programming a fancy pong, and what I want is when the ball hits one side, the ball is given a random rotation which will not hit the bottom/top of the screen and leave the play area. Whilst I have the rotation and behavior sorted as such, I cannot for the life of me stop it from occasionally choosing an angle causing it to go off screen. My x length is 30, and my y height is 14 (from -7 to 7, rather than starting from 0)

What I'm using is:

 public float rotationcontrolBall;

     rotationcontrolBall = Random.Range(Mathf.Rad2Deg * Mathf.Atan((-7 - TennisBall.transform.position.y) / 30), Mathf.Rad2Deg * Mathf.Atan((7 - TennisBall.transform.position.y) / 30));

I'm unsure if maybe I'm not calculating the difference between the Yposition and the edges of the screen, or I'm not using Mathf correctly, but it still seems happy as ever to launch itself slightly off-screen sometimes.
This is also how I'm controlling the rotation:

     if (rotationcontrolBall < 0)
     {
         TennisBall.transform.Rotate(0f, 0f, 360 + rotationcontrolBall);
     }
     else
     {
         TennisBall.transform.Rotate(0f, 0f, rotationcontrolBall);
     }

I'd be very grateful if anyone can tell my why I'm being absolutely silly here. ,

Comment
Add comment · Show 1
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 TUTOCF · May 21, 2018 at 01:09 PM 0
Share

Hello, When you try this code, what do you get?

1 Reply

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

Answer by Scribe · May 21, 2018 at 06:12 PM

I can see three things that might be wrong:

  1. I have not necessarily interpreted the layout of your game correctly, but assuming you are moving the tennis ball along it's local 'up' vector, then your calculations give the impression that you expect a zero degree rotation to point the local 'up' vector along the global 'right' vector. You could solve this in a couple of ways, adding 90 degrees to your current calculation might be the simplest since you are working in 2D.


  2. You have not taken into account the side that the ball is on, so assuming you have a correct rotation on the right hand side of the map, then when you are on the left hand side of the map, all of your rotations will point out of the map as they will be off by 180 degrees.


  3. transform.Rotate rotates the transform from it's current rotation as opposed to setting the rotation directly, as you seem to be calculating your desired rotation rather than your desired rotation change this will cause incorrect behaviour over time. You can set the rotation directly using transform.rotation = Quaternion.Euler(0, 0, rotationcontrolBall);

Hope that helps!

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

172 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

Related Questions

Break a local rotation value into vector2 components 0 Answers

How can I properly tilt an object about two axes, while preventing the other axis from rotating? 1 Answer

Object rotate and slowly stop to toward 1 Answer

Set Maximum Z Rotation On 2D Player Object? 0 Answers

Player look at mouse via rotation on z axis 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