Wayback Machinekoobas.hobune.stream
May JUN Jul
Previous capture 14 Next capture
2021 2022 2023
2 captures
12 Jun 22 - 14 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 mswank · Apr 07, 2018 at 06:17 PM · camera-movementplayer movementthird person controllergetaxisrelative movement

Simple Third Person Camera-Relative Movement with WASD - kind of working but need a fix

Hi, So I am trying to get my player to move by adding a force to its rigidbody. I have a third person camera script that allows me to freely move the camera around the player using the mouse. In my player movement script below, I need the movement of the player to correspond with the direction the camera is facing. So far, the player moves in the direction the camera is facing, but I cannot control it with WASD. I cannot find a way to implement GetAxis into the movement calculation. Any help is appreciated :)

using System; using System.Collections.Generic; using UnityEngine;

 public class PlayerController : MonoBehaviour {
 
     public float moveSpeed = 12;
 
     Rigidbody rigidBody;
     float moveX;
     float moveZ;
 
     bool isTouching = false;
     public float jumpPower;
 
     public Transform _camera;
 
     void Start () {
         rigidBody = this.GetComponent<Rigidbody> ();
 
         if (rigidBody == null)
             Debug.LogError ("RigidBody could not be found.");
     }
 
     void Update () {
         moveX = Input.GetAxis ("Horizontal");
         moveZ = Input.GetAxis ("Vertical");
     }
 
     void FixedUpdate () {
 
         Vector3 cameraDirection = transform.position - _camera.position; //direction to move in is equal to the Vector3 between camera and player (direction camera is facing)
         cameraDirection.y = 0.0f; //zeros the vertical aspect of movement direction to stay in the x-z plane
         if (rigidBody != null) {
             rigidBody.AddForce (cameraDirection * moveSpeed, ForceMode.Acceleration);
         }
         if (isTouching && Input.GetKeyDown("space")) { //jump
             rigidBody.AddForce(new Vector3(0, jumpPower, 0) * 50, ForceMode.Acceleration);
         }
     }
 
     private void OnCollisionEnter(Collision collision) {
         isTouching = true;
     }
     private void OnCollisionExit(Collision collision) {
         isTouching = 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

2 Replies

· Add your reply
  • Sort: 
avatar image
0

Answer by Lazdude17 · Apr 07, 2018 at 06:35 PM

You never checked for WASD input. You assigned moveX and moveZ but never used them.

  public class PlayerController : MonoBehaviour {
  
      public float moveSpeed = 12;
  
      Rigidbody rigidBody;
      float moveX;
      float moveZ;
  
      bool isTouching = false;
      public float jumpPower;
  
      public Transform _camera;
  
      void Start () {
          rigidBody = this.GetComponent<Rigidbody> ();
  
          if (rigidBody == null)
              Debug.LogError ("RigidBody could not be found.");
      }
  
      void Update () {
          public float moveX = Input.GetAxis ("Horizontal");
          public float moveZ = Input.GetAxis ("Vertical");
 
  
          public Vector3 moveVector = new Vector3(transform.position.x*moveX, 0f, (transform.position.z-camera.transform.position.z)*moveZ);
      }
  
      void FixedUpdate () {
 
          if (rigidBody != null) {
              rigidBody.AddForce (moveVector * moveSpeed, ForceMode.Acceleration);
          }
          if (isTouching && Input.GetKeyDown("space")) { //jump
              rigidBody.AddForce(new Vector3(0, jumpPower, 0) * 50, ForceMode.Acceleration);
          }
      }
  
      private void OnCollisionEnter(Collision collision) {
          isTouching = true;
      }
      private void OnCollisionExit(Collision collision) {
          isTouching = false;
      }
  }
  
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
avatar image
0

Answer by MrScottyPieey · Aug 22, 2019 at 12:43 AM

Thanks it works for me!

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

82 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

Related Questions

need help with player movement for 3rd person project 0 Answers

Laggy FPS Camera (attached to rigid body player), I have tried everything. Unity wizards need to be summoned for this one. 0 Answers

I'm a bit new but when my camera rotates with the player model to look around it kind of jitters 0 Answers

Make a ridgid body move in the direction the camera is facing 0 Answers

How can I fix the arm movement with the camera. 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