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 Therian13 · Sep 07, 2014 at 03:48 AM · errormovementcharactercontroller

Character keeps moving in one direction on its own

Hello Everyone,

So I have a script that tells my character how to move around (forward, back, jump, crouch, etc.) I've been using the same script for months and haven't edited anything on it, but as of yesterday, my character started moving on its own towards a specific direction. (it doesn't matter which way I face, he keeps heading east).

I don't have any joysticks attached, I haven't downloaded anything, and there is absolutely no colliders on my character. If I push the shift key (to run) my characters move speed changes to running speed, although I am not pushing the movement keys.

I disabled the move script, and he stops moving. I placed a very simple move script on and it works just find (no moving on its own). I'm just trying to find out what is it on this script that is making the character think he is moving, and why is it doing it NOW after months of working perfectly fine.

Any help would be greatly appreciated!

Here is the script.

 var walkSpeed = 6.0;
 var runSpeed = 11.0;
 var crouchSpeed = 3.0;
  
 // If true, diagonal speed (when strafing + moving forward or back) can't exceed normal move speed; otherwise it's about 1.4 times faster
 var limitDiagonalSpeed = true;
  
 // If checked, the run key toggles between running and walking. Otherwise player runs if the key is held down and walks otherwise
 // There must be a button set up in the Input Manager called "Run"
 
 var enableRun = true;
 var enableCrouch = true;
  
 var jumpSpeed = 8.0;
 var gravity = 20.0;
  
 var enableFallingDamage = true;
 // Units that player can fall before a falling damage function is run. To disable, type "infinity" in the inspector
 var fallingDamageThreshold = 10.0;
 var fallingDamageMultiplier = 2;
  
 // If the player ends up on a slope which is at least the Slope Limit as set on the character controller, then he will slide down
 var slideWhenOverSlopeLimit = false;
  
 // If checked and the player is on an object tagged "Slide", he will slide down it regardless of the slope limit
 var slideOnTaggedObjects = false;
  
 var slideSpeed = 12.0;
  
 // If checked, then the player can change direction while in the air
 var airControl = false;
  
 // Small amounts of this results in bumping when walking down slopes, but large amounts results in falling too fast
 var antiBumpFactor = .75;
  
 // Player must be grounded for at least this many physics frames before being able to jump again; set to 0 to allow bunny hopping 
 var antiBunnyHopFactor = 1;
  
 private var moveDirection = Vector3.zero;
 private var grounded = false;
 private var controller : CharacterController;
 private var myTransform : Transform;
 private var speed : float;
 private var hit : RaycastHit;
 private var fallStartLevel : float;
 private var falling = false;
 private var slideLimit : float;
 private var rayDistance : float;
 private var contactPoint : Vector3;
 private var playerControl = false;
 private var jumpTimer : int;
 
 private var charHeight : float; //Initial height
  
 function Start () {
     controller = GetComponent(CharacterController);
     myTransform = transform;
     speed = walkSpeed;
     rayDistance = controller.height * .5 + controller.radius;
     slideLimit = controller.slopeLimit - .1;
     jumpTimer = antiBunnyHopFactor;
     oldPos = transform.position;
 }
  
 function FixedUpdate() {
     var inputX = Input.GetAxis("Horizontal");
     var inputY = Input.GetAxis("Vertical");
     // If both horizontal and vertical are used simultaneously, limit speed (if allowed), so the total doesn't exceed normal move speed
     var inputModifyFactor = (inputX != 0.0 && inputY != 0.0 && limitDiagonalSpeed)? .7071 : 1.0;
  
     if (grounded) {
         var sliding = false;
         // See if surface immediately below should be slid down. We use this normally rather than a ControllerColliderHit point,
         // because that interferes with step climbing amongst other annoyances
         if (Physics.Raycast(myTransform.position, -Vector3.up, hit, rayDistance)) {
             if (Vector3.Angle(hit.normal, Vector3.up) > slideLimit)
                 sliding = true;
         }
         // However, just raycasting straight down from the center can fail when on steep slopes
         // So if the above raycast didn't catch anything, raycast down from the stored ControllerColliderHit point instead
         else {
             Physics.Raycast(contactPoint + Vector3.up, -Vector3.up, hit);
             if (Vector3.Angle(hit.normal, Vector3.up) > slideLimit)
                 sliding = true;
         }
  
         // If we were falling, and we fell a vertical distance greater than the threshold, run a falling damage routine
         if (falling) {
             falling = false;
             if (myTransform.position.y < fallStartLevel - fallingDamageThreshold && enableFallingDamage == true)
                 ApplyFallingDamage (fallStartLevel - myTransform.position.y);
         }
  
         // If running is enabled, change to run speed when left shift is pressed:
         if (Input.GetKey(KeyCode.LeftShift) && enableRun == true)
         {
             speed = runSpeed;
         }
         // If crouching is enabled, change to crouch speed when "c" is pressed:
         else if (Input.GetKey("c") && enableCrouch == true)
         {
             speed = crouchSpeed;
         }
         // If nothing is pressed, use walkSpeed:
         else
         {
             speed = walkSpeed;
         }
  
         // If sliding (and it's allowed), or if we're on an object tagged "Slide", get a vector pointing down the slope we're on
         if ( (sliding && slideWhenOverSlopeLimit) || (slideOnTaggedObjects && hit.collider.tag == "Slide") ) {
             var hitNormal = hit.normal;
             moveDirection = Vector3(hitNormal.x, -hitNormal.y, hitNormal.z);
             Vector3.OrthoNormalize (hitNormal, moveDirection);
             moveDirection *= slideSpeed;
             playerControl = false;
         }
         // Otherwise recalculate moveDirection directly from axes, adding a bit of -y to avoid bumping down inclines
         else {
             moveDirection = Vector3(inputX * inputModifyFactor, -antiBumpFactor, inputY * inputModifyFactor);
             moveDirection = myTransform.TransformDirection(moveDirection) * speed;
             playerControl = true;
         }
  
         // Jump! But only if the jump button has been released and player has been grounded for a given number of frames
         if (!Input.GetButton("Jump"))
             jumpTimer++;
         else if (jumpTimer >= antiBunnyHopFactor) {
             moveDirection.y = jumpSpeed;
             jumpTimer = 0;
         }
     }
     else {
         // If we stepped over a cliff or something, set the height at which we started falling
         if (!falling) {
             falling = true;
             fallStartLevel = myTransform.position.y;
         }
  
         // If air control is allowed, check movement but don't touch the y component
         if (airControl && playerControl) {
             moveDirection.x = inputX * speed * inputModifyFactor;
             moveDirection.z = inputY * speed * inputModifyFactor;
             moveDirection = myTransform.TransformDirection(moveDirection);
         }
     }
  
     // Apply gravity
     moveDirection.y -= gravity * Time.deltaTime;
  
     // Move the controller, and set grounded true or false depending on whether we're standing on something
     grounded = (controller.Move(moveDirection * Time.deltaTime) & CollisionFlags.Below) != 0;
 }
 
 function Update ()
 {
 //    var h = charHeight;
 //    
 //    if (Input.GetKey("c") && enableCrouch == true)
 //    {
 //        h = charHeight*0.5;
 //    }
 //    
 //    var lastHeight = controller.height; //Stand up/crouch smoothly
 //    controller.height = Mathf.Lerp(controller.height, h, 5*Time.deltaTime);
 //    myTransform.position.y += (controller.height-lastHeight)/2; //Fix vertical position
 }
 
 // Store point that we're in contact with for use in FixedUpdate if needed
 function OnControllerColliderHit (hit : ControllerColliderHit) {
     contactPoint = hit.point;
 }
  
 // If falling damage occured, this is the place to do something about it. You can make the player
 // have hitpoints and remove some of them based on the distance fallen, add sound effects, etc.
 function ApplyFallingDamage (fallDistance : float) {
     gameObject.SendMessage("ApplyDammage", fallDistance*fallingDamageMultiplier);
     Debug.Log ("Ouch! Fell " + fallDistance + " units!");    
 }
  
 @script RequireComponent(CharacterController)

Comment
Add comment · Show 2
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 Therian13 · Sep 07, 2014 at 06:59 AM 0
Share

I'm not sure, but I think I narrowed the problem down some more.

It seems to be co$$anonymous$$g from Line 120-121. else { moveDirection = Vector3(inputX input$$anonymous$$odifyFactor, -antiBumpFactor, inputY input$$anonymous$$odifyFactor); moveDirection = myTransform.TransformDirection(moveDirection) * speed; playerControl = true;

But I still can't figure out why it thinks it should be moving all of a sudden...

avatar image FegGarcia · Nov 06, 2016 at 11:51 AM 0
Share

Fix? I have the same problem :c

3 Replies

· Add your reply
  • Sort: 
avatar image
1
Best Answer

Answer by Therian13 · Sep 07, 2014 at 07:05 AM

Alrighty! I figured it out!

I changed line 120-121 to be a tiny bit different.

instead of it saying :

 else {         moveDirection = Vector3(inputX * inputModifyFactor, -antiBumpFactor, inputY * inputModifyFactor);
             moveDirection = myTransform.TransformDirection(moveDirection) * speed;
             playerControl = true;
 

It now says:

 else
 {        moveDirection = Vector3(Input.GetAxis("Horizontal"), 0,
                                         Input.GetAxis("Vertical"));
                 moveDirection = transform.TransformDirection(moveDirection);
                 moveDirection *= speed;
 }
 

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
3

Answer by scb2002 · Oct 15, 2017 at 11:59 PM

I had this same problem. Turned out to be the USB Saitek Rudder Pedals I use for flight simulator causing a constant input and character movement. Once I disconnected the cable to the pedals the issue stopped.

Comment
Add comment · Show 3 · 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 TheChargent · Oct 26, 2020 at 11:22 AM 0
Share

Upvoted cause I've spent hours trying to find my random movement, and this was definitely the issue. For me it was X-56 throttle but my pedals also could affect it.

avatar image TheRandomGuy07 · Jul 22, 2021 at 04:56 PM 0
Share

Oh god.. Spend half an hour on this, with my version control saying no changes to the movement module but seeing continuous movement and jumps.

Seeing your comment, I remembered I had connected my controller to charge. I feel so bad.

avatar image unity_e5OumhD-6z2Ucg · Jul 29, 2021 at 06:49 AM 0
Share

Damn thanks, I had a book on my playstation controller next to me, wouldnt have figured it out without you <3

avatar image
0

Answer by R1P4R14N · Feb 02 at 03:49 AM

If anyone's reading this and none of the answers work/fit, there may also be an issue with the physics system causing your object to spin and cause friction on the ground, making it move just as described.

In my case, the problem was that the contact point of my objects and the ground were round. Putting a rectangle shaped collider on the bottom part of the object fixed the problem.

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

9 People are following this question.

avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image

Related Questions

The name 'Joystick' does not denote a valid type ('not found') 2 Answers

CharacterController unexpectedly moving up 0 Answers

Ragdoll player character jumping unexpectedly when moved 1 Answer

Input.GetAxis won't start working properly. 1 Answer

Expressions in statements must only be executed for their side-effects. 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