ページが見つかりませんでした – How to make games on Unity https://anogame.net How to make games on Unity Thu, 28 Mar 2024 14:38:33 +0000 ja hourly 1 https://wordpress.org/?v=6.4.3 https://anogame.net/wp-content/uploads/2023/10/cropped-siteicon-32x32.jpg ページが見つかりませんでした – How to make games on Unity https://anogame.net 32 32 UniRxのReactivePropertyを使ってUIの更新を楽に行う[Unity] https://anogame.net/unirx-tutorial-reactiveproperty01/ https://anogame.net/unirx-tutorial-reactiveproperty01/#respond Thu, 28 Mar 2024 14:38:32 +0000 https://anogame.net/?p=4340

ゲーム画面に多くのUIが必要なゲームで、そのパラメータを更新する作業は大変です。ここではUniRxのReactivePropertyを使うことでカンタンに更新することが可能になります。ここではチュートリアルとしてシンプル […]]]>

ゲーム画面に多くのUIが必要なゲームで、そのパラメータを更新する作業は大変です。ここではUniRxのReactivePropertyを使うことでカンタンに更新することが可能になります。ここではチュートリアルとしてシンプルな更新方法をご紹介します。

ReactivePropertyを使ってカンタンにUIを更新する

ReactiveProperty(りあくてぃぶぷろぱてぃ)を使いながらUIの更新を行いますが、ファイル構成などが少しいつもと変わるかも知れません。事前知識を覚えてから臨みます。

知っておきたいこと、MV(R)Pパターン

ReactivePropertyを使う場合、MV(R)Pパターンというものに則って実装することが多いです。パターンについてはあまりお話しませんが、3つのクラスに役割を分担して実装を行います。例えとしてクッキーの枚数を管理するつもりになって例文を作成しています。

  • モデルクラス
    • データを扱う
    • クッキーの枚数を知っているのはモデルクラス
  • ビュークラス
    • UIに表示を反映させる
    • クッキーの枚数を知ることができれば、その枚数をUIに表示することができる
  • プレゼンタークラス
    • モデルとビューをつなぐ役割
    • クッキーモデルから枚数を教えてもらい、クッキービュークラスに表示をお願いする

他のたとえだと、財布の中の金額を紙に書き写す場合、お財布がモデル、紙がビュー、それを書き写すあなたがプレゼンター!

UniRxのインストール

Unityのプロジェクトで利用する場合、UniRxというアセットを追加する必要があります。こちらのアセットは無料です。まだ手に入れてない方はアセットストアから入手してください。

https://assetstore.unity.com/packages/tools/integration/unirx-reactive-extensions-for-unity-17276

実際にクッキーの枚数を表示するサンプルをつくる

UniRxのチュートリアルとして、ReactivePropertyを使ってカンタンなサンプルを作ってみましょう。

クッキーの枚数を表示するプログラム作成

前述した通り、ReactivePropertyを利用する場合はMV(R)Pというパターンに則り、3つのクラスを利用します。今回はそれぞれのスクリプトを準備して利用します。

CookieModel

クッキーの数はint型で表せるのでIntReactivePropertyを使ってCount変数を準備します。

using UnityEngine;
using UniRx;

public class CookieModel : MonoBehaviour
{
    public IntReactiveProperty Count = new IntReactiveProperty(0);

    private void Update()
    {
        if (Input.GetKeyDown(KeyCode.Space))
        {
            Count.Value++;
        }
    }

    private void OnDestroy()
    {
        Count.Dispose();
    }
}

クッキーの枚数はスペースキーでカウントアップします。

ReactivePropertyは使わなくなるタイミングでDisposeメソッドを呼んであげてください。

CookieView

UIは色々ありますが、今回はシンプルにTextMeshProUGUIに個数を表示します。

using UnityEngine;
using TMPro;

public class CookieView : MonoBehaviour
{
    public TextMeshProUGUI countText;
    public void SetCount(int count)
    {
        countText.text = count.ToString();
    }
}

CookiePresenter

先の2つのスクリプトはお互いが干渉しない構成になっています。Presenterでは2つのクラスを仲介する役割を担います。

using UnityEngine;
using UniRx;

public class CookiePresenter : MonoBehaviour
{
    public CookieModel cookieModel;
    public CookieView cookieView;

    private void Start()
    {
        cookieModel.Count.Subscribe(count => cookieView.SetCount(count));
    }
}

Subscribeメソッドではラムダ式で変化した数値を受け取ることが出来ます。

スライム

Subscribeしたタイミングでパラメータを受け取ることが出来るのも良い点ですね

テスト用シーンをセットアップ

スクリプトが準備できたら、実際にデモンストレーションしてみましょう。

  • テキストを追加する
    • UI>Text – TextMeshProを追加
    • 場所は画面中央に位置する(見やすければOK)
  • CookieViewコンポーネントを追加
    • ゲームオブジェクトにCookieViewコンポーネントを追加
    • 新規GameObjectでもいいし、テキストで作成されたものでもOK
    • CountTextに作成したTextMeshProのオブジェクトをセット
  • CookieModelコンポーネントを追加
    • 空のGameObjectを作成(名前変更:Cookie)
    • CookieゲームオブジェクトにCookieModelをアタッチ
  • CookiePresenterコンポーネントを追加
    • 新規にGameObjectを作ってもいいですが、CookieModelと同じゲームオブジェクトを使いまわしましょう
    • インスペクターにセット。それぞれセットできるコンポーネントは1つずつなので、セットできるものをアタッチ
      • Cookie View
      • Cookie Model

実際に動かしてみる

今回は数字が増えるのみなので、あまり面白いサンプルではありませんが、それでもテキスト更新をカンタンに実装出来ました。RPGやシミュレーションゲームなどのパラメータが多いゲームなどではReactivePropertyを使うことで複雑な処理をスッキリさせることが出来るようになりますよ!

]]>
https://anogame.net/unirx-tutorial-reactiveproperty01/feed/ 0
Admob-アダプティブバナーの実装とUnitBaseの改良![Unity] https://anogame.net/admob-adaptive-banner/ https://anogame.net/admob-adaptive-banner/#respond Sun, 17 Mar 2024 07:01:34 +0000 https://anogame.net/?p=4350

広告実装の基本であるバナーの実装を行います。内容としては前回のAdmobの基礎と変わらない部分が多いですが、便利にするための処理がいくつか含まれます。C#の実装についても少しずつ理解を深めましょう。 バナー広告を実装する […]]]>

広告実装の基本であるバナーの実装を行います。内容としては前回のAdmobの基礎と変わらない部分が多いですが、便利にするための処理がいくつか含まれます。C#の実装についても少しずつ理解を深めましょう。

