スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

uGUIのTips

はじめに


UnityでGUIを作る機会があったので、uGUIについて勉強しました。
Textを拡大するとぼけるとか、消えるとか引っかかる部分があったので、対処法をTipsとしてまとめました。

参考


参考図書は「UnityゲームUI実践ガイド 開発者が知っておきたいGUI構築の新スタンダード」です。
残念ながらサンプルプロジェクトのページはリンク切れですが、基本的なuGUIの使い方が記載されており、初心者にはとても勉強になります。Unity 5で書かれていますが、Unity 2017でも特に問題なく参考にできます。


Tips


基本となる端末の解像度に合わせてUIを拡大縮小する

  •  Canvas Scalerコンポーネントの「UI Scale Mode」を「Scale With Screen Size」に変更
  •  CavasScaler1.png CavasScaler2.png 

UIを編集するときは2Dモードにする

 2Dmode.png

uGUIスクリプトの拡張

UIの大きさ

  • Textなどは大きく表示されるため、Scaleを0.01くらいにする必要がある

Textを大きく表示すると汚い

  1. FontSizeを変更する
  2. Textの代わりにTextMeshProを使用する

TextのFont Sizeを変更すると表示されなくなる

  • [Height]の数値を[Font Size]の1.2倍以上にする必要がある

Textのアウトラインを表示したい

  1. Outlineコンポーネントをアタッチする。上下左右にずらしてアウトラインを実現しているっぽい
  2. TextMeshProを使う

InputFieldの入力文字を制限したい

  • ContentTypeを選択する
  • InputField_ContentType.png

自動でレイアウトしたい

EventTriggerコンポーネントはあらかじめ各UIで用意されている以外のイベントに使う

  • OnValuChangeとかOnClickとか以外
  • イベント一覧
  • EventTriger.png 

RectTransformをスクリプトでいじる

  • 位置変更
RectTransform rectTransform = GetComponent();
rectTransform.anchoredPosition = new Vector2(0, 0);
  • 大きさ変更
int width = 100;
int height = 100;
RectTransform rectTransform = GetComponent();
rectTransform.SetSizeWithCurrentAnchors(RectTransform.Axis.Horizontal, width);
rectTransform.SetSizeWithCurrentAnchors(RectTransform.Axis.Vertical, height);

独自UIをスクリプトから生成するときの注意

  1. RectTransformを追加
    • gameObject.AddComponent();
  2. Canvasオブジェクトの下層になるように配置する

曲線をインスペクターで設定する

  • AnimationCurve変数を使う
スポンサーサイト

UnityでTimeクラスもどきを作る

UnityのTimeクラスはどのクラスからでもフレーム番号や時間を取得できるのがとても便利です。
同じことをしようとしたらどのように実装すればよいか試しに実装してみました。

以下の2つに気を付けて実装してみました。
・シングルトンを使用する
・puclic static変数で値にアクセスさせる

Counter.cs


using System.Collections;
using System.Collections.Generic;
using UnityEngine;
// 概要
// 毎フレームカウントアップする
// フレーム番号にどのクラスからでもアクセス可能
// シングルトンでこのコンポーネントは1つしかインスタンスが作成できない
public class Counter : MonoBehaviour {
public static Counter instance;
public static int frame = 0;
void Awake()
{
if (instance == null)
{
instance = this;
DontDestroyOnLoad(gameObject);
}
else
{
Destroy(this);
}
}

void Update () {
frame++;
}
}


useCounter.cs


using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class useCounter : MonoBehaviour {
// Update is called once per frame
void Update ()
{
Debug.Log(Counter.frame);
}
}


Unityのシェーダーで距離画像を取得する

はじめに

特殊な用途かもしれませんがUnityで距離画像を取得したい時があると思います。デプスマップではなく距離マップです。デプスだとオブジェクトの前後関係が判定できるものの、物理的な距離を使いたい場合にはやや問題があります。デプスから距離に変換することも可能ですが、なかなか自分で計算するのは面倒です。(実際はLinear01Depthマクロを使えば求められるのは置いといて。)ここで求める距離はカメラの位置(視点)からの距離ではなく、カメラ座標系におけるZ座標のことです。


距離マップを取得するサンプルのUnity Packageは以下からダウンロードできます。
ファイル名をDistanceCamera.unitypackageに変更してインポートしてください。
ダウンロード


後で説明記事を追記します。たぶん。
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。