单击单击4.6中的按钮后,将特定精灵移动到目标位置

时间:2015-02-26 10:46:04

标签: unity3d

我刚开始团结。我有4个图像(精灵)在网格中对齐。

enter image description here

当我触摸特定的巧克力时,它的纹理会发生变化[我为此编写了一个代码]。屏幕上有一个按钮。按下按钮后,我只想移动那些纹理已经改变的巧克力。 我知道以下移动代码,但我不知道如何在这里使用它。

void Update () {
        float step=speed*Time.deltaTime;
        transform.position=Vector3.MoveTowards(transform.position,target.position,step);
    }

我只是不知道移动纹理改变的特定精灵。感谢

1 个答案:

答案 0 :(得分:1)

你想在一段时间内或立即移动精灵吗?

如果它持续了一段时间,我建议你使用Lerp。你可以在时间尺度上在两个Vector.3之间进行Lerp。更清洁,一旦学会了非常有用的功能。

以下代码示例:

http://docs.unity3d.com/ScriptReference/Vector3.Lerp.html

http://www.blueraja.com/blog/404/how-to-use-unity-3ds-linear-interpolation-vector3-lerp-correctly

但是,如果你想立即移动它。使用您可以在对象内部或外部设置的内置localPosition属性,可以非常轻松地完成此操作。

将更改后的精灵Bool moved属性(创建此项)设置为true(如果您正在使用Unity 4.6 UI画布,然后查看可用于在画布元素中注册鼠标活动的IClick界面),然后当您按下按钮,循环遍历包含所有按钮纹理对象的处理程序文件中的list,并移动那些将moving属性设置为true的对象。

foreach(GameObject chocolate in chocolateList)
{
    if (chocolate.moved == true)
    {
        gameObject.transform.localPosition.x = Insert your new x position.
        gameObject.transform.localPosition.y = Insert your new y position.
    }
}

但请说明您的意图,以便我可以进一步提供帮助。

编辑1:

我强烈建议你将精灵作为画布上的一个对象,以保证绝对的工作清晰度。这很有意义,因为你的画布可以更好地处理这些类型的东西。使用Image并为您的图像指定精灵对象(您的巧克力片),定义它的宽度和高度,并为其添加一个名为“ChocolatePiece”的脚本,在此脚本中创建两个公共变量bool moved和{ {1}},此脚本不需要任何其他内容。将此新对象保存为新预制件。

在附加到画布中空游戏对象的处理程序脚本中完成此操作后,制作一个游戏对象列表:

int ID

您需要在处理程序脚本的顶部定义List<GameObject> chocolatePieces = new List<GameObject>(); 并在GameObject chocolatePiece中附加我们之前定义的预制件。然后在inspector中,循环你想要多少巧克力碎片的大小,为你的例子让我们使用4.实例化你之前定义的4个预制件作为游戏对象,并为每个预定义定义它们的属性,如下所示:

示例变量:

Start()

示例实例代码:

int x = -200;
int y = 200;
int amountToMoveInX = 200;
int amountToMoveInY = 100;

从这一点开始,为下一个循环计数添加到您的位置(x由amountToMoveInX和y by amountToMoveInY);

(对于transform.position,你的循环的每个计数都会将一个数量添加到默认的x和默认的y值(最有可能的第一个部分的位置))

现在,因为您已将所有游戏对象放入列表中并正确设置了属性,然后您可以通过处理程序脚本访问这些游戏对象。