- Home /
 
SidescrollControl X and Y Axis Movement Problem
I've modified the SidescrollControl script provided from the Standard Assets (Mobile)to allow x axis movement and y axis movement for a 2D shooter game. However the script only allows up and down movement and right movement. I can't seem to move it to the left of the screen only Up, Down, and Right. One of the other problem I'm having is I can do both at a time if I want to move right while moving up I have to stop first.
 //////////////////////////////////////////////////////////////
 // SidescrollControl.js
 //
 // SidescrollControl creates a 2D control scheme where the left
 // pad is used to move the character, and the right pad is used
 // to make the character jump.
 //////////////////////////////////////////////////////////////
 
 #pragma strict
 
 @script RequireComponent( CharacterController )
 
 // This script must be attached to a GameObject that has a CharacterController
 var moveTouchPad : Joystick;
 var jumpTouchPad : Joystick;
 
 var forwardSpeed : float = 4;
 var backwardSpeed : float = 4;
 var jumpSpeed : float = 16;
 var inAirMultiplier : float = 0.25;                    // Limiter for ground speed while jumping
 
 private var thisTransform : Transform;
 private var character : CharacterController;
 private var velocity : Vector3;                        // Used for continuing momentum while in air
 private var canJump = true;
 
 function Start()
 {
     // Cache component lookup at startup instead of doing this every frame        
     thisTransform = GetComponent( Transform );
     character = GetComponent( CharacterController );    
 
     // Move the character to the correct start position in the level, if one exists
     var spawn = GameObject.Find( "PlayerSpawn" );
     if ( spawn )
         thisTransform.position = spawn.transform.position;
 }
 
 function OnEndGame()
 {
     // Disable joystick when the game ends    
     moveTouchPad.Disable();    
     jumpTouchPad.Disable();    
 
     // Don't allow any more control changes when the game ends
     this.enabled = false;
 }
 
 function Update()
 {
     var movement = Vector3.zero;
 
     // Apply movement from move joystick
 if ( moveTouchPad.position.y > moveTouchPad.position.x)
     {
         if (moveTouchPad.position.y > 0)
         {
             movement = Vector3.up * forwardSpeed * moveTouchPad.position.y;
         }
         else
         {
             movement = Vector3.up * backwardSpeed * moveTouchPad.position.y;
         }
     }
     else 
     {
         if (moveTouchPad.position.x > 0)
         {
             movement = Vector3.right * forwardSpeed * moveTouchPad.position.x;        
         }
         else
         {
             movement = Vector3.right * backwardSpeed * moveTouchPad.position.x;
         }
     }
         
     movement *= Time.deltaTime;
     
     // Actually move the character    
     character.Move( movement );
 }
 
              Answer by Khada · Aug 22, 2012 at 11:18 AM
 //Change:
 
     // Apply movement from move joystick
     if ( moveTouchPad.position.y > moveTouchPad.position.x)
     {
        if (moveTouchPad.position.y > 0)
        {
          movement = Vector3.up * forwardSpeed * moveTouchPad.position.y;
        }
        else
        {
          movement = Vector3.up * backwardSpeed * moveTouchPad.position.y;
        }
     }
     else 
     {
        if (moveTouchPad.position.x > 0)
        {
          movement = Vector3.right * forwardSpeed * moveTouchPad.position.x;     
        }
        else
        {
          movement = Vector3.right * backwardSpeed * moveTouchPad.position.x;
        }
     }
 
 //To:
 
     // Apply movement from move joystick
     if (moveTouchPad.position.y > 0)
     {
         movement += Vector3.up * forwardSpeed * moveTouchPad.position.y;
     }
     else
     {
         movement += Vector3.down * backwardSpeed * moveTouchPad.position.y;
     }
     if (moveTouchPad.position.x > 0)
     {
         movement += Vector3.right * forwardSpeed * moveTouchPad.position.x;     
     }
     else
     {
         movement += Vector3.left * backwardSpeed * moveTouchPad.position.x;
     }
 
               That should work
At first I couldn't get it to work but now I got the script working because there were only two errors in the script.
movement += Vector3.down & movement += Vector3.left
Should really be
movement += Vector3.up & movement += Vector3.right since "down" and "left" weren't in the Unity Script Reference.
Thank you though for helping me out with this one much appreciated!
You're welcome. Note that I moved the conditions around in my response so that you can move left+up etc. So you may want to look at it for that too.
Your answer
 
             Follow this Question
Related Questions
Rotating game object using UI Joystick 0 Answers
Joystick problems 1 Answer
Find distance within screen! 2 Answers
Moving 2D Sprite Player 0 Answers
Android Joystick for 2D Movement 1 Answer