Wayback Machinekoobas.hobune.stream
May JUN Jul
Previous capture 12 Next capture
2021 2022 2023
1 capture
12 Jun 22 - 12 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 /
  • Help Room /
avatar image
0
Question by Thomaidis · Jun 14, 2016 at 07:08 PM · jumpingtouch controlscounter2d platformerhighscores

2D platformer Touch button?

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 key 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<Animator>();
     rb2d = GetComponent<Rigidbody2D>();
 }
 
 // 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<Text>();
     player = FindObjectOfType<SimplePlatformController>();
 }

 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.

Comment
Add comment
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

1 Reply

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

Answer by Mmmpies · Jun 14, 2016 at 07:35 PM

So you're already using the UI then. Just add a button to it and either delete the Image and text components or add a Canvas Group to is and set its Alpha to 0.

Create a public function to set jump to true, on the button in the inspector click + on the OnClick section and a slot appears, drag the object with your script on it onto the slot and from the drop down to the right select SimplePlatformController -> YourJumpFunction.

Simple as that with the UI, will work with mouse input on a PC or touch input on a phone.

You might have to set jump to false if true and not grounded to prevent a jump triggering when you land but it should be pretty easy to get working.

Comment
Add comment · Show 5 · 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 Thomaidis · Jun 14, 2016 at 10:34 PM 0
Share

@mmmpies , Thanks for your reply. I did what you suggested and now I'm in a weird zone.

I created :

 public void Jump()
 {
    
    if (Input.GetButtonDown("Jump") && grounded)
     {
         jump = true;
     }
 }

in the SimplePlatformController, and added the screept to an empty Game Object that I created under Canvas, and then dragged that Game Object in the event trigger-> pointer down of the "UI button" for Jumping. Then selected the function Jump. The game now runs but auto pauses immediately and gives me an error saying "The variable groundCheck of SimplePlatformController has not been assigned"

I honestly don't know how to fix this (complete newbie as i mentioned before). But I find it weird that somehow groundCheck got affected from adding the function Jump. Even pausing the game instantly.

Am I missing something? Is there something considered obvious that I should've done?

thanks for your time, really hope you help me figure this out.

avatar image Mmmpies Thomaidis · Jun 15, 2016 at 06:53 AM 1
Share

I'm guessing your script was already attached to (probably) your player. You don't need to attach it again just drag on the player to the empty slot if that's what had your script on already.

You also don't need to check for input in jump you just need to set jump to true.

avatar image Thomaidis Mmmpies · Jun 15, 2016 at 03:10 PM 0
Share

Thanks again for your reply, @mmmpies

Did what you said, added the player as a whole in the empty slot and then selected the Jump function. It now works but it ignores the ground check so I'm getting infinite jumps while in the air. Adding an if statement in the void like "if Jump && grounded { jump }" where grounded = Physics2D.Linecast(transform.position, groundCheck.position, 1 << Layer$$anonymous$$ask.NameToLayer("Ground")); , it breaks the touch button.

What I need is for the groundCheck to work so that there's only 1 Jump available until the character touches the ground.

Show more comments

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

59 People are following this question.

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

Related Questions

Touch control swipe up to jump 1 Answer

After swiping down, I want player to slide once, instead of infinitely looping his animation, script attached below 0 Answers

How do I add ground tolerance and ledge grabbing to Sebastian Lague's Unity 5 2D Controller? 0 Answers

Pressing Vs Jumping 1 Answer

2d Platformer double jump wont work 2 Answers


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