2016-08-30 3 views
0

У меня есть изображение с компонентом кнопки. Я создаю Inventory-like, и мне нужно, чтобы он отображался как бумага, поднимающаяся при нажатии, и спускается, когда я снова щелкнул ее.Нажмите, затем перейдет вверх, нажмите еще раз, затем опустится

Вот коды, которые можно сделать автоматически, могу ли я сделать это вручную. пожалуйста помоги.

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

Используйте это: http://wiki.unity3d.com/index.php?title=MoveObject –

ответ

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 для вас.

Смежные вопросы