我刚开始团结。我有4个图像(精灵)在网格中对齐。
当我触摸特定的巧克力时,它的纹理会发生变化[我为此编写了一个代码]。屏幕上有一个按钮。按下按钮后,我只想移动那些纹理已经改变的巧克力。 我知道以下移动代码,但我不知道如何在这里使用它。
void Update () {
float step=speed*Time.deltaTime;
transform.position=Vector3.MoveTowards(transform.position,target.position,step);
}
我只是不知道移动纹理改变的特定精灵。感谢
答案 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值(最有可能的第一个部分的位置))
现在,因为您已将所有游戏对象放入列表中并正确设置了属性,然后您可以通过处理程序脚本访问这些游戏对象。