单击然后上升,再次单击,然后下降

时间:2016-08-30 07:53:21

标签: c# image button unity3d

我有带按钮组件的图像。我正在创建一个类似于库存的东西,我需要它在单击时像纸张一样显示,当我再次点击它时会下降。

以下是可以自动执行的代码,我可以手动执行此操作。请帮忙。

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;
        }
    }
}

1 个答案:

答案 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。