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 L4ZZA · Aug 13, 2020 at 03:43 PM · 2dinputmath

New Input system mouse returns wrong values

I've been trying to use the new input system to allow both mouse and game-pad to control where thruster is located around another object (Blaster game object) based on the direction to a target rotating around a pivot (Similar to this but instead of rotating in object space it should rotate in world space around a point: rotating joystick )

It all works fine when as target I use another game object's in the world the rotation works perfectly (see below) https://youtu.be/jzZpOynPUZY

but when I switch to use the mouse position as the target a nasty glitch happens when the mouse is around 45° from the main pivot object (see below) https://youtu.be/Sxip_k23GEU

I can't say it only happens when cursor is at 45° as sometimes it also happens just around 85° (so I would constrain this problem to the first quadrant)

This is how I achieve this, but I can't seem to find the issue with my code as I have confirmed the raw values received by the mouse are incorrect at times.

 #define INPUT
 
 using UnityEngine;
 using UnityEngine.InputSystem;
 
 
 #if INPUT
 #else
 [ExecuteInEditMode]
 #endif
 public class BlasterController : MonoBehaviour
 {
     public Transform pivot;
     public Transform target;
     public float radius = 1.5f;
     public LineRenderer lineRenderer;
 
     Vector2 aimDirection;
     Vector2 previousAimDirection;
     // Unity MonoBehaviors
     private void Awake()
     {
         _controls = new InputMaster();
         _controls.Gameplay.Aim.performed += ctx => aimDirection = ctx.ReadValue<Vector2>();
         //_controls.Gameplay.Aim.canceled += ctx => aimDirection = Vector2.zero;
 
     }
 
     private void OnEnable()
     {
         _controls.Enable();
     }
 
     private void OnDisable()
     {
         _controls.Disable();
     }
 
     // Update is called once per frame
     void Update()
     {
 
         Debug.Log($"Aim direction [{aimDirection.x},{aimDirection.y}]");
 #if INPUT
         if (aimDirection.x > 0f && aimDirection.y > 0f)
         {
             var gamepad = Gamepad.current;
             var mouse = Mouse.current;
            
             if (gamepad != null)
             {
                 aimDirection.Normalize();
             }
             else if (mouse != null)
             {
                 Vector3 screenSpaceMousePos = new Vector3(aimDirection.x, aimDirection.y, -Camera.main.transform.position.z);
                 Vector3 worldSpaceMousePos = Camera.main.ScreenToWorldPoint(screenSpaceMousePos);
                 Vector2 mousePos = new Vector2(worldSpaceMousePos.x, worldSpaceMousePos.y);
                 Vector2 pivotPos = new Vector2(pivot.position.x, pivot.position.y);
                 aimDirection = mousePos - pivotPos;
                 aimDirection.Normalize();
             }
 #else
         Vector2 targetPos = new Vector2(target.position.x, target.position.y);
         Vector2 pivotPos = new Vector2(pivot.position.x, pivot.position.y);
         aimDirection = targetPos - pivotPos;
         aimDirection.Normalize();
 #endif
 
         var inverseOrbit = aimDirection * -radius;
             transform.position = inverseOrbit;
 
             if (lineRenderer && lineRenderer.enabled)
             {
                 lineRenderer.positionCount = 2;
                 lineRenderer.startWidth = 0.3f;
                 lineRenderer.endWidth = 0.3f;
                 lineRenderer.SetPosition(0, pivot.position);
                 lineRenderer.SetPosition(1, inverseOrbit);
             }
             else
                 Debug.LogError("noLineRendererFound");
 #if INPUT
         }
         else
         {
             Debug.LogError($"the aim direction goes negative!! [{aimDirection.x},{aimDirection.y}]");
             Debug.LogError($"Previously was [{previousAimDirection.x},{previousAimDirection.y}]");
         }
         previousAimDirection = aimDirection;
 #endif
     }
 
     private PlayerInput _playerInput;
     private InputMaster _controls;
 
 }
 

Has anyone got any idea why this is 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

0 Replies

· Add your reply
  • Sort: 

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

306 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

Related Questions

Input.GetButton not working 1 Answer

How do you detect if two specific objects are touching each other without collision. 3 Answers

2D Top-Down Movement: Transform.up and right don't change 2 Answers

Drawing projectile trajectory 5 Answers

How can I stop the player movement from being too fast while moving diagonally in my 2D game? 2 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