Unity Ninja Unity 3D Forum
To have exclusive access to all downloads, recourses and links within this forum, a free registered account is required. Just a heads up Wink

You are not connected. Please login or register

Unity Ninja Unity 3D Forum » HELP » Help (General) » How do I make a top-down game with click to move?

How do I make a top-down game with click to move?

View previous topic View next topic Go down  Message [Page 1 of 1]

yellowwinner


Member [Lv. 1]
Member [Lv. 1]
Hello I am making an Animal Crossing game in Unity and I am having trouble making the game click to move. I have gotten the top down part done though.

Thank you and please help if you can Smile
Also check my game out here or here Very Happy

View user profile http://yellowwinner.weebly.com

mynametiger


{SUPER MEMBER}-LV.4
{SUPER MEMBER}-LV.4
To get started create a New Scene and name it whatever you want to. Add a Terrain to this scene or instead, you could add a Plane, it's left to you. Position it a (0, 0, 0). Add some material to it so that you can get a better picture of it’s.

Make sure that this Plane / Terrain that you have created has a Collider component attached to it.

Now add a GameObject of any kind, I'm adding a Sphere, because I'm partial to them. Position it at (0, 0.5, 0). Add a material of a different color to this Sphere.

Add a Directional Light to lighten up the scene.

Set the Main Camera Position to (0, 10, 0), Rotation to (90, 0, 0). Once you are done with that, the setup should look something like:



Create a new C# script named TapToMove. Attach it to the GameObject you've just created. Save the scene and open the script.

Add the below code to it:
using UnityEngine;
using System.<span id="IL_AD1" class="IL_AD">Collections</span>;

public class TapToMove : MonoBehaviour {
//flag to check if the user has tapped / clicked.
//Set to true on click. Reset to false on reaching destination
private bool flag = false;
//destination point
private Vector3 endPoint;
//alter this to change the speed of the movement of player / gameobject
public float <span id="IL_AD5" class="IL_AD">duration</span> = 50.0f;
//vertical position of the gameobject
private float yAxis;

void Start(){
 //save the y axis value of gameobject
 yAxis = gameObject.transform.position.y;
}
 
// Update is called once per frame
void Update () {

 //check if the screen is touched / clicked  
 if((Input.touchCount > 0 && Input.GetTouch(0).phase == TouchPhase.Began) || (Input.GetMouseButtonDown(0)))
 {
  //declare a variable of RaycastHit struct
  RaycastHit hit;
  //Create a Ray on the tapped / clicked position
  Ray ray;
  //for unity editor
  #if UNITY_EDITOR
  ray = Camera.main.ScreenPointToRay(Input.mousePosition);
  //for touch device
  #elif (UNITY_ANDROID || UNITY_IPHONE || UNITY_WP8)
  ray = Camera.main.ScreenPointToRay(Input.GetTouch(0).position);
  #endif

  //Check if the ray hits any collider
  if(Physics.Raycast(ray,out hit))
  {
   //set a flag to indicate to move the gameobject
   flag = true;
   //save the click / tap position
   endPoint = hit.point;
   //as we do not want to change the y axis value based on touch position, reset it to original y axis value
   endPoint.y = yAxis;
   Debug.Log(endPoint);
  }
   
 }
 //check if the flag for movement is true and the current gameobject position is not same as the clicked / tapped position
 if(flag && !Mathf.Approximately(gameObject.transform.position.magnitude, endPoint.magnitude)){ //&& !(V3Equal(transform.position, endPoint))){
  //move the gameobject to the desired position
  gameObject.transform.position = Vector3.Lerp(gameObject.transform.position, endPoint, 1/(duration*(Vector3.Distance(gameObject.transform.position, endPoint))));
 }
 //set the movement indicator flag to false if the endPoint and current gameobject position are equal
 else if(flag && Mathf.Approximately(gameObject.transform.position.magnitude, endPoint.magnitude)) {
  flag = false;
  Debug.Log("I am here");
 }
 
}
}













Done! Now you can customize values to get what u want!


View user profile

mynametiger


{SUPER MEMBER}-LV.4
{SUPER MEMBER}-LV.4
Some more links

http://forum.unity3d.com/threads/free-click-to-move-script-camera-control.217056/

View user profile

yellowwinner


Member [Lv. 1]
Member [Lv. 1]
Quote (Long):
mynametiger wrote:To get started create a New Scene and name it whatever you want to. Add a Terrain to this scene or instead, you could add a Plane, it's left to you. Position it a (0, 0, 0). Add some material to it so that you can get a better picture of it’s.

Make sure that this Plane / Terrain that you have created has a Collider component attached to it.

Now add a GameObject of any kind, I'm adding a Sphere, because I'm partial to them. Position it at (0, 0.5, 0). Add a material of a different color to this Sphere.

Add a Directional Light to lighten up the scene.

Set the Main Camera Position to (0, 10, 0), Rotation to (90, 0, 0). Once you are done with that, the setup should look something like:



