Unity3d 上下移动对象-循环

Unity3d 上下移动对象-循环,unity3d,unityscript,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 p

我对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中使用了以下经过调整的脚本:


但运动方向是左下角!我已经想了好几个小时了!猜猜哪里出了问题?或者,如果你有更好的解决方案,我会非常感激。

我会尝试将此作为一个答案来发布,无论如何,这比在评论中添加多行内容要容易得多

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

变量screenPointA:Vector3=Vector3Screen.width-75,Screen.height-75,0; 变量screenPointB:Vector3=Vector3Screen.width-75,75,0; 然后我们得到对象将在其中来回循环的世界位置:

变量pointA:Vector3=mainCam.ScreenToWorldPointscreenPointA; 变量pointB:Vector3=mainCam.ScreenToWorldPointscreenPointB; 如果pointA.z或pointB.z不正确,您可以在需要时更改它们

如果需要帮助您解决此问题,欢迎继续评论/编辑

点A是起始位置。。。如果,如果只是为了尝试,尝试使pointB=transform.position+Vector30,10,0;在启动功能中-这会将对象向上移动吗?我想知道ScreenToWorldPoint是否没有做你想做的事情;请不要认为您通常会将转换的localScale传递给此方法。谢谢。我试过这个:var pointB:Vector3=transform.position+Vector30,-10,0;。它在固定的Y轴上先向下再向上移动。但是,我们如何在屏幕底部之前计算出正确的Y位置呢?当游戏开始时,该对象被放置在右上角,但z索引为-10!因此,如果上面的循环脚本被注释掉,对象将不可见!我仍然对这件简单的事情感到困惑。
#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; 
    }
}