我有带按钮组件的图像。我正在创建一个类似于库存的东西,我需要它在单击时像纸张一样显示,当我再次点击它时会下降。
以下是可以自动执行的代码,我可以手动执行此操作。请帮忙。
using UnityEngine;
using System.Collections;
public class BMM : MonoBehaviour {
public Vector3 pointB;
IEnumerator Start()
{
var pointA = transform.position;
yield return StartCoroutine(MoveObject(transform, pointA, pointB, 3.0f));
yield return StartCoroutine(MoveObject(transform, pointB, pointA, 3.0f));
}
IEnumerator MoveObject(Transform thisTransform, Vector3 startPos, Vector3 endPos, float time)
{
var i = 0.0f;
var rate = 1.0f / time;
while (i < 1.0f)
{
i += Time.deltaTime * rate;
thisTransform.position = Vector3.Lerp(startPos, endPos, i);
yield return null;
}
}
}
答案 0 :(得分:1)
我不确定我明白你要做什么。如果我理解正确你需要某种开关按钮,一个开关按钮在点击(开启)时上升,再次点击时关闭(关闭)。如果这是你想要做的,我会建议这样的事情:
public class BMM : MonoBehaviour, IPointerClickHandler
{
public Vector3 pointB;
private Vector3 pointA;
private bool isClicked;
void Start()
{
pointA = transform.position;
isClicked= false;
}
public void OnPointerClick (PointerEventData eventData)
{
if (isClicked == false)
{
isClicked = true;
yield return StartCoroutine(MoveObject(transform, pointA, pointB, 3.0f));
}
else
{
isClicked = false;
yield return StartCoroutine(MoveObject(transform, pointB, pointA, 3.0f));
}
}
IEnumerator MoveObject(Transform thisTransform, Vector3 startPos, Vector3 endPos, float time)
{
var i = 0.0f;
var rate = 1.0f / time;
while (i < 1.0f)
{
i += Time.deltaTime * rate;
thisTransform.position = Vector3.Lerp(startPos, endPos, i);
yield return null;
}
}
}
请注意,IPointerClickHandler
界面仅适用,因为您的对象附加了Button
个组件。如果删除Button
组件,则无法使用。
此外,在类顶部键入IPointerClickHandler
后,您可以右键单击界面名称,然后选择选项Implicit Implement
(或类似的东西),它将创建方法OnPointerClick for you。