2D platformer touch controlls

Hello, I am really new at this and I’m following a tutorial to make a 2D platformer. For anyone wondering: https://unity3d.com/learn/tutorials/projects/mini-projects/creating-basic-platformer-game .

So I changed some stuff, I made the character run on his own instead of using the arrow keys as the tutorial was instructing. The game works fine on PC using the space to just jump.

What i need is some help adding a single touch button, basically, so that I can play the game on a phone.
I only need the Jump to work. How do I link the Jump function to a button or even better to the whole screen of the game ?

Also something extra, I’d like to know how to save a high score of the game after losing.

Here is the code I’m using for the controls (so someone can help with the Jump - touch thing):

using UnityEngine;
using System.Collections;

public class SimplePlatformController : MonoBehaviour {

[HideInInspector] public bool facingRight = true;
[HideInInspector] public bool jump = false;
public float moveForce = 365f;
public float maxSpeed = 5f;
public float jumpForce = 1000f;
public Transform groundCheck;

private bool grounded = false;
private Animator anim;
private Rigidbody2D rb2d;

// Use this for initialization
void Awake ()
{
anim = GetComponent();
rb2d = GetComponent();
}

// Update is called once per frame
void Update ()
{
grounded = Physics2D.Linecast(transform.position, groundCheck.position, 1 << LayerMask.NameToLayer(“Ground”));

if (Input.GetButtonDown(“Jump”) && grounded)
{
jump = true;
}
}

void FixedUpdate()
{
float h = Input.GetAxis(“Horizontal”);

anim.SetFloat(“Speed”, Mathf.Abs(h));

if (h * rb2d.velocity.x < maxSpeed)
rb2d.AddForce(Vector2.right * h * moveForce);

if (Mathf.Abs (rb2d.velocity.x) > maxSpeed)
rb2d.velocity = new Vector2(Mathf.Sign (rb2d.velocity.x) * maxSpeed, rb2d.velocity.y);

if (h > 0 && !facingRight)
Flip ();
else if (h < 0 && facingRight)
Flip ();

if (jump)
{
anim.SetTrigger(“Jump”);
rb2d.AddForce(new Vector2(0f, jumpForce));
jump = false;
}
}

void Flip()
{
facingRight = !facingRight;
Vector3 theScale = transform.localScale;
theScale.x *= -1;
transform.localScale = theScale;
}
}

And here is the code I’m using to count the score, so maybe someone can suggest how to keep track of the highscore even after restarting the game :

using UnityEngine;
using System.Collections;
using UnityEngine.UI;

public class Score : MonoBehaviour
{
Text text;
private SimplePlatformController player;

// Use this for initialization
void Start()
{
text = GetComponent();
player = FindObjectOfType();
}

void Update()
{
text.text = "Coins: " + player.coins;

}
}

Coins are counted in the corner of the game using UI → text

Any kind of help is highly appreciated. Keep in mind I’m a complete newbie at this so I’m sorry if I explained something wrongly.

Hi Thomaidis,

How far have you got with this? did you find a solution?

I have what you need in My Gauntlet clone I’m building, I could but together a little Demo for you to use(and learn from), and others, if you like?

Please use Code Tags when posting snippets of code.

To detect a touch on the whole screen, you can do this:

if(Input.touchCount > 0 && Input.GetTouch(0).phase == TouchPhase.Began) {
    // they just touched the screen somewhere
}

If you just want to save data on the local device, not over a network, you can use PlayerPrefs.

Example:

// when the number of coins changes, or on game end
PlayerPrefs.SetInt("PlayerCoins", player.coins);

// when you want to retrieve the data
int previousCoins = PlayerPrefs.GetInt("PlayerCoins");