(:3[kanのメモ帳]

個人ゲーム開発者kan.kikuchiのメモ的技術ブログ。月木更新でUnity関連がメイン。

(:3[kanのメモ帳]


本ブログの運営者kan.kikuchiが個人で開発したゲームです!

    

複数のAnimationCurveの波形をブレンド(合成)して使う BlendAnimationCurve【Unity】【DOTween】

この記事でのバージョン
Unity 2022.3.21f1


はじめに

UnityはAnimationCurveを使うことで波形を定義し、波形に合わせた数値を取得する事が出来ます。

[SerializeField]
private AnimationCurve _animationCurve;


このAnimationCurveの波形をブレンド(合成)して使えるBlendAnimationCurve

というものを作ったので、今回はその紹介です!



BlendAnimationCurve

続きを読む

DotweenのSetEaseにメソッドを指定して、プログラムで動きを制御する方法 【Unity】【DOTween】

この記事でのバージョン
Unity 2022.2.8f1
DOTween Pro 1.0.381

DotweenのSetEase

Unityで位置や大きさなどのアニメーション、

いわゆるTweenを実装するアセットとしてお馴染みのDOTweenは、

DOTween Pro | Visual Scripting | Unity Asset Store


SetEaseを使う事で値がどう変化するか、どう動くかを指定する事が出来ます。

transform
  .DOMove(Vector3.zero, 0.5f)//座標(0,0,0)に0.5秒かけて移動
  .SetEase(Ease.OutBounce);//SetEaseでバウンドする動きを設定


なお、上記のようにEase.◯◯という形で用意されてる波形を使う事も出来ますし、

(SetEaseを使わない場合のデフォルトはOutBounce)

イージング関数チートシート


InspectorやプログラムからAnimationCurveを作成して、それを指定する事も出来ます。

//Inspectorで波形を指定する用
[SerializeField]
private AnimationCurve _animationCurve;
transform
  .DOMove(Vector3.zero, 0.5f)//座標(0,0,0)に0.5秒かけて移動
  .SetEase(_animationCurve);//Inspectorで指定した動きを設定


そしてタイトル通り、メソッドを指定してプログラムで制御する事も可能です

具体的には以下のように、返り値がfloatで引数に4つのfloatがあるメソッドを指定します。

//DoTween用のSetEase用メソッド
private float GetEaseValue(float time, float duration, float overshootOrAmplitude, float period) {
  //時間が進んだ割合計算
  var timeRate = time / duration;

  //基本ランダムな数値だが、時間が進むほど1に収束していく
  return UnityEngine.Random.Range(timeRate, 1.0f);
}
transform
  .DOMove(Vector3.zero, 0.5f)//座標(0,0,0)に0.5秒かけて移動
  .SetEase(GetEaseValue);//メソッドで動きを設定


これを使えば状況に応じて動的に動きを変えられますし、ランダムな動きも作りやすいです。



表示する対象の制限もしやすく、好きなシェーダーが使えるサイバーエージェント製の軽量デカールシステム「AirSticker」 【Unity】【URP】

この記事でのバージョン
Unity 2022.3.21f1


はじめに

以前、デカール(Decal)という

3Dモデルの表面の形に沿って、画像をスタンプのように投影して表示する公式機能の紹介しましたが、


このデカールは意図せず他のオブジェクトに映り込んだり、


貫通して裏面に表示されてしまったり、


好きなシェーダーが使えなかったりと、いくつか欠点がありました。


という事で今回は、それらの欠点が解消された軽量デカールシステム「AirSticker」の紹介です!

ちなみにサイバーエージェントが開発したOSSで、無料(MIT License)で使えます。




このAirStickerはメッシュを生成し、デカールを表現しているので、先程挙げた欠点は解消されています。


ただし、メッシュを生成しているので、

体に沿ってデカールを動かすみたいな形が変わるデカールには使えません。

他にも双方メリットデメリットがあるので、用途によって使い分けるか、もしくは併用する感じです。

  • URPデカール
    • メリット
      • デカールを貼る処理が高速
      • Zファイティングが起きない
    • デメリット
      • 完全なスキンアニメーション対応が難しい ( Air Stickerで補完できる )
      • ピクセル負荷が高い ( Air Stickerで補完できる )
      • カスタムシェーダーはそのままでは使えない( Air Stickerで補完できる )
  • Air Sticker
    • メリット
      • 処理が軽量( ただし、デカールメッシュ生成はラグがある )
      • 完全なスキンアニメーションを行える
      • カスタムシェーダーをそのまま使える
    • デメリット
      • デカールを貼る処理に数フレームかかる ( URPデカールで補完できる )
      • Zファイティングが起きる

AirSticker/README_JA.md at main · CyberAgentGameEntertainment/AirSticker · GitHub


なお、記事中では以下のアセットを使っています。

Night Club (SRP) - Unity Asset Store
Riko - Unity Asset Store
2D Casual Game UI Set - Unity Asset Store



導入と使い方

続きを読む

CinemachineVirtualCameraの移動や補正中の現在値でなく、目標の位置を取得する方法【Unity】【Cinemachine】

この記事でのバージョン
Unity 2022.3.21f1
Cinemachine 2.9.7


はじめに

カメラ操作を簡単に行えるUnityの公式機能Cinemachineを使ってる際に、



カメラの位置を取得して、その近辺にオブジェクトを置こうと思ったら

カメラが移動中だったため座標がずれた事がありました。


という事で今回はCinemachine(というかCinemachineVirtualCamera)の移動や補正中の現在値でなく、

目標の位置(移動や補正が完了した後の位置)を取得する方法の紹介です!



CinemachineVirtualCameraの目標の位置を取得する方法

続きを読む

3Dモデルの表面の形に沿って、画像をスタンプのように投影して表示するデカール(Decal)の使い方【Unity】【URP】

この記事でのバージョン
Unity 2022.3.21f1


はじめに

今回はUnityのURPで、デカール(Decal)という

3Dモデルの表面の形に沿って、画像をスタンプのように投影して表示する公式機能の紹介です!



イメージとしては以下のような感じ。


ちなみに同様のシステムにサイバーエージェントが開発したOSSの「AirSticker」があります。

(双方メリットデメリットがあるので、用途によって使い分けるか、もしくは併用する感じ)



なお、記事中では以下のアセットを使っています。

Night Club (SRP) - Unity Asset Store
Riko - Unity Asset Store
2D Casual Game UI Set - Unity Asset Store



デカール(Decal)の使い方

続きを読む

Cinemachineでカメラにランダムな振動や手ブレを追加する方法【Unity】【Cinemachine】

この記事でのバージョン
Unity 2022.3.21f1
Cinemachine 2.9.7


はじめに

今回はカメラ操作を簡単に行えるUnityの公式機能Cinemachineを使って、



カメラにランダムな振動や手ブレを追加する方法の紹介です!



なお、記事中では以下のアセットを使っています。

Japanese School Gymnasium - Unity Asset Store
Aoi Character Pack - Unity Asset Store



Cinemachineでカメラにランダムな振動や手ブレを追加する方法

続きを読む

Cinemachineで自然にカメラ(視点)を切り替える方法【Unity】【Cinemachine】

この記事でのバージョン
Unity 2022.3.21f1
Cinemachine 2.9.7


はじめに

今回はカメラ操作を簡単に行えるUnityの公式機能Cinemachineを使って、



自然にカメラ(視点)を切り替える方法の紹介です!



なお、記事中では以下のアセットを使っています。

Japanese School Gymnasium - Unity Asset Store
Aoi Character Pack - Unity Asset Store



Cinemachineで自然にカメラ(視点)を切り替える方法

続きを読む

カメラの操作や管理を簡単に行えるCinemachineの導入と設定、基本的な使い方【Unity】【Cinemachine】

この記事でのバージョン
Unity 2022.3.21f1
Cinemachine 2.9.7


はじめに

Unityには、カメラ操作を簡単に行えるCinemachineという公式機能があります。



これを使うと対象を追いかけたりなどのカメラの操作や管理が簡単に行えます。



という事で今回は、Cinemachineの導入と設定、基本的な使い方の紹介です!


なお、記事中では以下のアセットを使っています。

Japanese School Gymnasium - Unity Asset Store



Cinemachineの導入と設定、使い方

続きを読む

URPでリアルな反射を表示するエフェクトSSR(Screen Space Reflections)を使う方法【Unity】【URP】【ポストプロセス】

この記事でのバージョン
Unity 2022.3.21f1



はじめに

UnityはSSR(Screen Space Reflections)と呼ばれる、

リアルタイムに反射を計算して表示するエフェクトが使えます。

Japanese School Gymnasium - Unity Asset Store


しかし、このSSRはビルドインではポストプロセスとして設定出来たのですが、


URPはサポートしておらず使えません。(HDRPは使える)

Universal Render Pipeline (URP) do not support Screen Space Reflections.


ということで今回はSSRをURPでも使える無料(MITライセンス)アセット

UnitySSReflectionURPの紹介です!


なお、先ほどのアセットはURP対応していないので、ここからは以下のアセットを使います。

Night Club (SRP) - Unity Asset Store



UnitySSReflectionURPの使い方

続きを読む

timeScaleを下げてスローモーションにした時に物理演算がカクカクする場合の対処法【Unity】

この記事でのバージョン
Unity 2022.3.21f1


はじめに

UnityはTimeのtimeScaleを操作する事で簡単に時間の進みを変えられます。



ただし、この値のみを変えると物理演算で動いてる物の動きがカクカクします。

例えば以下のようにボールがバウンドしている時に、


timeScaleを0.1にすると、動きはスローになりますが、コマ送りみたいになります。


という事で今回は、timeScaleを下げてスローにした時にカクカクする場合の対処法の紹介です!



なお、記事中では以下のアセットを使っています。

Japanese School Gymnasium - Unity Asset Store


timeScaleを下げてスローにした時にカクカクする場合の対処法

続きを読む