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
/*/
* 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 Move Buttons:
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
}
}
The Jump Button:
using UnityEngine;
using System.Collections;
public class JumpButton : TouchLogicV2
{
PlayerMovement player;
void Start()
{
player = FindObjectOfType<PlayerMovement>();
}
public override void OnTouchBegan()
{
player.Jump ();
}
}