How to move 2D GameObject between two points in specific amount of time?
Here we are assuming that you want to move object which will not be moved by the physics (elevators, ramps, etc..)
One way to do it is to use Vector3.Lerp, which will return vector between startPosition and endPosition, based on the third parameter which needs to be between 0 and 1. Calculating totalTime and dividing it by SecondsForMove we are getting value from 0 to 1 for Lerp function.
public class SomeScript : MonoBehaviour {
public Vector3 endPosition;
public Vector3 startPosition;
public float SecondsForMove;
public float totalTime= 0;
void Update ()
{
totalTime += Time.deltaTime;
transform.position = Vector3.Lerp (startPosition, endPosition, totalTime / SecondsForMove);
}
}
Keep in mind that if you add collider to such types of object, also add Rigidbody 2D component to it, and set "Is Kinematic" to true, to improve ingame physics performance.
How to quit game when the Android Back button is pressed?
In Unity, android Back button is mapped to Escape key. So, it will work with Escape key too.
Put this code on script attached to Main Camera or whatever else script you want.
Note: It will also stop playing your game in Unity editor.
if (Input.GetKeyDown(KeyCode.Escape))
{
#if UNITY_EDITOR
UnityEditor.EditorApplication.isPlaying = false;
#else
Application.Quit();
#endif
}
}
How to set startup scene?
In the Build Settings, from the File menu, you can reorder your scenes. Make sure startup is at the top of the list.
The Order in Build Settings doesn't affect the Play Button at all. It is only for when you actually Build/Export your Game.
How to detect finger touch or mouse click on 2d collider?
Here is one working example for detecting left mouse click and any finger touch on any GameObject which have 2d colider attached to it:
First here is simple class which use Physics2D.Raycast for detecting touch on coliders.
using UnityEngine;
using System.Collections;
public static class InputController
{
private static bool buttonDown = false;
private static RaycastHit2D noHit = new RaycastHit2D();
public static RaycastHit2D checkTouchDown()
{
if (!Input.GetMouseButtonDown (0))
buttonDown = false;
foreach (Touch touch in Input.touches)
{
if (touch.phase == TouchPhase.Began)
{
RaycastHit2D hit = _checkTouchDown(touch.position);
if (hit.collider != null)
return hit;
}
}
if (Input.GetMouseButtonDown (0) && !buttonDown)
{
buttonDown = true;
RaycastHit2D hit = _checkTouchDown(Input.mousePosition);
if (hit.collider != null)
return hit;
}
return noHit;
}
public static RaycastHit2D _checkTouchDown(Vector2 position)
{
return Physics2D.Raycast (Camera.main.ScreenToWorldPoint (position), Vector2.zero);
}
}
Now you can use this class in Update method of any other script. You should check hit.collider property, which will be non null if there is collision with some colider. Here I am checking if my collider (GameObject) tag is "PlayButton", and if it is, then I am destroying play button and loading "next scene"
// Update is called once per frame
void Update ()
{
RaycastHit2D hit = InputController.checkTouchDown ();
if (hit.collider != null)
{
if (hit.collider.tag == "PlayButton")
{
Destroy(hit.transform.gameObject);
SceneManager.LoadScene("next scene");
}
}
}