Many of you have asked for the project files for this. I've made the project available in a unity package here: https://5162f57a653eade62cbf89f301530be765718446.googledrive.com/host/0B-lqJgA6nVdXTE9Ia2syc0NEMjg/
This Unity tutorial will show you how to make a Player move and jump with on-screen touch buttons for a mobile game.
Twitter: https://twitter.com/Devination3D
To connect your device to unity, download the unity remote app and follow these steps: http://answers.unity3d.com/questions/198853/unity-remote-for-android-not-working-solution.html
Time Breakdown:
0:28 - Setting up the player GameObject
2:18 - Starting the PlayerMovement script
4:25 - Move Function
6:42 - Setting up keyboard controls for Movement
7:40 - Explaination of InputManager (skip this section if you're already familiar with it)
8:57 - Jump Function
8:45 - Setting up keyboard controls for Jump
11:00 - GetButton vs GetButtonDown
11:45 - Defining up platform dependant code blocks with #if and #endif
14:25 - Checking if player isGrounded with LineCasting
19:20 - Demonstration of LineCasting
20:08 - Setting up Touch Buttons
21:31 - Setting up the Move Touch Button
26:44 - Setting up the Jump Touch Button
2:18 - Starting the PlayerMovement script
4:25 - Move Function
6:42 - Setting up keyboard controls for Movement
7:40 - Explaination of InputManager (skip this section if you're already familiar with it)
8:57 - Jump Function
8:45 - Setting up keyboard controls for Jump
11:00 - GetButton vs GetButtonDown
11:45 - Defining up platform dependant code blocks with #if and #endif
14:25 - Checking if player isGrounded with LineCasting
19:20 - Demonstration of LineCasting
20:08 - Setting up Touch Buttons
21:31 - Setting up the Move Touch Button
26:44 - Setting up the Jump Touch Button
28:05 - Demonstration on Touch Screen Android
The Move Buttons:
- /*/
- * Script by Devin Curry
- * www.Devination.com
- * www.youtube.com/user/curryboy001
- * Please like and subscribe if you found my tutorials helpful :D
- * Twitter: https://twitter.com/Devination3D
- /*/
- using UnityEngine;
- using System.Collections;
- public class PlayerMovement : MonoBehaviour
- {
- public float speed = 500f, jumpHeight = 500f;
- public LayerMask playerLayerMask;//In the inspector, select everything EXCEPT the "Player" layer
- Transform myTrans;
- Rigidbody2D myBody;
- Vector2 movement;//used as temp holder variable before applying to velocity
- bool isGrounded = true;
- void Start ()
- {
- myTrans = this.transform;
- myBody = this.rigidbody2D;
- }
- void Update ()
- {
- //Check if the player is grounded or not
- isGrounded = Physics2D.Linecast(myTrans.position,
- GameObject.Find(this.name+"/tag_ground").transform.position,
- playerLayerMask);
- //Just for visualization, not needed for gameplay
- Debug.DrawLine (myTrans.position,
- GameObject.Find(this.name+"/tag_ground").transform.position,
- Color.red);
- //Works for keyboards and joysticks
- #if !UNITY_ANDROID && !UNITY_IPHONE && !UNITY_BLACKBERRY && !UNITY_WINRT
- Move (Input.GetAxisRaw("Horizontal"));
- if (Input.GetButtonDown ("Jump"))
- Jump ();
- #endif
- }
- //
- //Separate Move and Jump so they can be called externally by TouchButtons
- //
- public void Move(float horizontal_input)
- {
- movement = myBody.velocity;
- if(isGrounded)//we can only move left and right if on the ground
- movement.x = horizontal_input * speed * Time.deltaTime;
- //Apply the movement to the player
- myBody.velocity = movement;
- }
- public void Jump()//we can only jump if on the ground
- {
- if(isGrounded)
- myBody.velocity += jumpHeight * Vector2.up * Time.deltaTime;
- }
- }
The Jump Button:
- using UnityEngine;
- using System.Collections;
- public class MoveButton : TouchLogicV2
- {
- [Range(-1,1)]
- public int moveDir = 1;//1=right;-1=left
- PlayerMovement player;
- void Start()
- {
- player = FindObjectOfType<PlayerMovement>();//This will find our player script, as long as there is only 1 GameObject with "PlayerMovement" on it
- }
- public override void OnTouchBegan()
- {
- //watch this touch for when it ends anywhere so we can slow down the player
- touch2Watch = currTouch;
- }
- public override void OnTouchMoved()
- {
- player.Move (moveDir);
- }
- public override void OnTouchStayed()
- {
- player.Move (moveDir);
- }
- public override void OnTouchEndedAnywhere()
- {
- //run this check so other touches ending don't cause player to slow down
- if(currTouch == touch2Watch)
- player.Move(0);//do avoid annoying drift after letting go of button
- }
- }
- using UnityEngine;
- using System.Collections;
- public class JumpButton : TouchLogicV2
- {
- PlayerMovement player;
- void Start()
- {
- player = FindObjectOfType<PlayerMovement>
(); } public override void OnTouchBegan() { player.Jump (); } }