我正在尝试根据用户的触摸位置翻译对象。 它的问题是,当我测试它时,一旦我在手机屏幕上拖动手指,对象就会消失。我不完全确定它发生了什么?
如果有人可以指导我那会很棒:)
由于
这是代码:
#pragma strict
function Update () {
for (var touch : Touch in Input.touches)
{
if (touch.phase == TouchPhase.Moved) {
transform.Translate(0, touch.position.y, 0);
}
}
}
答案 0 :(得分:0)
你想在Unity专门的问题/答案网站上提出这个问题:http://answers.unity3d.com/index.html 除非与Android / iOS特定功能相关,否则很少有人会出现针对Unity特定问题的stackoverflow。
至于问题的原因,touch.position.y在屏幕空间(像素)中定义,其中transform.Translate需要世界单位(米)。您可以使用Camera.ScreenToWorldPoint()方法在两者之间进行转换,然后在相机位置和屏幕世界点之外创建一个矢量。使用此向量,您可以在场景中与某些几何体相交,或者只是将其用作相机前面的一个点。
http://docs.unity3d.com/Documentation/ScriptReference/Camera.ScreenToWorldPoint.html
答案 1 :(得分:0)
问题是你要通过touch.position.y
移动对象。这不是一个世界的观点,它是触摸屏上的一个点。您想要做的事情可能是Camera.main.ScreenToWorldPoint(touch.position).y
,无论您接触到哪里,都会为您提供在世界中的位置。
当然,翻译会使用一个向量来指示距离,而不是最终目的地,所以简单地将上面的内容添加到其中仍然无法按照您的意图运行。
相反,也许试试这个:
Vector3 EndPos = Camera.main.ScreenToWorldPoint(touch.position);
float speed = 1f;
transform.position = Vector3.Lerp(transform.position, EndPos, speed * Time.deltaTime);
应将物体移向手指,同时保持其动作平滑。