バナー広告を実装する上での注意点

画面の幅にいい感じに合わせてくれるアダプティブバナーは少しだけ変更点があります。またアプリ終了時やシーン切り替え時などにバナーが不要になるタイミングで削除する必要があります。

設定が出来ること、アダプティブバナー

バナー広告では次のようなものを設定することが出来ます。とは言っても使われるものは限られてくると思います。

  • Type
    • Standard
    • SmartBanner
    • AnchoredAdaptive
  • Position
    • Top
    • Bottom
    • TopLeft
    • TopRight
    • BottomLeft
    • BottomRight
    • Center

今回はこの中でもアダプティブバナーを利用するための設定とUnitIDをインスペクターでセットする処理を実装します。

バナー広告の終了処理

前回のバージョンでは一度表示した広告がずっと出続けてしまいます。意図的にバナーを非表示にしたり、シーンが変わった時などに、バナーを非表示にしたいことがあります。

ここではバナー表示を行っているオブジェクトが消された場合にバナーを削除する方法をご紹介します。

アダプティブバナーに変更する

まずはアダプティブバナーへの切り替えを行います。

スクリプト変更

変更するスクリプトは「AdmobUnitBanner.cs」変更するメソッドはShowBannerメソッドを数行変更します。

   public void ShowBanner()
    {
        if (bannerView != null)
        {
            Debug.Log("Destroying banner view.");
            bannerView.Destroy();
            bannerView = null;
        }

        // AdSizeを新たに作成
        AdSize adaptiveSize = AdSize.GetCurrentOrientationAnchoredAdaptiveBannerAdSizeWithWidth(AdSize.FullWidth);

        // 作成したAdSizeを引数に指定する
        bannerView = new BannerView(
            bannerUnitId,
            adaptiveSize,
            AdPosition.Bottom);

        // ---------以下略---------
}

動かして確認

スクリプトが変更できたらゲームを動かして見てください。画面の横幅に応じてバナーのサイズが切り替わってくれたと思います。

広告実装をさらに便利にする

広告の変更自体は以上で終了ですが、今後の開発を便利にするための処理を加えたいと思います。

広告IDをインスペクターでセット出来るようにする

まずは広告IDをインスペクターでセット出来るように変更します。これは便利にしつつ、再利用性もアップさせることが出来ます。

AdmobUnitBase

Admobの広告はAndroidとIOSの広告IDいずれかをセットする必要があります。また、1つのアプリ内でも表示する場所やシーンによってIDを変更することがあります。そのため各ユニットのインスペクターでそれぞれのIDを設定出来ると大変便利です。スクリプトを直す必要もありませんし。


public abstract class AdmobUnitBase : MonoBehaviour
{
    [SerializeField] private string unitIDAndroid;
    [SerializeField] private string unitIDIOS;

    protected string UnitID
    {
        get
        {
#if UNITY_ANDROID
            return unitIDAndroid;
#elif UNITY_IOS
            return unitIDIOS;
#else
            return "";
#endif
        }
    }

    // -----------以下略-----------

}

AdmobUnitBanner

Baseクラスで追加したプロパティを利用して、コードをスッキリさせます。こちらのコードはすべて記載しますので、エラーが出る場合はBaseクラスなどで実装漏れがないか確認してみてください。

using UnityEngine;
using GoogleMobileAds.Api;

public class AdmobUnitBanner : AdmobUnitBase
{
    private BannerView bannerView;

    protected override void Initialize()
    {
        ShowBanner();
    }

    public void ShowBanner()
    {
        if (bannerView != null)
        {
            Debug.Log("Destroying banner view.");
            bannerView.Destroy();
            bannerView = null;
        }

        // AdSizeを新たに作成
        AdSize adaptiveSize = AdSize.GetCurrentOrientationAnchoredAdaptiveBannerAdSizeWithWidth(AdSize.FullWidth);

        // 作成したAdSizeを引数に指定する
        bannerView = new BannerView(
            UnitId,
            adaptiveSize,
            AdPosition.Bottom);

        bannerView.OnBannerAdLoaded += () =>
        {
            Debug.Log("ロードされました - 表示します");
            bannerView.Show();
        };
        bannerView.OnBannerAdLoadFailed += (LoadAdError error) =>
        {
            Debug.LogError("ロード失敗しました");
        };

        //リクエストを生成
        var adRequest = new AdRequest();
        bannerView.LoadAd(adRequest);
    }

}
スライム

コード内にIDが入らないため、見た目もスッキリ

フェアリー

ただしIDはBaseクラスに宣言してあるので、クラス構成を忘れないようにしてくださいね

オブジェクト破壊時に広告を解除する処理

バナーのオブジェクトがDestroyされた時、バナーを消す処理も実装します。こちらはOnDestroy時に作られているバナーがある場合、削除を行うようにします。もともとあった削除処理も今回の変更に合わせて修正を行います。コードも再びすべて載せますので、違う部分などを見比べて見てください。

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using GoogleMobileAds.Api;
using System;

public class AdmobUnitBanner : AdmobUnitBase
{
    private BannerView bannerView;

    protected override void Initialize()
    {
        ShowBanner();
    }

    public void ShowBanner()
    {
        UnitDestroy();

        AdSize adaptiveSize = AdSize.GetCurrentOrientationAnchoredAdaptiveBannerAdSizeWithWidth(AdSize.FullWidth);

        bannerView = new BannerView(
            UnitId,
            adaptiveSize,
            AdPosition.Bottom);

        bannerView.OnBannerAdLoaded += () =>
        {
            Debug.Log("ロードされました - 表示します");
            bannerView.Show();
        };
        bannerView.OnBannerAdLoadFailed += (LoadAdError error) =>
        {
            Debug.LogError("ロード失敗しました");
        };

        //リクエストを生成
        var adRequest = new AdRequest();
        bannerView.LoadAd(adRequest);
    }

    private void UnitDestroy()
    {
        if (bannerView != null)
        {
            Debug.Log("Destroying banner view.");
            bannerView.Destroy();
            bannerView = null;
        }
    }

    private void OnDestroy()
    {
        UnitDestroy();
    }
}
]]>
https://anogame.net/admob-adaptive-banner/feed/ 0
UnityでLive2Dのモデルを動かすための手順 https://anogame.net/unity-live2d-tutorial/ https://anogame.net/unity-live2d-tutorial/#respond Tue, 12 Mar 2024 02:06:04 +0000 https://anogame.net/?p=4316

配信でスライムちゃんに喋らせたいなと思い、Live2DのデータをUnityで動かすための方法を調べました。なぜスライムちゃんのデータがあるかって?・・・・それではやっていきましょう。 どんなものが出来上がるのか 今回はL […]]]>