Create a new C# script named TapToMove. Attach it to the GameObject you've just created. Save the scene and open the script.

Add the below code to it:
using UnityEngine;
using System.<span id="IL_AD1" class="IL_AD">Collections</span>;

public class TapToMove : MonoBehaviour {
//flag to check if the user has tapped / clicked.
//Set to true on click. Reset to false on reaching destination
private bool flag = false;
//destination point
private Vector3 endPoint;
//alter this to change the speed of the movement of player / gameobject
public float <span id="IL_AD5" class="IL_AD">duration</span> = 50.0f;
//vertical position of the gameobject
private float yAxis;

void Start(){
 //save the y axis value of gameobject
 yAxis = gameObject.transform.position.y;
}
 
// Update is called once per frame
void Update () {

 //check if the screen is touched / clicked  
 if((Input.touchCount > 0 && Input.GetTouch(0).phase == TouchPhase.Began) || (Input.GetMouseButtonDown(0)))
 {
  //declare a variable of RaycastHit struct
  RaycastHit hit;
  //Create a Ray on the tapped / clicked position
  Ray ray;
  //for unity editor
  #if UNITY_EDITOR
  ray = Camera.main.ScreenPointToRay(Input.mousePosition);
  //for touch device
  #elif (UNITY_ANDROID || UNITY_IPHONE || UNITY_WP8)
  ray = Camera.main.ScreenPointToRay(Input.GetTouch(0).position);
  #endif

  //Check if the ray hits any collider
  if(Physics.Raycast(ray,out hit))
  {
   //set a flag to indicate to move the gameobject
   flag = true;
   //save the click / tap position
   endPoint = hit.point;
   //as we do not want to change the y axis value based on touch position, reset it to original y axis value
   endPoint.y = yAxis;
   Debug.Log(endPoint);
  }
   
 }
 //check if the flag for movement is true and the current gameobject position is not same as the clicked / tapped position
 if(flag && !Mathf.Approximately(gameObject.transform.position.magnitude, endPoint.magnitude)){ //&& !(V3Equal(transform.position, endPoint))){
  //move the gameobject to the desired position
  gameObject.transform.position = Vector3.Lerp(gameObject.transform.position, endPoint, 1/(duration*(Vector3.Distance(gameObject.transform.position, endPoint))));
 }
 //set the movement indicator flag to false if the endPoint and current gameobject position are equal
 else if(flag && Mathf.Approximately(gameObject.transform.position.magnitude, endPoint.magnitude)) {
  flag = false;
  Debug.Log("I am here");
 }
 
}
}













Done! Now you can customize values to get what u want!


I Tried the tut and it gave me two errors
Assets/TapToMove.cs(2,20): error CS1041: Identifier expected
and
Assets/TapToMove.cs(2,36): error CS8025: Parsing error

View user profile http://yellowwinner.weebly.com

mynametiger


{SUPER MEMBER}-LV.4
{SUPER MEMBER}-LV.4
yellowwinner wrote:
Quote (Long):


I Tried the tut and it gave me two errors
Assets/TapToMove.cs(2,20): error CS1041: Identifier expected
and
Assets/TapToMove.cs(2,36): error CS8025: Parsing error



It is working fine....

Download the Project

https://www.dropbox.com/s/35toiouzfd7qg99/export.unitypackage?dl=0



Last edited by mynametiger on Sun Mar 29, 2015 10:05 am; edited 1 time in total

View user profile

yellowwinner


Member [Lv. 1]
Member [Lv. 1]
mynametiger wrote:
yellowwinner wrote:
Quote (Long):


I Tried the tut and it gave me two errors
Assets/TapToMove.cs(2,20): error CS1041: Identifier expected
and
Assets/TapToMove.cs(2,36): error CS8025: Parsing error



It is working fine....

Download the Project

https://drive.google.com/open?id=0B7VHVXKpn84YbGNlUllDZEZ4Sms&authuser=0

It says I need access and to send a request. So I sent a request. The email should be yell***inn*****@*mail.com

View user profile http://yellowwinner.weebly.com

7 Updated Link on Sun Mar 29, 2015 9:46 am

mynametiger


{SUPER MEMBER}-LV.4
{SUPER MEMBER}-LV.4
Thanks! for reporting


yellowwinner wrote:
mynametiger wrote:
yellowwinner wrote:
Quote (Long):


I Tried the tut and it gave me two errors
Assets/TapToMove.cs(2,20): error CS1041: Identifier expected
and
Assets/TapToMove.cs(2,36): error CS8025: Parsing error



It is working fine....

Download the Project

https://drive.google.com/open?id=0B7VHVXKpn84YbGNlUllDZEZ4Sms&authuser=0

It says I need access and to send a request. So I sent a request. The email should be yell***inn*****@*mail.com

https://www.dropbox.com/s/35toiouzfd7qg99/export.unitypackage?dl=0

View user profile

View previous topic View next topic Back to top  Message [Page 1 of 1]

Permissions in this forum:
You cannot reply to topics in this forum