- Home /
How can I make the character move to clicked position without allowing the user to drag?
I'm building a simple mobile game where the user has to touch the screen to move but I don't want to give the user the ability to click/touch and drag. I basically want the controls to be, the user clicks/touches the screen and character jumps in the air to that position but the user can hold that character in position but they can not drag the character. Have everything like I want it except for the drag. How can I exclude this while keeping everything else?
I may have added some unnecessary code but help is greatly appreciated.
public class PlayerInput : MonoBehaviour
{
private Vector3 target;
public float moveSpeed = 1.5f;
public Vector3 curPos;
public Vector3 lastPos;
private Vector3 moveDirection = Vector3.zero;
public float gravity = 20.0f;
public float speed = 5.0f;
CharacterController cc;
// Use this for initialization
void Start()
{
curPos = gameObject.transform.position;
cc = GetComponent<CharacterController>();
}
void Update()
{
if (Input.GetMouseButton(0))
{
target = Camera.main.ScreenToWorldPoint(Input.mousePosition);
target.z = transform.position.z;
transform.position = Vector3.MoveTowards(transform.position, target, moveSpeed * Time.deltaTime);
curPos = transform.position;
lastPos = target;
if (curPos == lastPos)
{
gameObject.transform.position = curPos;
}
}
else
{
moveDirection.y -= gravity * Time.deltaTime;
}
cc.Move(moveDirection * Time.deltaTime);
if (cc.isGrounded == true)
{
moveDirection.y = 0f;
}
}
}
Answer by DRRosen3 · Feb 19, 2015 at 02:49 PM
Set a variable (bool) to see if the player has reached the target destination yet.
public bool arrived = true;
If they have not, then don't allow a new target destination to be set.
void Update()
{
if(arrived)
{
if (Input.GetMouseButton(0))
{
target = Camera.main.ScreenToWorldPoint(Input.mousePosition);
target.z = transform.position.z;
transform.position = Vector3.MoveTowards(transform.position, target, moveSpeed * Time.deltaTime);
curPos = transform.position;
lastPos = target;
if (curPos == lastPos)
{
gameObject.transform.position = curPos;
}
arrived = false;
}
else
{
moveDirection.y -= gravity * Time.deltaTime;
}
cc.Move(moveDirection * Time.deltaTime);
if (cc.isGrounded == true)
{
moveDirection.y = 0f;
}
}
Thank you so much. I used this as a base for the fix.
No problem. Good luck and please remember to "thumbs up" if you consider this answered.
Your answer
Follow this Question
Related Questions
Attaching anim to this script 1 Answer
iOS Mobile - Mouse Input vs Touch Input 1 Answer
Right Mouse Click in Android 2 Answers
Convert Mouse Input to Touch Input 0 Answers