第10回ゲームツクール uGUIをアニメーションさせよう

36
uGUIをアニメーションさせよう ~uGUIの特徴についてレビューしよう~ 2015325FAGStudio
  • date post

    18-Jul-2015
  • Category

    Technology

  • view

    378
  • download

    5

Transcript of 第10回ゲームツクール uGUIをアニメーションさせよう

Page 1: 第10回ゲームツクール uGUIをアニメーションさせよう

uGUIをアニメーションさせよう~uGUIの特徴についてレビューしよう~

2015年3月25日 FAGStudio

Page 2: 第10回ゲームツクール uGUIをアニメーションさせよう

Unity本のおすすめ三羽ガラス

Page 3: 第10回ゲームツクール uGUIをアニメーションさせよう

uGUIの特徴について考えてみましょう

・Sprite素材を使ってUIを作れる

・デバイス側の解像度に合わせてUIの表示調整できる

・UIをアニメーションできる

・UIにイベント設定が簡単にできる

Page 4: 第10回ゲームツクール uGUIをアニメーションさせよう

そもそもUnityのUI機能ってどうだった?(Before 4.5.x)

・OnGUI関数は主にデバック用を想定したもの

void OnGUI () { GUI.Box (Rect (10,10,100,90), "Loader Menu"); if (GUI.Button (new Rect (20,40,80,20), "Level 1")) { Application.LoadLevel (1); } if (GUI.Button (new Rect (20,70,80,20), "Level 2")) { Application.LoadLevel (2); }}

サンプルのスクリプト

Page 5: 第10回ゲームツクール uGUIをアニメーションさせよう

そもそもUnityのUI機能ってどうだった?(Before 4.5.xの問題点など)

・かっこいいUIが作りにくかった。

・ドローコール(処理の負荷)が大きかった。

・UIの位置や大きさはピクセル指定のためデバイスの解像度やディスプレイサイズで表示位置がずれる。

Page 6: 第10回ゲームツクール uGUIをアニメーションさせよう

補足:アスペクト比とは?

表示できる画像の大きさの縦横比のことをアスペクト比といいます!!

昔のテレビは3:4というアスペクト比でしたが、最近では9:16の横長の画面になりましたね。最近のスマートフォンではタブレットはアスペクト比が4:3のような正方形に近い形になる傾向があり、手持ちのサイズは逆に16:9など縦長になることが多いです。

Page 7: 第10回ゲームツクール uGUIをアニメーションさせよう

Canvas

↓Canvas

uGUIはHierarchy view上では、必ずCanvasの子供オブジェクト上としてUIパーツを配置されます(Canvasの子供オブジェクトにしなければUIオブジェクトは描画されません)。Scene view上でもCanvasの上にUIパーツが配置されます。

↓ UIオブジェクト

↓ UIオブジェクト

↓ UIオブジェクト

Page 8: 第10回ゲームツクール uGUIをアニメーションさせよう

同じCanvas内のUIオブジェクトの描画順

同じCanvas内で設定されているUIオブジェクトはHierarchy Viewで下にあるUIオブジェクトの方がUIオブジェクトが重なった時に前に描画されます。

Page 9: 第10回ゲームツクール uGUIをアニメーションさせよう

uGUIの特徴

Screen Space - OverLayほかのGameObjectの中でUIが1番前に描画されるモード。4.5.xまで現役で使われていたGUI TEXTやGUI TEXTUREはこれにあたります。

Screen Space - Cameraカメラを指定してUIを描画するモード。複数のCanvasを準備した際にCanvasの描画する順番をSorting Layerで指定することができます。

World Spaceほかの3Dオブジェクトと同じように描画されるモード。ほかモードだとGameObjectと同じようにTransform情報が適応されます。

様々な描画モードを搭載。Canvas Render Mode

Page 10: 第10回ゲームツクール uGUIをアニメーションさせよう

描画の違い一覧

引用元:http://docs.unity3d.com/Manual/UICanvas.html

Screen Space -OverLay Screen Space-Camera World Space

Page 11: 第10回ゲームツクール uGUIをアニメーションさせよう

UIオブジェクトのサイズと配置について

Render Mode Space - OverLay, Screen Space - Cameraゲームが描画されるサイズ(= Game View)によってCanvasの大きさが変化します。

Page 12: 第10回ゲームツクール uGUIをアニメーションさせよう

UIオブジェクトのサイズと配置について

Render Mode Space - OverLay, Screen Space - Camera

Page 13: 第10回ゲームツクール uGUIをアニメーションさせよう

UIオブジェクトのサイズと配置について

uGUIの1Scale=1pixelなので例えば3Dオブジェクトと並べると大きいと錯覚してしまうかも。。しかしこの状態は「Rect Transform」というUI用の従来の「Transform」が混在した状態であり、「全く別次元のもの」と考えましょう。

Scene Viewで見ると小さすぎますね。Game Viewで見ると問題なく合成されます。

Render Mode 「World Space」

