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 DanyulART · Aug 17, 2014 at 10:26 PM · movementenemy

Scripting enemy path in 2D platformer.

I have coded it so that the enemy turns around when it hits the WallLeft, but for some reason it won't turn around when it hits WallRight. This .GIF shows the situation. http://i.imgur.com/ayTzKHv.gif

     using UnityEngine;
 
 /// <summary>
 /// Simply moves the current game object
 /// </summary>
 public class MoveScript : MonoBehaviour
 {
     // 1 - Designer variables
     
     /// <summary>
     /// Object speed
     /// </summary>
     public Vector2 speed = new Vector2(5, 5);
     bool touchingWallLeft = false;
     bool touchingWallRight = false;
     public Transform wallCheckLeft;
     public Transform wallCheckRight;
     float wallTouchRadius = 0.5f;
     public LayerMask whatIsWallLeft;
     public LayerMask whatIsWallRight;
     
     /// <summary>
     /// Moving direction
     /// </summary>
     public Vector2 direction = new Vector2(-1, 0);
     
     public Vector2 movement;
     
     void Update()
     {
 
     }
     
     void FixedUpdate()
     {
         // 2 - Movement
         movement = new Vector2(
             speed.x * direction.x,
             speed.y * direction.y);
 
         // Apply movement to the rigidbody
         rigidbody2D.velocity = movement;
 
         touchingWallLeft = Physics2D.OverlapCircle(wallCheckLeft.position, wallTouchRadius, whatIsWallLeft);
         touchingWallRight = Physics2D.OverlapCircle(wallCheckRight.position, wallTouchRadius, whatIsWallRight);
 
         if (touchingWallLeft)
         {
 
 
 
                 speed.x = -5;
                 direction.x = -1;
             
             
             // 2 - Movement
 
     }
         else if (touchingWallRight) {
             
 
 
                 speed.x = 5;
                 direction.x = 1;
             
                         
              
                 }
 }
 
 }

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
Best Answer

Answer by DESTRUKTORR · Aug 17, 2014 at 10:54 PM

You are multiplying -5 by -1 when he's touching WallLeft (when he needs to start moving right), and then multiplying 5 by 1 when he is touching WallRight (when he needs to start moving left).

  • = 5 1 = 5. The negatives in -5 -1 cancel, thus giving the same number as 5 * 1. Both result in him moving the same direction. You shouldn't change speed out, you should swap direction when the event occurs.

In stead, you should only change direction's value.

When he should move right, make direction.x 1.

When he should move left, make direction.x -1.

Speed should never have to change.

Comment
Add comment · Show 1 · 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 Eroosio · Feb 06, 2015 at 11:00 PM 0
Share

I am working on a similar scirpt, which isn't working. Should both walls, right and left, be on the same layer?

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

Multiple Cars not working 1 Answer

How do I create WASD controls for a fps? 3 Answers

How to make enemies stop a certain distance away? 2 Answers

I'm trying to make AI that walks (and faces) towards a waypoint 1 Answer

Implement moveSpeed to this object script? 1 Answer


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