【Unity】ボタンを押したら沈み、離したら浮き上がるようにする方法


こんな感じにぽちぽちできるようにしていく。

![ezgif.com-optimize.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/688851/6da2820d-c6d8-31d4-b05b-487f286f7b17.gif)
この記事では細かいことは説明せず、書いてある通りやればボタンをこのようにポチポチできるようになるまでの流れを書いています。



まずはヒエラルキービューの「Create」→「UI」→「Panel」の順番でパネルを作る。
その後「Panel」を右クリック→「UI」→「Button」の順番でボタンを出す。
![“shot” 2020-09-18 1.28.25.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/688851/eaf5d385-15f0-66e9-f640-fdd39348e639.png)

そしたらこんな感じになる。


そしたらButtonを選択した状態でインスペクタービューにある「Button」コンポーネント
![“shot” 2020-09-18 1.34.31.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/688851/b5abcd38-b5a4-5c28-1129-92815bd39f92.png)

ここの「Transition」を「Animation」にし、この画像でいう下から三番目の「Auto Generate Animation」を押す。
そうすると新しくアニメーションコントローラーを作れるので適当に名前を入力し
作成。ここだとそのまま「Button.controller」にした。
![“shot” 2020-09-18 1.38.41.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/688851/75fb80bb-7a53-e898-3d60-413476d2dcb4.png)

今作ったアニメーションコントローラーの中身をみてみるとこんな感じになっている。
![“shot” 2020-09-18 1.40.01.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/688851/0fbdfaf9-d28e-e543-5d72-fb9ec7beae5a.png)

自分でアニメーションコントローラーも作っても大丈夫だが、このデフォルトで用意されている形がすぐできるのが個人的に楽と思うのでこのような流れで作った。（状態もアニメーションのトリガーも用意されている為）


そしたらこの↓の画像ような形にする


![“shot” 2020-09-18 1.44.31.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/688851/2a7dbef1-5284-16a6-0179-1046cf58fbc1.png)

アニメーションコントローラーについてはこちらを参考にするといいです。
[【UnityC#講座】AnimatorControllerの使い方](https://unity-shoshinsha.biz/archives/705)

この形ができたら「Highlighted」から「Pressed」に伸びている矢印をクリック。
インスペクタービューの「Condetions」を「Pressed」にする。
![“shot” 2020-09-18 2.01.17.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/688851/508ea524-190a-6355-d015-b974d6f13dbf.png)
こんな感じ。

それと同じように「Pressed」から「Highlighted」に伸びている矢印をクリックしインスペクタービューにある「Condetions」を次は「Highlighted」にする。

それができたらプロジェクトビューでアニメーションコントローラーの中にあるHighlightedを選択し、インスペクタービューの「Loop Time」のチェックを外す。
Pressedも同じように「Loop Time」のチェックを外しておく。
![“shot” 2020-09-18 2.55.19.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/688851/6056e1d4-447d-4950-e77c-c3b8c0f95b08.png)


これで第一段階終了です。

次にヒエラルキービューにある「Button」を選択した状態でアニメーションウインドウを開き、「Normal」を「Highlighted」にしてください。
その後「Add Property」を押し「Rect Transform」→「Scale」の順番に選択します。
そうしたらこの画像のような感じになると思います。
![“shot” 2020-09-18 2.09.56.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/688851/19efb5ac-9c4d-1f02-6e57-3eae86e3f761.png)


そしたら赤い丸ボタンを押し、1:00のところにあるダイヤの形をしたものをクリックしながら0:01のところまでドラッグします。
その後白い線が見えると思いますが、それを0:01のところまで移動させます。
この細い白い線は上にある時間が書いてある薄い赤い色の部分でクリック、ドラッグすれば動かせます。
そこで「Scale.x」を1.2「Scale.y」を1.2にします。
できたら最後に赤い丸ボタンを押します。
そしたら赤くなっていた部分が元の状態になると思います。
![“shot” 2020-09-18 2.12.58.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/688851/8c0b4d1c-88b8-6f30-c90d-a453e20460e4.png)

次は左上の「Highlighted」をクリックして「Pressed」に変更してください。先ほどと同じ手順で今度は0:00のところのScale.xを0.8にしてScale.yを0.8にしてください。
1:00のところにあるダイヤは消してください。
そうすると↓の画像のようになるはずです。
![“shot” 2020-09-18 2.51.24.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/688851/737f03e1-1f5f-dc99-c19b-dd9b31f5f96e.png)


これで第二段階終了です。

次は最後の段階でスクリプト を描きます。
「Create」→「C#Script」でスクリプト を作り名前は「ButtonPushu」としました。
このように書いてください。

```
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
using UnityEngine.EventSystems;



public class ButtonPushu : MonoBehaviour, IPointerEnterHandler, IPointerExitHandler, IPointerDownHandler, IPointerUpHandler
{

    Animator _animator;

    Button _button;

    void Start()
    {
        _animator = GetComponent<Animator>();
        _button = GetComponent<Button>();
    }

    void Update()
    {

    }


    public void OnPointerEnter(PointerEventData eventData)
    {
        _animator.SetTrigger("Highlighted");
        //マウスカーソルが重なったらボタンが大きくなる
    }

    public void OnPointerExit(PointerEventData eventData)
    {
        _animator.SetTrigger("Normal");
        //マウスカーソルがボタンから離れたら通常の大きさになる
    }

    public void OnPointerDown(PointerEventData eventData)
    {
        _animator.SetTrigger("Pressed");
        //ボタンをクリックしたらボタンが沈む
    }

    public void OnPointerUp(PointerEventData eventData)
    {
        _animator.SetTrigger("Highlighted");
        //マウスボタンが離された時の処理
    }
}

```

中身についてはざっくりクリックの状態（押した、離れたなど）に応じて先ほど作成したアニメーションの処理を実行するような感じです。
スクリプトについてはこちらのサイトが分かりやすかったです.

[Unityでマウスイベントのインタフェースの実装とレイキャスト](https://gametukurikata.com/basic/mouseevent)

スクリプトができたらこのスクリプトをButtonにアタッチ


終わり。