Page 14: 第10回ゲームツクール uGUIをアニメーションさせよう

UIオブジェクトのサイズについてRender Modeを「World Space」にした場合、そのままだとオブジェクトと Canvasの大きさは違いすぎます。Scale 0.01にすると、(この場合)Width 800, Height 約363にかけるとCanvasの大きさは8× 3.63になりますね。そうするとScale X1, Y1, Z1のCubeとCanvasを並べてもサイズが合うようになります。

Transform約3.63

Transform 8.0

Page 15: 第10回ゲームツクール uGUIをアニメーションさせよう

Anchorについて

Page 16: 第10回ゲームツクール uGUIをアニメーションさせよう

Anchorについて

Game Viewの大きさ(=ゲームの描画されるサイズ)を変えると大きさとアスペクト比に合わせてオブジェクトと位置が同じ割合で調整されます。

Page 17: 第10回ゲームツクール uGUIをアニメーションさせよう

ボタンをアニメーションさせよう

Page 18: 第10回ゲームツクール uGUIをアニメーションさせよう

アニメーションの設定についてWindow →Animationから下に動くアニメーションを作成します。この場合、Position.yの値を下に上から下に下がるように設定してます。

Page 19: 第10回ゲームツクール uGUIをアニメーションさせよう

作成したアニメーションをMecanimで設定

Page 20: 第10回ゲームツクール uGUIをアニメーションさせよう

スクリプトで呼ぶ準備をします

using UnityEngine;using System.Collections;

public class Trigger : MonoBehaviour {

// Use this for initialization public void StartAnim(){

GetComponent<Animator>().SetTrigger("Click");}}

Mecanim機能を呼び出す感じで呼びさせばいいですね!

Page 21: 第10回ゲームツクール uGUIをアニメーションさせよう

スクリプトをボタンから呼び出します

SendMessageでさきほど説明したStartAnimメソッドを呼びます。

Page 22: 第10回ゲームツクール uGUIをアニメーションさせよう

ボタンを回転させます

Page 23: 第10回ゲームツクール uGUIをアニメーションさせよう

同じように回転アニメーションを設定

Page 24: 第10回ゲームツクール uGUIをアニメーションさせよう

同じようにMecanimで設定

Page 25: 第10回ゲームツクール uGUIをアニメーションさせよう

スクリプトをボタンから呼び出します

using UnityEngine;using System.Collections;

public class RotateTrigget : MonoBehaviour {

public void StartRotate(){ GetComponent<Animator>().SetTrigger("ClickRotate");

}}

Page 26: 第10回ゲームツクール uGUIをアニメーションさせよう

スクリプトをボタンから呼び出します

Page 27: 第10回ゲームツクール uGUIをアニメーションさせよう

iTweenをつかってみよう

ここまでは、通常のUnityのアニメーション機能を使いましたが、先月の放送で紹介した iTweenを使えば、ほかにもいろいろ動きを付けることができます。

Page 28: 第10回ゲームツクール uGUIをアニメーションさせよう

iTweenを使ったメソッド例

public void StartAnimation(){ iTween.ScaleFrom (gameObject, new Vector3 (5, 5, 1), 3.0f); }

同じようにSendMessageでiTweenのアニメーションスクリプトを呼びます。

Page 29: 第10回ゲームツクール uGUIをアニメーションさせよう

iTweenを使ったメソッド例

void ShakeRotation(){iTween.ShakeRotation (gameObject, iTween.Hash ("y", 290));

}

→ そのほかの動きをぜひiTweenの動きを参考に実装してみてください。

Page 30: 第10回ゲームツクール uGUIをアニメーションさせよう

Imageのアニメーションについて

Image Typeを「Filled」にしてFilled Amountで1(全てイメージが映っている状態 )〜0(全てイメージが消えている状態)で調整することができます。

Page 31: 第10回ゲームツクール uGUIをアニメーションさせよう

サンプルスクリプトusing UnityEngine;using UnityEngine.UI;using System.Collections;

public class Life : MonoBehaviour {

private Image myLife;

// Use this for initialization void Start () { myLife = GetComponent<Image> (); }

// Update is called once per frame void Update () { myLife.fillAmount -= 0.1f * Time.deltaTime; }}

Page 32: 第10回ゲームツクール uGUIをアニメーションさせよう

ライフバーが減っていきます!

Page 33: 第10回ゲームツクール uGUIをアニメーションさせよう

uGUI以上におしゃれなTextが作れます

Page 34: 第10回ゲームツクール uGUIをアニメーションさせよう

TextMeshProについて* 0.146 BetaではTextMeshProをUIに統合(=ほかのUIと同じようにCanvas上に配置設定 )できます。

Page 35: 第10回ゲームツクール uGUIをアニメーションさせよう

TextMesh Proの方がくっきり映ります

TextMesh Proの方が拡大してもくっきりフォントが映る。

Page 36: 第10回ゲームツクール uGUIをアニメーションさせよう

Point Lightで光らせたりもできます!