配信でスライムちゃんに喋らせたいなと思い、Live2DのデータをUnityで動かすための方法を調べました。なぜスライムちゃんのデータがあるかって?・・・・それではやっていきましょう。

どんなものが出来上がるのか

今回はLive2Dのモデルをインポートし、呼吸・まばたき・AudioSourceに合わせて口を動かす処理を実装します。

完成状態

Live2DのモデルをUnityで動かすことが出来るようになります。

  • 呼吸・息づかい
  • 目パチ・まばたき
  • AudioSourceに合わせて口を動かす

プロジェクトの準備・パッケージ入手

導入作業

モデルを表示する

モデルを表示する上で注意する点があります。それは一回動かすということです。

  • サンプルモデルをプロジェクトに追加
    • アセットなどがある場所にプレファブが作成されます。
  • プレファブをシーンビュー・ヒエラルキーに追加する
    • この時点では何も表示されない場合があります
    • 一度Playモードで再生する。

一度Playモードに入れないと表示されません。この儀式は最初の1回だけで以降は気にする必要がありません。私はこれがよく分からずに表示されない原因を色々と調べてました。やれやれ・・・

呼吸させる

呼吸をさせないと、モデルが生きた感じがしません。モデルを追加したらまっさきにやっておきたい!これだけでそれっぽいでしょ。

あとから気づいたんですが、ここの設定も呼吸を制御しているオブジェクトに「CubismHarmonicMotionParameter」コンポーネントをアタッチする必要があります。
モデルによってはついてない場合もありますので、その場合は次項のまばたきで追加する方法を参考にしてください。

  • モデルのルートにCubismHarmonicMotionControllerコンポーネントをアタッチ
    • 追加したモデルのルートゲームオブジェクト(Cubism系がいっぱいくっついてるやつ)に「CubismHarmonicMotionController」コンポーネントを追加します。
    • インスペクタのパラメータ変更
      • Blend Mode:Override
  • ParamBreathゲームオブジェクトを探して、CubismHarmonicMotionParameterコンポーネントをくっつける
    • モデルの子供のオブジェクトの中に、「ParamBreath」という名前のゲームオブジェクトがあります。そのオブジェクトを選択してください。(スライムちゃんの場合はSlime_2>Parameters>ParamBreath)
    • ParamBreathゲームオブジェクトを選択し、「CubismHarmonicMotionParameter」コンポーネントを追加してください。
    • 上記手順の設定であれば、インスペクタでのパラメータ変更は不要です。

まばたき

まばたきも必須級の設定!全然ナチュラル感が変わるからね!

モデルによっては簡単にできるかも知れませんが、そうじゃない場合は下の囲みをしっかりと理解してから操作してください。

まばたきをさせるには少しだけモデルの構成を知っておく必要があります。

  1. まばたきはCubismParametersInspectorの「左目 開放」「右目 開放」を操作することで行います
  2. これらのパラメータはモデルの下にある、以下のゲームオブジェクトと連携しています
    • Parameters>ParamEyeLOpen
    • Parameters>ParamEyeROpen
    • 対応したゲームオブジェクトがわからない場合、それっぽいParam系のゲームオブジェクトを選択して、CubismDisplayInfoParameterNameコンポーネントのDisplayNameに何か文字をいれてから、CubismParametersInspectorを表示してみてください。表記が変わっています。まばたきに関係しているゲームオブジェクトをそこから探してください。
  3. 上記オブジェクトを目の開閉で利用する場合、「CubismEyeBlinkParameter」というコンポーネントがアタッチされている必要がある

はい、この時点でモデルによってはCubismEyeBlinkParameterコンポーネントがアタッチされていない人がいるかも知れません。目の開閉で使われるオブジェクトが一つのモデルもあるかも知れません。いずれの場合でも、目のまばたきを行うためのパラメータと対応しているオブジェクトにCubismEyeBlinkParameterコンポーネントをアタッチしておいてください。

  • モデルのルートオブジェクトに以下のコンポーネントを追加。ただしすでに追加されている場合はスキップします。
    • CubismEyeBlinkController
      • Blend Mode:Myltiply
    • CubismAutoEyeBlinkInput
      • Mean:まばたきを行って次のまばたきを行うまでのインターバル(秒)
      • Maximum Deviation:Meanで設定した時間からの偏差。0にすると毎回Meanごとにまばたきを行うが、ここで指定した数値でランダムな瞬きを行う。
      • Timescale:まばたきの速さ

1ループしかしてないので同じパターンになってますが、実際にはまばらにまばたきしてます。

追加機能

ここからはとりあえず覚えておきたい機能。実際の表現で使うにはもう一捻り必要になりますがとりあえず覚えておこう。

AudioSourceの音に合わせて口を動かす

ここではAudioSourceで音がなっている間、口を動かすための処理を実装します。事前に録音した音に合わせてアニメーションするので、リアルタイムには弱いですが応用は効きます。設定の変更点としてはまばたきと同じような構成になります。

  • 口を開閉するオブジェクトに「CubismMouthParameter」コンポーネントをアタッチ
  • モデルのルートオブジェクトに以下のコンポーネントをアタッチ
    • CubismMouthController
      • Blend Mode:Override
    • CubismAudioMouthInput
      • Audio Input:後で追加するAudioSourceコンポーネント
      • Gain:10
      • Smoothing:1
  • 音を鳴らすAudioSourceを追加
    • 別のオブジェクトにする必要は無いですが、今回は分けて作成
    • 空のゲームオブジェクトにAudioSourceをアタッチ
      • 起動時に何か音を鳴らしたい場合はAudioClipに音源ファイルを追加してください
    • 作成したゲームオブジェクトをCubismAudioMouthInputのAudio Inputにセット

設定出来たら対象のAudioSourceで音を鳴らすと口が動いてくれます。開閉具合が気にいらない場合はGainなどのパラメータを調整しましょう。

]]>
https://anogame.net/unity-live2d-tutorial/feed/ 0
オープンワールドで利用されるLOD Groupを使いこなして高速化処理! https://anogame.net/lod-group-tutorial/ https://anogame.net/lod-group-tutorial/#respond Sat, 17 Feb 2024 13:14:51 +0000 https://anogame.net/?p=4298

ゼルダの伝説 ブレスオブザワイルドやPAL World(パルワールド)などのオープンワールドゲームなどでは多くのオブジェクトを表示する必要がありますが、そのすべてを大量に表示してしまうと描画負荷がとんでもないことになりま […]]]>

