Unity for Android - 对象不跟随触摸输入

时间:2015-06-26 06:49:36

标签: c# android unity3d touch

我刚刚开始学习Unity(使用C#),我试图创建脚本,这将使脚本附加的对象跟随我的触摸输入(基本上跟着我的手指,当我' m移动它。)

我试图做的是:

编辑:这是我现在拥有的更新版本。

$a

我也尝试使用using UnityEngine; using System.Collections; using System; public class PlayerMovement : MonoBehaviour { private Vector3 fingerEnd; void Start () { } void Update () { foreach(Touch touch in Input.touches) { if (touch.phase == TouchPhase.Began) { fingerEnd = touch.position; } if (touch.phase == TouchPhase.Moved && (Math.Sqrt(Math.Pow(fingerEnd.x,2) + Math.Pow(fingerEnd.y,2)) - Math.Sqrt(Math.Pow(transform.position.x,2) + Math.Pow(transform.position.y,2))<100)) { fingerEnd = touch.position; Vector3 worldCoordinates = Camera.main.ScreenToWorldPoint(fingerEnd); transform.Translate(worldCoordinates); } } } } ,但我的目标仍然没有移动。这可能是非常基本的错误,但我不知道这里有什么不起作用。

我也试图改变

Vector2.Lerp

fingerEnd = touch.position;
Vector3 worldCoordinates = Camera.main.ScreenToWorldPoint(fingerEnd);
transform.Translate(worldCoordinates);

fingerEnd = touch.position;
transform.Translate(fingerEnd);

fingerEnd = touch.position;
Vector3 worldCoordinates = Camera.main.ScreenToWorldPoint(fingerEnd);
transform.position = worldCoordinates;

没有效果。

编辑:好的,我已经解决了。这是我的错。在IF子句中我使用了touch.position(fingerEnd)值,之后才知道这是屏幕上像素的位置。我将它与transform.position进行了比较,它位于统一坐标中。当我将这两个条件与IF分开时,它起作用了。

代码的最终版本:

fingerEnd = touch.position;
transform.position = fingerEnd ;

对象现在跟着我的手指。它有点慢(除非我停下来一直待在后面),但这是另一个需要解决的问题。非常感谢您的帮助。

2 个答案:

答案 0 :(得分:2)

touch.position The position of the touch in pixel coordinates.

So first of all, you need to convert position to world (unity world) coordinates.

You should use the Camera.ScreenToWorldPoint to your code(Maybe main camera).

For example:

Vector3 worldCoordinates = yourCamera.ScreenToWorldPoint(fingerEnd);
transform.Translate(worldCoordinates);

答案 1 :(得分:1)

你需要改变

transform.position = fingerEnd;  

transform.Translate(fingerEnd);