When applying a force to an object on Touch, how do I add a *cooldown* to it?
My first serious attempt at a mobile game.
You have balls that fall and you have to keep them from reaching the bottom for as long as possible by tapping them.
I've come up with this:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class bounceController : MonoBehaviour {
public Rigidbody2D body;
public Camera cam;
void Awake() {
Debug.Log(body.transform.localScale);
if (cam == null) {
cam = Camera.main;
}
}
void FixedUpdate() {
if(Input.touchCount > 0) {
Touch touch = Input.GetTouch(0);
if (IsInBounds(touch.position)) {
Jump();
SidewaysForce();
}
}
}
void SidewaysForce() {
if (Random.Range(0, 2) > 0) {
body.AddForce(new Vector2(0.5f, 0.0f), ForceMode2D.Impulse);
} else {
body.AddForce(new Vector2(-0.5f, 0.0f), ForceMode2D.Impulse);
}
}
void Jump() {
body.AddForce(new Vector2(0f, 1f), ForceMode2D.Impulse);
}
private bool IsInBounds(Vector2 touchPos) {
Vector3 targetTouchPos = cam.ScreenToWorldPoint(new Vector3(touchPos.x, touchPos.y, 0.0f));
if(targetTouchPos.x <= body.position.x + 2f && targetTouchPos.x >= body.position.x - 2f) {
Debug.Log("x is true");
if (targetTouchPos.y <= body.position.y + 2f && targetTouchPos.y >= body.position.y - 2f) {
Debug.Log("all is true");
return true;
}
}
return false;
}
}
Which works except that if I keep my finger on the ball it applies the force a bunch of times very quickly and it goes flying off the screen.
Answer by R1incewind · Feb 20, 2017 at 04:13 PM
I posted on a different site that doesnt have you waiting over 24H for moderation to approve your question and got an answer, Ill leave it here for anyone that might come across this in the future. (btw your solution seems pretty good, might work aswell).
Answer by $$anonymous$$ · Feb 20, 2017 at 05:14 AM
Try replacing lines 23 to 28 with:
for (int i = 0; i < Input.touchCount; i++) {
Touch touch = Input.GetTouch(i);
if (touch.phase == TouchPhase.Began && IsInBounds(touch.position)) {
Jump();
SidewaysForce();
}
}
I haven't worked much with Touch Input, but from what I know it seems like this will only run the code if the player taps on the ball. This should stop the ball from flying away because it will ignore when the player holds their finger on the ball. The for loop just checks for all fingers instead of just 1, which may be useful.
I hope this helped and let me know if it works!
Your answer