ゼルダの伝説 ブレスオブザワイルドやPAL World(パルワールド)などのオープンワールドゲームなどでは多くのオブジェクトを表示する必要がありますが、そのすべてを大量に表示してしまうと描画負荷がとんでもないことになります。そのような問題を解決するために、対象のオブジェクトがどのぐらい映っているかに対して、ハイポリ・ローポリ・非表示!などを簡単に切り替える方法がLOD Groupというものを使うことで簡単に実装できます!

LOD Groupとはどんなもの?

LODとはLevel of Detailの略です。オープンワールドゲーム以外でも、Apexのようなバトロワ系のゲームでも遠くのアイテムは見えなくなったりしています。こういったところでもLOD Groupが利用されています。

LOD Groupを利用した例

まずは見たほうが早い!ということでサンプルとしてバナナを3段階でLOD Groupに設定しました。右側がLOD Groupで、左側は何も設定しいないバナナです。

  • 近くだとちゃんと見える
  • 少し離れるとただの黄色いCube
  • しっかり離れると見えなくなる

この見え具合に関してはインスペクターでお手軽に調整が可能です。今回はCubeにサクッと切り替わっていますが、実際にはローポリのモデルに段階的に切り替えることで、自然に描画負荷を落とすことが出来ます。

LOD Groupに出来ること

LOD Groupでは次のようなことが設定可能です。

  • カメラから表示物が映っている大きさに応じて、表示するオブジェクトを切り替える
  • 各LODのトライアングル数の確認
  • 設定したLODのプレビュー
  • Project Settingでの大本の表示割合調整(Bias:バイアス)
  • Cross Fadeの設定(制限あり)

今回は上4つに関して解説します。Cross Fadeは2022以上が必要だったり色々と設定に制限があるため、また機会があればね!

LOD Groupの使い方

では実際にLOD Groupを使って見たいと思います。表示を切り替えたいモデルがある場合は利用してもかまいませんが、私の方では色の異なるCubeをLOD Groupとして設定してみようと思います。

LOD Group設定:準備まで

まずは設定を入れるために必要なものを用意します。ここでは色違いのCubeをシーン内に2つ用意してください。実際にLODとして扱いたいモデルがある場合はNearCubeとFarCubeを適宜置き換えてください。

  • テスト用のマテリアルを2つ用意
    • 近い時用のMaterial作成
      • 名前変更:NearMaterial
      • 色は青色
    • 離れた時用のMaterial作成
      • 名前変更:FarMaterial
      • 色は赤色
  • テスト用のオブジェクトを作成
    • 近い時用のCube作成
      • 名前変更:NearCube
      • マテリアルを変更:NearMaterial
    • 遠い時用のCube作成
      • 名前変更:FarCube
      • マテリアルを変更:FarMaterial

LOD Groupコンポーネント設定

ものが準備できたらあとは切り替え処理を作っていきます。

  • 空のGameObjectを作成
    • 名前変更:lod_test
    • コンポーネント追加:LOD Group
  • ヒエラルキー調整
    • NearCubeをlod_testの子供に配置
    • FarCubeをlod_testの子供に配置
    • 各CubeのPositionを0,0,0に変更(重なるようにしてください)
  • 不要なLODを削除
    • LOD_2を右クリック>Deleteで削除
  • LODにオブジェクトを登録
    • LOD 0を選択
      • 下部のトグルをオープン
      • +ボタンを押す
      • オブジェクトセット出来る場所にNearCubeをセットする
    • LOD 1を選択
      • 下部のトグルをオープン
      • +ボタンを押す
      • オブジェクトセット出来る場所にFarCubeをセットする
  • 表示割合の調整
    • カメラをドラッグアンドドロップで、どのぐらいの大きさで表示切り替えて良さそうかの目処を付けたり確認を行う。
    • 各LOD(とCulled)の境目をドラッグアンドドロップで調整
    • もう一度カメラをドラッグアンドドロップで確認。納得の行く割合に出来たらOK

動かしてみて確認

設定と確認の時点である程度満足行っていれば、あとはゲームで動かして最終確認をしてみます。

ちなみに自分の設定は下記の様な配分でした。ご参考までに!

色んなプラットフォームによって対応パラメータを変える(Bias)

おそらくデフォルトではBiasが2になっています。この数字はLODの表示割合に対する係数となっています。この数字はPCなどではちょうどよくても、モバイル向けに変更したい場合、同様の割合では耐えられない可能性があります。またこれらを個別で変える場合、プレファブなどの数が多いと対応は非常に困難です。

そういった場合、プロジェクトセッティングから一括で変更することが可能です。

  • Project Settings
    • Quality>LOD Biasの数字を変更
    • この数字は大きいほどスペックを要求します。

モバイル向けでは0.5とかガッツリ下げてしまっても良いと思います。もちろんそれで必要なオブジェクトが見えなくならないように気をつけて調整を行ってください。

]]>
https://anogame.net/lod-group-tutorial/feed/ 0
#3 道をぐにゃぐにゃ曲げたりアップダウンさせよう[Forever+Unity] https://anogame.net/endless-run-game-forever-03-curve/ https://anogame.net/endless-run-game-forever-03-curve/#respond Sat, 27 Jan 2024 11:29:25 +0000 https://anogame.net/?p=4215

まっすぐの道だけでは面白くないのは必至。そもそもまっすぐ並べるだけならForeverなんてアセットを使うメリット無し! 道を曲げるための設定を行う 設定を行う部分は主に2点あります。ただし床のMesh状態によっては曲げる […]]]>

まっすぐの道だけでは面白くないのは必至。そもそもまっすぐ並べるだけならForeverなんてアセットを使うメリット無し!

道を曲げるための設定を行う

設定を行う部分は主に2点あります。ただし床のMesh状態によっては曲げるための下ごしらえが別に必要になります。それに関しては後ほど。

Sequenceシーケンスの設定を変更する

道を曲げるためには、シーケンスの設定を変更する必要があります。これを行わないとメッシュの頂点が変更されず、ただ回転してポリゴンが配置されてしまい、ぐにゃぐにゃした曲がった道になってくれません。

  • 道のパーツになっているLevelSegmentコンポーネントを探す
  • Objects(数字)タブを開く
    • 開くと自身もしくは子供のオブジェクトが表示される
    • 曲げたいメッシュを持っているオブジェクトを選択
  • Extrusion Settingウインドが表示されるので注目
    • Extrusion
      • Bend Meshにチェックを入れる
    • Splines
      • Mesh Collider:Extrude

オリジナルのMeshを使っている場合はさらに設定が必要です。曲げたいモデルの設定を開き、Meshes:Read/Writeにチェックを入れてください。

PathGeneratorでどのぐらい曲げるかを調整

