【问题标题】:Clicked then goes Up, Click again, then goes down单击然后上升,再次单击然后下降
【发布时间】:2016-08-30 07:53:21
【问题描述】:

我有带有按钮组件的图像。我正在创建一个类似 Inventory 的文件,我需要将其显示为单击时会上升,再次单击时会下降。

这是可以自动执行的代码,我可以手动执行吗?请帮忙。

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

【问题讨论】:

标签: c# image button unity3d


【解决方案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 .

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-01-30
    • 2013-03-02
    • 1970-01-01
    • 1970-01-01
    • 2012-03-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多