我是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
应该不断上下移动。也就是说,它应该从上到下移动,反之亦然,作为一个循环。这样的事情(球从上到下移动,反之亦然):
在寻找解决方案时,我找到了答案。并试图调整它。物体在移动,但移动不正确。它横着走了!以下调整的脚本用于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;
}
}
但是运动正朝左下角移动!我一直试图弄清楚好几个小时了!有什么猜测它出错了吗?或者如果你有更好的解决方案,我真的很感激。
答案 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.z
或pointB.z
不正确,您可以在需要后更改它们。
(很高兴继续评论/编辑,如果需要帮助你解决这个问题!)