まずはゲーム全体を通してどのぐらい道を曲げるか指定します。Path Generator(Random Path Generator)を選択し、Orientationタブを開きます。ここで曲げたい方向に対してチェックを入れます。

  • Pitch:進行方向に対してアップダウンさせる
  • Yaw:進行方向に対して左右に曲がる
  • Roll:進行方向に対して体を左右に傾ける様に曲がる

下図は左右方向にのみ設定を入れているサンプル値です

  • Restrict:チェックを入れると、回転角度に対して制限を設けることが出来ます
    • Restrict Min:Yaw方向に対して設定値以下の角度にならないようにする
    • Restrict Max:Yaw方向に対して設定値以上の角度にならないようにする。
  • Target Step:シーケンスごとにどのぐらい角度が変化するか
    • Min:1シーケンスで変化する下限
    • Max:1シーケンスで変化する上限
  • Turn Rate:曲がり具合
    • Min:1シーケンスでの曲がり具合の下限
    • Max:1シーケンスでの曲がり具合の上限
]]>
https://anogame.net/endless-run-game-forever-03-curve/feed/ 0
2.2腕の付け根と足の付根を作る https://anogame.net/blender-2-2-body-points/ https://anogame.net/blender-2-2-body-points/#respond Wed, 24 Jan 2024 13:26:22 +0000 https://anogame.net/?p=2942 腕・足の付け根を作る

頭身のナビを参考に付け根部分の円を作っていきます。

円を作成

最終的には体と頭はくっつける予定ですが、一旦別オブジェクトとして作成したいと思います。

  • オブジェクトモードで円を作成
    • Tabキーでオブジェクトモードに切り替え
    • Shift+Aで円を追加
    • 左下のメニューから頂点数を8に変更して確定
  • この時点でコレクションの円の名前をBodyに変更
    • これ自体はそこまで重要では無いですが、説明などのしやすさのために行います

腕の付け根の位置をずらす

腕だけ一旦位置を合わせます。正直この時点では足の円の邪魔にならない程度にズレてるだけでも構いません。足の付根と一緒に合わせるのが楽です。

  • 腕の付け根を回転させる
    • 付け根の頂点をすべて選択
    • R>Y>90
  • 正面から見て
    • 腕の付け根の上部が首の付け根よりちょっと下
    • 体の中心からの位置と、鼻の付け根ぐらいまでの長さがだいたい同じ位置
  • 横から見て
    • 付け根の大きさは耳の大きさより少し
    • 付け根の中央は耳より少し後頭部側

足の付根用の円を作る

基本的には腕と同じ。回転具合やスケールなどが変わります。

  • Bodyを選択した状態で編集モードへ移行
  • 円を追加
    • Shift+Aで円
    • 頂点の数は同様に8
  • 回転させる
    • 足の付根用の頂点をすべて選択
    • R>Y>-20
  • 位置を合わせる
    • 真ん中より少し下
    • 横から見て腕の中心をあわせる
  • 大きさ調整
    • 腕の付け根より1.5倍ぐらいが目安
スライム

頭身が少し小さめなので、短足になりそう

首の付根とおっぱいも作る

首の付け根

首の付根は首の大きさに合わせます。体との接続時に向きなどの微調整は行います。

  • 円を作る
    • Shift+Aで円を追加
    • 頂点数は8
  • 位置を合わせる
    • 正面から見て移動
    • G>Zで垂直方向に制限、首の付け根付近に持ってくる。腕の付け根よりちょい上ぐらい
    • 横から見て、中心が腕の付け根中心と合わせる

胸部

このあと上半身を作る際、胸部があると作りやすいです。

  • UV球を作成
    • Shift+AでUV球を追加
    • 左下の設定を変更
      • セグメント:10
      • リング:4
      • 回転X:90
  • 位置の調整
    • 位置調整は大きさ調整を同時に行ってください。大きさによって多少前後します
    • 正面から見て
      • 耳からまっすぐ下に線をおろした先に球の中心が来るように合わせる
      • 腕の付け根の下側とUV球の上側が接するぐらい
    • 横から見て
      • 球の半球が腕の前部より少し前になるぐらい
  • UV球の後ろ半分を削除
    • 横からの視点に切り替える
    • 透過表示を切り替え
    • UV球の後ろ側の頂点を範囲選択する
    • X>頂点から選択された頂点を削除する

仕上げ:ミラーモディファイア

それぞれのパーツを作れたら、左右対称で作業を行いたいのでミラーモディファイアを利用します。

首の左半分の頂点を削除

ミラーを適応する前に、首の円は左半分の頂点が不要です。選択後にX>頂点から削除を行ってください。

ミラーモディファイアを追加する前に

Bodyのトランスフォームが、今までの手順で行うと、以下のようになっているかも知れません。

この場合、ミラーモディファイアを追加すると変な方向に対称に映ってしまいます。オブジェクトモードに切り替えて、Bodyオブジェクトを選択した状態でオブジェクト>適応>回転を選択します。

そうすることで、現在の回転具合が基準になります。0,90,0だった回転が0,0,0になっているのが確認出来ると思います。事前に0,0,0になっている場合はこの作業は不要です。が、知っておくのはいいかも。

ミラーモディファイアを追加

首の頂点削除ができたらミラーモディファイアを追加します。ミラーが反映されると、反転する起点がおかしい場合があります。その時はオブジェクトモードで原点設定を行う必要があります。

  • Bodyが選択されていることを確認
  • ミラーモディファイアを追加
    • スパナマーク>モディファイアーを追加
    • ミラーモディファイア
  • ミラーモディファイアの設定
    • X軸にチェック
    • クリッピングにチェック
]]>
https://anogame.net/blender-2-2-body-points/feed/ 0
2.1体のモデリング制作着手 https://anogame.net/blender-2-1-body-start/ https://anogame.net/blender-2-1-body-start/#respond Mon, 22 Jan 2024 11:07:22 +0000 https://anogame.net/?p=2819

頭部の制作が終わったのでここからは体のモデリングに移りたいと思います。 体のモデリングの進め方と注意点 今回は4頭身ぐらいのキャラクターを目安に作って行きたいと思います。実際のモデリングでは下絵を目安に作ることも多いと思 […]]]>

頭部の制作が終わったのでここからは体のモデリングに移りたいと思います。

体のモデリングの進め方と注意点

今回は4頭身ぐらいのキャラクターを目安に作って行きたいと思います。実際のモデリングでは下絵を目安に作ることも多いと思いますが、今回はざっくり目安で作って行きたいと思います。

頭身の目安

ちょっと気持ち悪いですが、これまで作った顔に対して、4頭身で作りたい場合、下図のようなものをイメージします。

制作の取っ掛かり

体のモデリングを行う際、はじめに以下の目安を円で作成します。

  • 腕の付け根
  • 足の付け根

