• 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 eitanwass · Apr 07, 2017 at 03:55 PM · movetowardsslopeclick to move

MoveTowards not working on a slope

Hello Human Beings,

I have a player that is suppose to go where I click on the map using MoveTowards. It does that but not on a slope. How do I fix that? The character has a rigidbody. No character controller.

Assigning point to go code:

 public GameObject player;
 
     private Vector3 pointToGo;
     
     void Update ()
     {
         if (player == null)
             return;
 
         if (Input.GetMouseButton(0))
         {
             Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition);
             RaycastHit hit;
             if (Physics.Raycast(ray, out hit, Mathf.Infinity))
             {
                 pointToGo = hit.point;
                 player.GetComponent<PlayerMovement>().pointToGo = this.pointToGo;
             }
         }
     }

Moving code:

 public float speed = 4;
     public Vector3 pointToGo;
 
     private Rigidbody rb;
     private Animator animator;
 
     private void Start()
     {
         rb = this.GetComponent<Rigidbody>();
         animator = this.GetComponent<Animator>();
     }
 
     void Update ()
     {
         if ( Vector3.Distance(this.transform.position, pointToGo) > 0.5f )
         {
             this.transform.position = Vector3.MoveTowards(this.transform.position, pointToGo, speed * Time.deltaTime);
             this.transform.LookAt(new Vector3(pointToGo.x,
                                             this.transform.position.y,
                                             pointToGo.z));
             rb.isKinematic = false;
             animator.SetBool("isIdle", false);
             animator.SetBool("isWalking", true);
         }
         else
         {
             animator.SetBool("isIdle", true);
             animator.SetBool("isWalking", false);
             rb.isKinematic = true;
         }
     }

Thanks in advance, Ethan

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

2 Replies

· Add your reply
  • Sort: 
avatar image
0

Answer by RobAnthem · Apr 07, 2017 at 08:08 PM

You don't need the character controller, I find it useless and write my own movement anyway.

Just use velocity. Something like this.

             rotationOverTIme = Quaternion.LookRotation(targetPosition - transform.position);
             transform.rotation = Quaternion.Slerp(transform.rotation, rotationOverTIme, turningSpeed * Time.deltaTime);
             if (Vector3.Distance(transform.position, targetPosition) > 0.1f)
             {
                 body.velocity = transform.forward * speed * Time.deltaTime;
             }

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 eitanwass · Apr 08, 2017 at 07:12 AM 0
Share

Doesn't really work... The character just move somewhere and if it ever reaches around the destination it would move in circles. The character would also stop responding to getting new pointToGo s

avatar image
0

Answer by FortisVenaliter · Apr 07, 2017 at 08:15 PM

Have you considered using the NavMeshAgent instead of the Rigidbody? That would handle it automatically, but it would only work with levels that can have their nav mesh pre-computed (i.e. not generated at runtime).

If that doesn't work, then the simple answer is to run a raycast from the center, straight down. Then you take the hit point, and adjust your Y-position accordingly.

Comment
Add comment · Show 2 · 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 eitanwass · Apr 08, 2017 at 06:35 AM 0
Share

I'm using a procedural generated infinite terrain at runtime so I can't use navagent unfortunately.

avatar image eitanwass · Apr 09, 2017 at 01:15 PM 0
Share

Tried your other solution and it doesn't work.

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

67 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

Related Questions

Player won't move to a certain location clicked by the mouse 0 Answers

Problem sliding down hills (WITH VIDEO) 1 Answer

Travel up and down slopes 0 Answers

Slope angle fix 0 Answers

How to rotate the Rigidbody based on the normal of the ground?? 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