如何在Unity3d中的3d对象(3d立方体)上创建“单击效果”?

时间:2015-08-17 09:19:49

标签: animation button unity3d gameobject

我有一个3d对象(立方体),我想用它作为一个按钮。我编写代码是为了检测,如果多维数据集被按下但它看起来不像被按下,因为它没有“点击动画”。如何在3d对象上创建点击动画?

6 个答案:

答案 0 :(得分:2)

一个好主意是玩一个动画,它会使立方体稍微过度并立即释放它。您希望在单击时执行的处理程序代码可能会阻止游戏循环,例如当你加载一个级别。然后,为了能够看到动画而非常有意义地加载关卡可能会很有用。或者您在动画后执行处理程序代码。或者您在新闻事件上播放缩小动画,在发布事件上播放放大动画。

从技术上讲,您可以使用内置动画编辑器,Update()方法,启动协程或使用资源iTween或HOTween。

http://docs.unity3d.com/ScriptReference/Transform-localScale.html

如果您喜欢这个想法或问题,请告诉我。

答案 1 :(得分:2)

Unity使用Unity Canvas UI可以更轻松地完成此操作。您可以将画布UI放置在您想要按钮的位置的世界空间中,而不是真正的3D按钮。将UI面板添加到画布,然后添加UI按钮。

现在,你已经开箱即用了几个点击效果。默认为颜色色调,但您可以选择精灵交换或动画。

如果你想要动画,当你选择按钮动画时,它会为你创建一个动画师。单击场景层次结构中的UI按钮Game Object,然后打开动画窗口。您可以从下拉菜单中选择按下的动画,然后按下RECORD按钮,然后编辑按钮比例,比如说x,y,z为0.75。现在当你点击按钮时,它将为你制作一个很酷的缩放比例。

抱歉,我知道很多信息都被丢弃了!但是一旦你开始在世界空间中使用它,你会发现它非常棒。

答案 2 :(得分:1)

一旦点击发生,您可以将其缩小一点。例如:

void OnMouseDown() {
    this.transform.localScale += new Vector3(0.05f, 0.05f, 0.05f);
}

然后点击后缩放回原始大小。

答案 3 :(得分:1)

或许关注iTween(在Unity Asset商店免费)。

它非常易于使用,你可以制作一些漂亮的动画。

答案 4 :(得分:1)

按下时可以缩放它,或者稍微改变颜色。在鼠标向上,重新缩放或重新着色。

void OnMouseDown()
{
    transform.localScale -= new Vector3(0.05, 0.05 , 0);
    //or
    transform.GetComponent<SpriteRenderer>().color += new Color(40,40,40);
}

void OnMouseUp()
{
    transform.localScale += new Vector3(0.05, 0.05 , 0);
    //or
    transform.GetComponent<SpriteRenderer>().color -= new Color(40,40,40);
}

答案 5 :(得分:-1)

您可以使用统一的新事件系统来实现您的按钮。以下是您可以实现的功能:

public class ExampleClass : MonoBehaviour, IPointerDownHandler, IPointerUpHandler, IPointerClickHandler, IPointerEnterHandler, IPointerExitHandler
{

    public void OnPointerEnter(PointerEventData eventData)
    {
       //it is the function when you hover your mouse to the object
       //You can change the color of your object to make your users
       //understand that it is not just a cube but also a clickable item
    }

    public void OnPointerExit(PointerEventData eventData)
    {
      //You can revert your color back to its original
    }

    public void OnPointerDown (PointerEventData eventData) 
    {
        //You can play with local scale as suggested by other answers here
    }
    public void OnPointerUp (PointerEventData eventData)
    {
       // Revert back the changes you made at onPointerDown
    }

    public void OnPointerClick (PointerEventData eventData)
    {
         //Use here for operations when your button is clicked
    }

}