これは、体を作るときに最終的にどこに接続するかなどを見失いにくくするための工夫です。

スライム

モデリングの練習だけなら棒人間とか作った方が練習にはなりそうな気もします

頭身目安のUV球をつくる

まずは目安になるUV球を作っていきましょう。

頭と同じ大きさのUV球を作る

目安の球は最終的には削除されるので、分割数とかはあまり気にしなくても大丈夫です。

  • オブジェクトモードに切り替える
  • UV球を作成
    • Shift+Aコンテキストメニュー
    • UV球を選択
  • 大きさを変更
    • 1キーで正面からにしておく(移動時に軸ブレを防ぐため)
    • UV球を選択した状態でSキーとマウスを使って大きさを調整
    • 顔の位置に合わせたりして見比べてください

4頭身分並べる

頭と同じ大きさのUV球が作れたら、それを複製して縦に並べましょう。

  • 最初に作成したUV球を地面すれすれに移動させる
    • G>Zで縦方向に制限
  • 複製
    • UV球を選択した状態
    • Shift+D>Zで複製しつつ縦方向に移動制限
    • Shift+Dはマウスカーソルがシーンコレクションや他のビューの上にあるとできないので注意
  • 複製前のUV球に乗っかるように調整
    • この手順を繰り返して4つの球が縦に並ぶようにする

目安のUV球を結合する

作ったUV球は一つにまとめて置きましょう。

  • オブジェクトモードにしていることを確認(今回はずっとオブジェクトモードのはず)
  • 複製を繰り返したUV球をすべて選択
    • 最初に作った「球」を最後に選択する
  • 結合を行う
    • Ctrl+Jで結合
    • 最後に選択されたオブジェクトの名前で結合がされます
]]>
https://anogame.net/blender-2-1-body-start/feed/ 0
水面をShaderGraphで作る!Stylized Water[Unity] https://anogame.net/stylized-water-shader-graph/ https://anogame.net/stylized-water-shader-graph/#respond Sun, 21 Jan 2024 00:44:02 +0000 https://anogame.net/?p=4177

シェーダーグラフを使って、水の演出を作ってみましょう!自作できるからカスタマイズも簡単!水以外に溶岩にしたり、お好みに変更可能ですよ! 今回作れるもの まずはどういったものが作れるか見てください。イメージした水の表現に近 […]]]>

シェーダーグラフを使って、水の演出を作ってみましょう!自作できるからカスタマイズも簡単!水以外に溶岩にしたり、お好みに変更可能ですよ!

今回作れるもの

まずはどういったものが作れるか見てください。イメージした水の表現に近いでしょうか?色やゆらぎ具合はカスタマイズ出来ます。下図はデモンストレーション用にかなり派手にぐにゃぐにゃさせてますが、もっとゆるやかな表現も出来ます。

完成品

水がゆらいで、キワキワのところでは泡が発生。泡の量や揺れ具合などはパラメータで調整可能です。もちろん水の色も変更することが出来ます!水の色は上部と下部で別れていますので、底に行くほど・・・みたいな調整も可能です。

覚えられるもの

こんかいは基本的にシェーダーグラフのみでものを作ります。サブグラフを利用することで、モジュール的なものが作れるのでそのあたりは勉強になるかも

  • Universal Render Pipelineの設定
  • Shader Graph
    • SubGraphを使った実装

プロジェクトの準備と設定反映

今回の水面を作るためのプロジェクトはUniversal Render Pipeline(URP)のプロジェクトが必要になります。また、デフォルトの設定のままでは作ることが出来ないので、その設定変更を行います

プロジェクト作成

Unity Hubのテンプレートから、3DのプロジェクトでUniversal RPが適応されているものを選択してください。

すでに作られているプロジェクトをURP対応することも可能ですが、影響範囲が大きいので注意が必要です。

Scriptable Render Pipeline Settingsの変更

URPでは、スクリプタブルオブジェクトに設定をしています。また、これらを切り替えることでクオリティの変更などが出来るようになっています。まずは現在適応されている設定ファイルを探してください。

  • Project Settings>Graphicを開く
  • Scriptable Render Pipeline Settingsのファイルをクリックするとプロジェクトビューに対応ファイルがハイライトされます。
  • ハイライトされたファイルが現在利用されているアセット(ファイル)

ファイル(デフォルトだとURP-HighFidelity)を選択したら、インスペクターで下記2点の設定を追加します

  • Depth Textureにチェックを入れる
  • Opaque Textureにチェックを入れる

水面に当たるCubeを作成

プロジェクト内に、水にあたる部分のCubeを作成します。

  • Cubeを作成
    • 3D Object>Cube
    • 位置と大きさを調整
  • BoxColliderコンポーネントは不要なので削除

Shader Graph作成

今回は一つのシェーダーグラフで完結させず、計算させるだけの部分をサブグラフに分けることで一つのグラフが肥大化するのを避けてみましょう。

Sub Graphを作る

  • SubGraphを作る
    • プロジェクトビューで右クリック>Create>Shader Graph>Sub Graph
    • 名前をCalcDepthFadeに変更
    • ダブルクリックで編集
  • 変数を作成
    • Distance:float(Vector1)
  • Output
    • Inputsの項目を変更
    • Float(Vector1)を出力出来るようにする
  • 各ノードの設定注意ポイント
    • ScreenPosition
      • Mode:Raw
    • Scene Depth
      • Sampling:Eye

深度の計算では、スクリーンでの深さとシーン内の座標を利用して計算を行います。

フェアリー

各グラフは作業が一段落するたびに、左上のSave Assetボタンから保存を行いましょう!

メインのシェーダーグラフを作成、とりあえず版を作る

まずはサブグラフの動きがちゃんと出来ているかを確認するためのものを作ります。かなり雑です。

  • シェーダーグラフを作成
    • Create>Shader Graph>URP>Unlit Shader Graphを選択してください。
    • 名前をStylizedWaterShaderに変更
    • ダブルクリックで編集
  • Graph Inspectorの設定を変更
    • Surface Type:Transparentに変更
    • これやってないと透けません
  • 変数を追加
    • WaterDepth:Float(Vector1)
      • 初期値:10

マテリアルを作成して適応してみる

各シェーダーが作れたら、Cubeに適応してみます。

  • 新規マテリアルを作成
    • Create>Material
    • 名前変更:StylizedWaterMaterial
    • シェーダー変更:Shader Graph>StylizedWaterShader
  • CubeにStylizedWaterMaterialをセット
    • Rendererに入れてもいいし、シーンビューにドラッグアンドドロップしてもOK

下図のようにFogがかかった感じになっていれば順調です。

