Question by
michaelbeers · Oct 13, 2016 at 12:24 PM ·
drag-and-drop
[C#] Drag and drop object around the X and Z axis instead of the X and Y Axis
Hello everyone,
Currently I am developing an AR application where you can drag and drop objects around the scene. Now im trying to move objects around the X and Z axis, which is working except that the object is not getting the right Z-coordinates. Same as the X-axis it should stay in place and only the Z-coordinate should get bigger and smaller if you drag your finger/mouse to the top/bottom of the screen.
Greetings,
Michael Beers
using UnityEngine;
using System.Collections;
public class DragBehaviour : MonoBehaviour
{
public float factor = 20f;
public Transform target;
public Vector3 dist;
public Vector3 pos;
public Vector2 input;
// Use this for initialization
void Start () {
}
// Update is called once per frame
void Update () {
if (GetMouseInput () || GetTouchInput ()) {
if (target != null) {
float distX = input.x - pos.x;
float distY = dist.y;
float distZ = dist.z + ((input.y-pos.y) / factor);
Vector3 currentPosition = new Vector3 (distX, distY, distZ);
Vector3 newPosition = Camera.main.ScreenToWorldPoint (currentPosition);
transform.position = newPosition;
}
}
}
public bool GetMouseInput ()
{
if (Input.GetMouseButton (0)) {
input = Input.mousePosition;
Ray ray = Camera.main.ScreenPointToRay(input);
if (Input.GetMouseButtonDown (0)) {
// Setup target
RaycastHit hit = new RaycastHit();
if (Physics.Raycast(ray, out hit, 200))
{
target = hit.transform;
}
else
{
target = null;
}
// Setup dist.
dist = Camera.main.WorldToScreenPoint (transform.position);
float distX = Input.mousePosition.x - dist.x;
float distY = Input.mousePosition.y - dist.y;
float distZ = Input.mousePosition.z - dist.z;
pos = new Vector3 (distX, distY, distZ);
}
return true;
} else {
target = null;
return false;
}
}
public bool GetTouchInput ()
{
if (Input.touches.Length > 0) {
Touch touch = Input.GetTouch (0);
input = touch.position;
Ray ray = Camera.main.ScreenPointToRay(input);
if (touch.phase == TouchPhase.Began) {
// Setup target
RaycastHit hit = new RaycastHit();
if (Physics.Raycast(ray, out hit, 200))
{
target = hit.transform;
}
else
{
target = null;
}
// Setup dist.
dist = Camera.main.WorldToScreenPoint (transform.position);
float distX = touch.position.x - dist.x;
float distY = touch.position.y - dist.y;
float distZ = dist.z;
pos = new Vector3 (distX, distY, distZ);
}
return true;
} else {
target = null;
return false;
}
}
}
Comment
Your answer
Follow this Question
Related Questions
Drag & drop start position on a perspective camera? 0 Answers
How make this kind of drag and drop game 1 Answer
Collider not working properly 0 Answers
behaviour after shader 0 Answers