スポンサーサイト

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

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に変更してインポートしてください。
ダウンロード


後で説明記事を追記します。たぶん。

Quaternionの読み方

Quaternionの値の見方、解釈についてのメモです。

Quaternionはx,y,z,wの4要素を持っており、x,y,zが回転軸に関する変数でzが角度に関する変数になっています。
任意の回転軸をベクトルn、回転量をスカラーθとすると、クォータニオンqは以下のようになります。

q = ( sin(θ/2) nx, sin(θ/2) ny, sin(θ/2) nz, cos(θ/2) )

Unityで1つの座標軸回りに回転させる(2つの座標軸回りの回転量は0に固定)と以下のように変化します。
x軸回りの回転角をプラス方向に増加させる   → Quaternionのxが増加する、wが減少する
x軸回りの回転角をマイナス方向に増加させる → Quaternionのxが増加し、wが-1から増加する(絶対値が減少する)
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。