深度によって色味が変わるので、Y方向の高さを上げるともう少し白く見えたりします。

水っぽくしていく

深度ごとの色調整

  • 変数を追加
    • Color追加:水底の色
      • 変数名:DeepWaterColor
      • 濃い青色
    • Color追加:浅瀬の色
      • 変数名:ShallowWaterColor
      • 淡い青色

オブジェクトの配置によっては深度が不十分で深い水の色が反映されない可能性があります。その場合はマテリアルのWaterDepthのパラメータを変更してみたりして、調整を行ってください。

水に動きをもたせる

水は揺らいでなんぼ。というころで水を動かすためのグラフを作成します。

STEP
WaterMovementサブグラフを作成

動きの処理はサブグラフのもたせます。

  • Create>Shader Graph>Sub Graphから作成
    • 名前:WaterMovement
    • ダブルクリックで編集
  • 変数を追加
    • Float(Vector1):スピード用
      • 名前変更:Speed
    • Float(Vector1):タイルのスケール用
      • 名前変更:Scale
  • Output
    • 出力の型:Vector2
    • 名前変更:Output
STEP
適応処理その1

作ったWaterMovementを、StylizedWaterShaderに適応します。好きな位置に作って大丈夫ではありますが、先程作ったものの上部に作成しています。画像右下のScene Colorノードを今まで作っていたものと結合します。

  • 変数を追加
    • Float(Vectort1)
      • 名前:RefrectionSpeed
      • 初期値:0.05
    • Float(Vector1)
      • 名前:RefrectionScale
      • 初期値:1.0
    • Float(Vector1)
      • 名前:RefrectionStrength
      • 初期値:1.0
STEP
適応処理その2

その1で作ったものと、今まで作っていた部分をくっつけます。

上図作成が出来たらSave Assetを忘れずに!

STEP
マテリアルの設定を変更する

今回の変更から色のAlphaがいい感じに機能します。

  • 各色のアルファを調整。以下は目安
    • DeepWaterColorのアルファ:0.2
    • ShallowWaterColorのアルファ:0.15
  • Refrection系のパラメータを調整して、水面の揺れをお好みに調整する
    • デフォルトの調整値は結構動きが多いと思います。
    • 個人的な好みはもっとゆっくりめ!

うまく出来るとこんな感じに仕上がります!

白波を立てる

仕上げとして、水辺に見える白いゆらぎになる部分を作ります。白波のことWhitecapsって言うらしいですね。ここでは泡(Foam)として扱います。

  • 変数の追加
    • Float(Vector1)
      • 変数名:FoamAmount
      • Default:1
    • Float(Vector1)
      • 変数名:FoamCutOff
      • Default:2
    • Float(Vector1)
      • 変数名:FoamSpeed
      • Default:1
    • Float(Vector1)
      • 変数名:FoamScale
      • Default:100
    • Color
      • 変数名:FoamColor
      • 白色(アルファ1)

ちょっと長いので、拡大しながら見てください。はじめに作った部分との合流地点は注意が必要です!

あとはパラメータを変えながら、いい感じの泡を作って見てください。

]]>
https://anogame.net/stylized-water-shader-graph/feed/ 0
1.13耳のモデリング https://anogame.net/blender-1-13-ear-modeling/ https://anogame.net/blender-1-13-ear-modeling/#respond Fri, 19 Jan 2024 01:09:34 +0000 https://anogame.net/?p=2778

耳のモデリングは少し調整が難しい部分があります。サブディビジョンサーフェスを適応し、見比べながら調整していきます。各ポイントを抑えつつ、参考にするモデルの耳の形に合わせて見てください。 今回の目標 耳一気に作ります。モデ […]]]>

耳のモデリングは少し調整が難しい部分があります。サブディビジョンサーフェスを適応し、見比べながら調整していきます。各ポイントを抑えつつ、参考にするモデルの耳の形に合わせて見てください。

今回の目標

耳一気に作ります。モデリング用語もさながらですが、耳珠って言葉を初めて知りました。こういうの検索する時に便利なので、知っとくだけで検索がはかどりますね。

仕上がり

Headのモデルにもサブディビジョンサーフェスを追加するので見た目がちょっと変わりますね。耳などはサブディビジョンサーフェスで結構見え方が変わってしまうので、サブディビジョンサーフェスの有無状態を交互に見比べながら調整してください

耳部分を作るステップ

耳は全体を通して、次のような工程で作成します。

STEP
耳になる部分の押し出し

耳の全体になる部分の作成。必要な箇所を押し出したり、ループカットを使って頂点を分割します。

STEP
耳たぶの作成とくぼみ作成の下準備

耳たぶになる部分の作成を行います。ここは辺の細分化を行ったり、頂点をマージしたり。

STEP
くぼみ部分の作成

面の差し込みを使って耳の内側にくぼみを作ります。厚みになる部分やくぼみになる部分の関係を見比べながら作成しましょう。

STEP
耳珠(じじゅ)の作成

耳の穴の手前のぴょこっと飛び出した部分。

やる内容

新しい内容は

  • ミラーモディファイアの適応
    • 編集モデルの切り替え
  • 選択モードの切り替え(名前が合っているかは知らん)
    • 頂点モード
    • 辺モード
    • 面モード
  • 頂点のマージ
    • Mキー
    • 最後に選択した頂点
    • 中心とかの方がよく使うかも
    • トラブル対応でもよく使うので
  • 差し込み
    • Iキー(アイ)
  • その他基本
    • 押し出し:E
    • 移動:G
    • スケール:S

オブジェクト変更とサブディビジョンサーフェスの使い方

耳のモデリングを行う際、入り組んだところが多いため、細分化(サブディビジョンサーフェス)の結果と見比べながら行います。

サブディビジョンサーフェスの追加

まずは新しいモディファイアーを追加します。追加する前にはオブジェクトモードを経由してHeadオブジェクトを選択することを忘れずに!

  • Headオブジェクトを選択し、編集モードへ戻る
    • Tabキーでオブジェクトモードに切り替え
    • 顔のモデル(Head)を選択
    • Tabキーで編集モードへ切り替え
  • サブディビジョンサーフェスを追加
    • 右下のスパナマークを選択
    • モディファイアーを追加
    • サブディビジョンサーフェスを選択
  • サブディビジョンサーフェスの設定を合わせる
    • アイコンを全点灯させる
      • 逆三角形:頂点や辺がモデルに沿って編集しやすくなる
      • 四角形:編集中に見え方が反映される
      • モニター:ビューに反映される
      • カメラ:レンダリング中にモディファイアーを使用(なくてもよい)
    • ビューポートのレベル数:2

編集中の確認・切り替え方法

