上下移动对象 - 循环

时间:2014-07-10 21:00:37

标签: unity3d unityscript

我是Unity3D的新手。试图观看一些youtube视频教程。但我怀疑。我在游戏启动时使用以下代码将对象放置在右上角位置:

myObject.position = mainCam.ScreenToWorldPoint(new Vector3(Screen.width - 75, Screen.height ,0f));

根据文档,摄像机视口中的(0,0)位置位于左下角,(1,1)位置位于右上角。这就是我在上面一行中使用以下值的原因:

x = Screen.width - 75; // to position 75px from right side
y = Screen.height; // at top on y-axis
z = 0; // not needed

我要做的是,myObject应该不断上下移动。也就是说,它应该从上到下移动,反之亦然,作为一个循环。这样的事情(球从上到下移动,反之亦然):

enter image description here

在寻找解决方案时,我找到了答案。并试图调整它。物体在移动,但移动不正确。它横着走了!以下调整的脚本用于myObject

#pragma strict

var mainCam : Camera;

function Start () {
    var pointA : Vector3 = transform.position;
    var pointB : Vector3 = mainCam.ScreenToWorldPoint(new Vector3(transform.position.x, transform.localScale.y/2 ,0f)); 

    while (true) {
        yield MoveObject(transform, pointA, pointB, 3.0);
        yield MoveObject(transform, pointB, pointA, 3.0);
    }
}

function MoveObject (thisTransform : Transform, startPos : Vector3, endPos : Vector3, time : float) {
    var i = 0.0;
    var rate = 1.0/time;
    while (i < 1.0) {
        i += Time.deltaTime * rate;
        thisTransform.position = Vector3.Lerp(startPos, endPos, i);
        yield; 
    }
}

但是运动正朝左下角移动!我一直试图弄清楚好几个小时了!有什么猜测它出错了吗?或者如果你有更好的解决方案,我真的很感激。

1 个答案:

答案 0 :(得分:0)

要把这个作为答案张贴(比在评论中做多行更容易)。

因此,我们以像素尺寸抓取屏幕的右上角和右下角(使用75作为边距):

var screenPointA:Vector3 = Vector3(Screen.width-75, Screen.height-75, 0);
var screenPointB:Vector3 = Vector3(Screen.width-75, 75, 0);

然后我们得到对象将来回循环的世界位置:

var pointA:Vector3 = mainCam.ScreenToWorldPoint(screenPointA);
var pointB:Vector3 = mainCam.ScreenToWorldPoint(screenPointB);

如果pointA.zpointB.z不正确,您可以在需要后更改它们。

(很高兴继续评论/编辑,如果需要帮助你解决这个问题!)