• 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 Linezokode · May 15, 2022 at 06:48 PM · unity 5collisionrigidbodyraycastunity 2d

How do I change Raycast's direction based on movement input?

Hey everyone!

I'm making a game where when the player presses one of the WASD keys, the character moves in the direction associated with the key until it collides with an object in front. (A bit like Tomb of The Mask)

I got the movement part down, but my problem is, I want to limit the player, to only be able to move w$$anonymous$$le stationary (when he $$anonymous$$t an object in front of it). I was t$$anonymous$$nking a Ray-cast is probably the best way to go here, but I don't know how to set it up so it's direction changes depending on w$$anonymous$$ch key was pressed.

I know the "isMoving" t$$anonymous$$ng is kinda doing that, but it's working a bit choppy and it creates a little wait time between 2 inputs bc the velocity of the object doesn't go down to 0 instantly

Here's my code so far:

 using UnityEngine;
 
 public class PlayerController : MonoBehaviour
 {
     // PRIVATE GET COMPONENTS
     Collider2D _boxCollider2d;
     Rigidbody2D _rigidBody;
 
 
     // PUBLIC COMPONENTS
 
     // PUBLIC VARIABLES
     public float moveSpeed = 200;
 
     // PRIVATE VARIABLES
     Vector2 movement;
 
     bool isMoving;
 
     // BUILT IN FUNCTIONS
     //###################################################################//
     private void Start()
     {
         _boxCollider2d = GetComponent<Collider2D>();
         _rigidBody = GetComponent<Rigidbody2D>();
     }
 
     private void Update()
     {
         CheckMovement();
     }
 
     private void FixedUpdate()
     {
         PlayerMovement();
     }
 
     private void OnCollisionEnter2D(Collision2D other)
     {
         _rigidBody.velocity = new Vector2(0, 0);
     }
 
     // CUSTOM FUNCTIONS //
     //###################################################################//
     void PlayerMovement()
     {
         bool leftDir = Input.GetKeyDown(KeyCode.A);
         bool rightDir = Input.GetKeyDown(KeyCode.D);
         bool upDir = Input.GetKeyDown(KeyCode.W);
         bool downDir = Input.GetKeyDown(KeyCode.S);
 
 
         if (leftDir && !isMoving)
         {
             _rigidBody.velocity = Vector2.left * moveSpeed * Time.deltaTime;
         }
         if (rightDir && !isMoving)
         {
             _rigidBody.velocity = Vector2.right * moveSpeed * Time.deltaTime;
         }
         if (upDir && !isMoving)
         {
             _rigidBody.velocity = Vector2.up * moveSpeed * Time.deltaTime;
         }
         if (downDir && !isMoving)
         {
             _rigidBody.velocity = Vector2.down * moveSpeed * Time.deltaTime;
         }
     }
 
     void CheckMovement()
     {
         movement = new Vector2(Input.GetAxis("Horizontal"),     
                                Input.GetAxis("Vertical"));
 
         if (_rigidBody.velocity.x != 0 || _rigidBody.velocity.y != 0)
         {
             isMoving = true;
         }
         else
         {
             isMoving = false;
         }
     }
 }
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 jackmw94 · May 15, 2022 at 10:29 PM

I t$$anonymous$$nk you should look at using a state mac$$anonymous$$ne here. T$$anonymous$$s is a system that has a limited number of 'states', the system will be in one state of these states at a given time. Assuming I'm understanding the question correctly, it seems your player will be in one of two states; waiting to move or moving. When your player is moving then they will not receive input, their position (or velocity, as you're using) would be updated and they'll transition back to the waiting state when a collision is detected. When they are waiting to move then they'll monitor input w$$anonymous$$ch would transition them to their moving state.

By using these instead of having various flags that are set/unset to determine the state, you'll make the code much cleaner and you'll thank yourself when it comes to debugging. If you find that you have an issue with your moving state, you'll know that the problem can only exist in your short move-state update function instead of anywhere wit$$anonymous$$n the class! Also it will mean that you have a very clear distinction about what your player should be doing at any given time.

Unity have a tutorial on finite state mac$$anonymous$$nes here:
https://learn.unity.com/tutorial/finite-state-mac$$anonymous$$nes-1

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.

Welcome to Unity Answers

If you’re new to Unity Answers, please check our User Guide to help you navigate through our website and refer to our FAQ for more information.

Before posting, make sure to check out our Knowledge Base for commonly asked Unity questions.

Check our Moderator Guidelines if you’re a new moderator and want to work together in an effort to improve Unity Answers and support our users.

Follow this Question

Answers Answers and Comments

368 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 avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image 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

RigidBody stuck on wall when jumped against 7 Answers

Export Animations From Unity3D into Blender? 1 Answer

2D Rigidbody Drag with Mouse 0 Answers

Move object with mouse without passing through colliders 0 Answers

Unity 5: No collision with other objects after an animation? 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