サブディビジョンサーフェスは便利なのですが、実際の頂点の調整とは異なります。編集中は四角いアイコンを切り替えながら行うと良いでしょう。

今回の耳のモデリングは交互に見比べながらやると少し調整がしやすいのでここで一旦使えるようになっておきましょう。

耳の形を作る

まずは耳の全体的な形を作ります。押し出し、ループカットなど、おなじみの機能を使います。あとの作業で大きさや形の調整を行いますので、大体合ってたらOKの精神。

押し出しでざっくり作成

まずは耳のおおまかな形を作成します。面モードに切り替えて押し出しを行います。編集モード中の左上部分にある下図のアイコンを選択すると面選択モードになります。

左からそれぞれ(頂点・辺・面)になります。よく使うのでいつでも切り替えられるようになりましょう。

  • 面モードに切り替え
  • 顔の側面の面を選択
    • 下図オレンジの2面を選択
  • 1キーで正面からの視点切り替え
  • 横方向へ押し出し
    • E>Xで水平方向に固定
    • 目安としては目より横幅小さいぐらい

耳の付け根の頂点を作成

押し出した耳に対して、正面から見て縦方向にループカットを行います。だいたい均等に分割することが多かったですが、ループで作った辺を耳の付け根付近に移動させます。手順がいつもと違うのでご注意。

  • 正面から見てループカット
    • Ctrl+R
    • 縦に1本だけ入った状態で1回目の左クリック
    • ここで確定せずに次のステップ
  •  耳の付け根で確定させる
    • マウスを移動させて、ループカットの切り口が移動するのを確認
    • 耳の付け根付近で左クリックで確定
スライム

この作業はサブディビジョンサーフェスを非表示にしたほうがおすすめです。
目一杯左に寄せてしまうと、付け根と顔の頂点が一致してしまい、耳の分岐点が調整しづらくなります。

フェアリー

あくまで付け根付近!

耳の形をつくるためにもう1本縦線を追加

付け根の線とは別に縦線を追加します。こちらhループカットで縦に線を入れて、等分分割を行います。

  • ループカットで等分分割
    • Ctrl+Rでループカット
    • 縦線が入った状態で左クリック>右クリックで等分分割

耳の形を少し調整

最初の調整としてはみみ全体の厚みを変更。付け根から薄く変形させます。

  • 前から見た調整
    • 上下に縦長
    • 上の方が少し広め
  • 横から見た調整
    • 耳の外側が後ろ方向
    • 縦方向に対して中央側を後ろ側に凹ませる

耳たぶの作成

辺の細分化1

耳たぶを作るにはいくつか頂点が必要になります。ループカットでは分割されすぎるので必要になる部分だけを選択して行います。

  • 辺モードに切り替え
  • 下図の赤線部分の4辺を選択
  • 右クリック>細分化を選択
分割後の様子

頂点のマージ

耳たぶの形を作るために、頂点のマージを行います。下図のA,BとC,Dの各頂点をマージします。

  • 頂点モードに切り替える
  • 上図を参考に2つの頂点を選択する
    • A,B(Aを最後に選択)
    • C,D(Dを最後に選択)
  • マージを行う
    • 2つの頂点が選択された状態で[M>最後に選択した頂点に]を選択
  • 2組マージが行えたら完了。

耳たぶの形を整える

下図の赤い囲みの四角形の上がわの辺が水平になるようなイメージで調整を行います。後ろ側も同様に調整します。

作業中はサブディビジョンサーフェスの切り替えを行いながら、通常の頂点がおかしくなっていないか比較しながら調整してください。

辺の細分化2(くぼみの下準備)

辺の細分化1と同様に再び細分化します。1のときと同じような位置の辺を細分化します。

  • 辺モードの切り替え
  • 下図の赤い4つの辺を選択
  • 右クリック>細分化

分割後は上下の隙間などが均等になるように微調整すると良いですが、そのままでもいったん構いません。続きの作業は一度そのままで進めます。

耳のくぼみ部分の作成

耳のくぼみを作ります。耳は細かく見ると複雑な形をしていますが、ここでは簡易的に作成を行います。形に拘りたい場合は頂点の移動をうまく利用して調整してみてください。

差し込みで耳のくぼみになる部分を作成

下図の色がついた部分を選択して、面の差し込みや移動を利用しながら選択した形の内側にくぼみを作ります。くぼみを作るには厚みに当たる部分が必要になるため、そのまま奥に移動させただけではうまくいきません。

  • 面選択モードに切り替える
  • 上図のオレンジ色の5つの面を選択
  • A-面の差し込みを行う
    • iキーで面差し込み
    • ちょっぴりだけ小さくして左クリックで確定
  • B-3キーで横からの視点に切り替え(見づらい場合は斜めでもOK)
  • C-差し込みで作った面を耳の奥側に移動
    • Gキーで移動(プロポーショナルは切っておく)
  • A-B-Cの工程をもう一度繰り返す
スライム

差し込みはサブディビジョンサーフェスを切ったほうが作業しやすいと思います。差し込んだ面が確認しやすいですよ。

耳の形をいい感じにする

ここまでは機械的な操作で耳を作って来ました。耳珠(じじゅ)を作る前に耳の傾き具合やくぼみなどを調整します。

耳珠(じじゅ)の作成

耳制作の締め、耳珠!さも知ってるふうに言ってますが、モデリングするまでこの部位の名前知りませんでした。

押し出しで形を作る

下図のオレンジ部分を押し出して耳珠を作ります。サブディビジョンサーフェスを見ながらやるかどうかは好みですが、編集自体は無効にしたほうがやりやすいと思います。

  • 面選択モードへ変更
  • 上図オレンジの面を選択
  • 押し出し
    • Eキーで押し出し
    • 面の押し出しは勝手に垂直方向になるので、今回は軸指定しなくてもOK
  • 耳珠の先端を調整
    • Sキーで先を少し小さくする
    • 耳にめり込まない様にGキーで上に持ち上げる

切れ込みを入れて形を調整

耳珠にループカットで切れ込みを入れて、形を整えます。今回は気持ち弧を描いている様にしてみましょう。切れ込み入れたやつが前、耳珠の先端が奥みたいな感じかな。

  • ループカットで等分分割
    • Ctrl+Rでループカット
    • 作った耳珠に対して縦線が入るように。本数は1本。
    • 左クリック>右クリックで等分分割
  • 形を整える
    • 作ったループカットが少し手前
    • 耳珠の先端を少し奥側
  • 必要があれば先端の調整など
    • 大きさを変更したい場合はSでスケール変更
    • 頂点選択モードに切り替えて、耳珠先端の形を整える
]]>
https://anogame.net/blender-1-13-ear-modeling/feed/ 0