Unityを使った3Dゲームの作り方(かめくめ)ゲーム開発エンジンUnityを使った3Dゲームの制作に参考になる情報を公開しています。コピー2023.01.25今回はUnityのSplinesについて見ていきたいと思います。Splinesを使うとスプライン曲線をUnityエディター上で編集でき、スプラインに沿ってゲームオブジェクトの配置が出来たりします。スプライン曲線は複数の制御点を通る滑らかな曲線の事で、制御点の移動や制御点の接線を操作する事で曲線を変更することが出来ます。Splinesを使うにはUnity2022.1以降のバージョンである必要があります(この記事ではUnity2022.2.1f1で確認しています)。スポンサーリンクSplinesのインストールまず初めにSplinesをインストールします。UnityエディターのメニューからWindow→PackageManagerを選択します。Registryにし、Splinesを選択してInstallボタンを押します。SplinesのサンプルのインポートSplinesのサンプルもインポート出来ます。ManagerウインドウのSplines項目を選択した状態でSamplesタブを選択しImportボタンを押すとサンプルをインポートできます。Assets/Samples/Splinesにサンプルファイルがインポートされます。Splineを作ってみるSplinesをインストール出来たので実際に作ってみましょう。ヒエラルキーで右クリック→Spline項目から形状を選択することでスプラインを作成することが出来ます(その他UnityメニューのGameObject→Spline、空のゲームオブジェクトにSplineコンポーネントの追加でも出来ます)。Toolを選択すると、シーンビュー上でマウスクリックすることでノットを作成する事が出来、次々マウスクリックすることでスプラインを作成出来ます(自分で形状を作ることが出来る)。Squareは四角形のスプラインを作成します。Squareは四隅が丸みを帯びた四角形のスプラインを作成します。Circleは円形のスプラインを作成します。Polygonは六角形のスプラインを作成します。Helixは螺旋形のスプラインを作成します。Starは星形のスプラインを作成します。Toolを選択するという感じですね。Toolでシーンビューで編集が出来ます。ノットノットはスプラインを構成する接続点の事です。セグメント(切片)を使って相互に接続されます。タンジェントタンジェントはスプラインの接続点の接線の事です。Toolを選択しスプラインを作ってみます。ヒエラルキーのSplineゲームオブジェクトを選択するとシーンビューでスプラインを編集することが出来ます。Toolが有効になりノットの追加を行ってスプラインの作成と編集が出来ます。Toolを押して終了します。Inspectorが表示されます。Settingの所に隠れているかもしれません。隠れていた場合はシーンビュー上にドラッグ&ドロップしてください。スプラインのインスペクタの表示ヒエラルキーのSplineを選択するとインスペクタでは以下のような感じで表示されます。スプラインごとに各ノットが表示されシーンビューでノットを選択するとインスペクタでもそのノットが選択されます。スプラインのClosedにチェックを入れると、そのスプラインの最初と最後のノットの間にセグメントを作成します(繋がります)。Inspectorはノットやタンジェントの情報を表示します。最初のXYZはノットの位置で次のXYZは回転を示していて、それぞれ値を変更する事が出来ます。ノットの位置や回転はToolsを使って通常のゲームオブジェクトと同じようにも変更出来ます。接線の設定その次のLinear、Auto、Bezierでタンジェントの切り替えをすることが出来ます。Linearはタンジェントは自動生成され直線的になり操作は出来ません、Autoは自動で滑らかな曲線を作成し、操作は出来ません、Bezierはベジエ曲線の接線を作成し操作をすることが出来ます。Bezierを選択するとその下の項目を変更することが出来ます。BezierのMirroredはミラーモードで接線の反対方向が同じ大きさになります。BezierのContinuousは連続モードで接線が独立しており大きさをInとOutで独立して変更することが出来ます。BezierのBrokenは完全に接線が独立しており、各接線の大きさと方向を直接変更することが出来ます。ノットの操作その下のボタンを使うとノットの操作を行う事が出来ます。Linkはノットを同じ位置に合わせて結びます。各ノットを移動させるとリンクされているので同じ位置に移動するが回転をすると接線が独立するので反対側は回転しません。UnLinkは結んだノットを解除します。Splitはノットの接続を分割し二つのスプラインに分けます。Splitを押した後は二つのスプラインに分けられるので各ノットを移動させたりすると以下のような感じになります。ひとつのスプラインだったものが以下のようにインスペクタで二つのスプラインに分割されているのを確認出来ます。Joinは二つのノットを接続します。Flowを押すとスプラインの流れが反転します。Instantiateコンポーネントを使用するとスプライン上にゲームオブジェクトをインスタンス化することが出来ます。木やフェンス等をスプラインに沿って配置したいときに便利です。元となるスプラインを以下のような感じで作成します。Instantiateコンポーネントを選択して取り付けます(別のゲームオブジェクトに取り付けてもOK)。Containerはどのスプライン上にゲームオブジェクトをインスタンス化するかで、スプラインを設定します。Instantiateにはインスタンス化するプレハブ、もしくはヒエラルキー上のゲームオブジェクトを複数設定出来ます。プレハブ等を設定するとその右側にリストの中から何パーセントの確率でインスタンス化されるかを設定することが出来ます。Setupを見ていきます。Axisは前方を設定します。Elementはゲームオブジェクトがインスタンス化された位置に近いノットの回転から計算し補間された方向に向けます。Objectはスプラインの方向に向けます。Spaceはワールドスペースの方向に向けます。Instantiationを見ていきます。Methodはインスタンス化する方法を設定します。Countはスプライン上にCountで設定した数のゲームオブジェクトをインスタンス化します。Distanceはスプライン上のDistで設定した距離毎にゲームオブジェクトをインスタンス化します。Distanceは直線的にDistで設定した距離毎にゲームオブジェクトをインスタンス化します。DistanceはExactにすると設定した数値を使いますが、Randomを設定するとMinとMaxの間のランダム値を使用します。DistanceはExactはそのままの数値で、Autoは自動で設定されます(スプラインに収まる数を自動で設定)。Offsetは位置のオフセットを設定出来ます。Offsetは回転のオフセットを設定出来ます。Offsetはスケールのオフセットを設定出来ます。Toで指定した座標空間が適用される)。Objectはインスタンス化されたゲームオブジェクトのローカルの方向が座標空間となります。Generationを見ていきます。Instantiateコンポーネントの値を変更した時に自動でゲームオブジェクトのインスタンス化を再実行します。Randomizeボタンを押すとランダムな範囲に設定されたすべての値を再生成して再度インスタンス化を実行します。Regenerateボタンを押すとスプライン上に再度ゲームオブジェクトをインスタンス化します。Clearボタンを押すとスプライン上にインスタンス化したゲームオブジェクトを削除します。Instantiateコンポーネントの機能を確認してみましょう。インスタンス化するゲームオブジェクト、またはプレハブを適当に2、3個用意します(木やフェンス等)。用意するのが面倒な方はCubeやSphere等のプリミティブな図形を設定しても大丈夫です。Instatiateの+を3回押し、各ゲームオブジェクトにインスタンス化したいプレハブもしくはゲームオブジェクトを設定します。Instantiateコンポーネントを取り付けた場合はContainerに自身のSplineコンポーネントが自動で設定されると思いますが、設定されていなければ設定してください。わたくしの場合は自作の人型キャラクターであるkamekumechanを60%と二つの木を各20%にしたアイテムを設定してみました。以下のようにスプラインにそってアイテムがインスタンス化されたのを確認出来ます。ゲームビューで見ると以下のようにスプラインの線は表示されません。Animateコンポーネントを使用するとゲームオブジェクトの位置と回転をスプラインに沿ってアニメーション化することが出来ます。決まった道を移動するキャラクターや車等を作りたい時に便利かもしれません。Splineにはどのスプラインに沿ってアニメーションをするかなので、スプラインを設定します。Setupを見ていきます。Axisはゲームオブジェクトの上方向とする軸を設定します。Axisはゲームオブジェクトの前方とする軸を設定します。Toはゲームオブジェクトの向きを何に合わせるかの設定です。Elementはゲームオブジェクトに最も近いノットの回転から計算された補間された方向に合わせます。Objectはスプラインの向きに合わせます。Spaceはワールドスペースに合わせます。Movementを見ていきます。Awakeにチェックを入れるとゲームオブジェクトがロードされたときにアニメーションが開始されます。Offsetはスプライン上でのアニメーション開始位置を0~1の間で設定出来、0はスプラインの最初、1はスプラインの最後になります。Methodはアニメーションの方法を設定します。Timeは秒単位で設定した期間(Durationで設定)でスプライン上をアニメーションし、Speedは毎秒単位で設定した速さ(Speedで設定)でスプライン上をアニメーションします。Easingはアニメーションの滑らかさを設定出来ます。Onlyはアニメーションが最後遅くなります。In-Outはアニメーションの最初と最後がゆっくりとなります。Modeはアニメーションのループの設定です。Continuousはアニメーションをゆっくりと開始し、終了後にループで再生されます。In-Outが選択されている場合は最初の1回の再生時のみゆっくり再生されその後のループではイージングは適用されません。Pongはスプライン上を行ったり来たり(ピンポン)するようにループします。Previewを見ていきます。Playは再生、Pauseは一時停止、Resetはリセットして最初(Timeを0)に戻します。Previewボタンを使うとUnityエディターのPlayボタンを押して確認せずとも直ぐに確認することが出来ます。Animateコンポーネントを使ってみましょう。適当にスプラインを作成します。今回は以下のように1周するようなスプラインを作成しました。次にキャラクターをヒエラルキーに配置し、AnimatorのControllerに常に歩くモーションだけが再生されるAnimatorControllerを取り付けます。Animateコンポーネントを選択し取り付けます。AnimateコンポーネントのSplineにヒエラルキーにあるスプラインゲームオブジェクトをドラッグ&ドロップして設定します。Elementにします。Awakeにチェックを入れます。MethodはSpeedにし、毎秒5m進むようにします。Onlyにして最初だけイージングを適用します。Continuousにし、最初だけイージングを適用し、ループ再生する時はそのままのスピードでアニメーションするようにします。Extrudeコンポーネントを使用するとスプラインに合わせてメッシュを生成することが出来ます。Toolを選択し、適当にスプラインを作成します。わたくしは以下のようにしました。Extrudeコンポーネントを選択し取り付けます。Extrudeコンポーネントを取り付けるとSplineに自動で自身のスプラインが設定され、スプラインにメッシュが反映されます。Splineにはスプラインを設定します。Geometryを見ていきます。Endsにチェックを入れるとメッシュの両端を閉じます。Advancedを見ていきます。Rangeはメッシュを押し出すスプラインの範囲をメーターで指定出来ます。Percentageはメッシュを押し出すスプラインの範囲を数字で指定出来ます。Geometryにチェックを入れると実行時、またはスプラインの設定値に変更があった時にメッシュを再生成します。Geometryにチェックを入れると表示され、メッシュが再生成される1秒当たりの最大回数を設定出来ます。Collidersにチェックを入れるとメッシュが生成された時に取り付けてあるコライダ―コンポーネントを自動的に更新します。Extrudeでは出来なさそうなので、自分でスプライン上の点から平らなメッシュを生成していくしかないのかも・・・(^_^;)Unityのサンプルの中にあるので興味のある方は見てみるといいかもしれません。参考サイトUnityマニュアル-Splines-終わりに今回はスクリプトを使った操作はしませんでしたが、Splinesのサンプルの中に機能の作り方が載っているのでサンプルを見ながら応用する(応用せずとも)とゲームの舞台の道の生成やスクリプトを使ったサンプルを確認出来ます。道のメッシュ生成スクリプトが難しいなぁ・・・・。メッシュ生成に関しては以下の記事を参照してみてください。Unityでスクリプトからメッシュを生成する方法をわかりやすく?解説Unityではスクリプトからメッシュを生成する事が出来ます。そこでメッシュを作成する時に必要な基本的な勉強をしてから実際にメッシュの生成を行ってみます。GCを有効にするとGCを複数フレームに分割して行うことが出来ます。Unity基本情報Unityのコンポーネントを一括で取得するUnityのコンポーネントを一括で取得するやり方を記述しています。自身のゲームオブジェクトに設定された同種のコンポーネントを一括で取得する事が出来るようにします。Unity基本情報Unityのゲームオブジェクトをマウス操作した時の処理Unityのゲームオブジェクトをマウス操作した時の処理を簡単な方法で行います。Unity基本情報Unityでタイムラインを使ってゲームのイベントシーンの動きを作成してみるUnityでタイムライン(Timeline)を使ってゲームのイベントシーンの動きを作成してみます。タイムラインを使うとキャラクターのアニメーションや音声の再生等のタイミングを合わせることが視覚的にわかりやすくなります。Unity基本情報UnityのVector3やTransformのStatic変数で方向を取得するUnityのVector3やTransformのVector3.upやtransform.forwardを見ていき、キャラクターからみた方向を計算する方法を学んでいきます。Unity基本情報Unityのスターターアセットを使ってみようUnityのStarterAssetの使い方を学んでキャラクターを入れ替え動かしてみます。キャラクターに設定するパラメータがなんなのか?も見ていきます。Unityでカメラ前のオブジェクトを半透明にして主人公を見えるようにするタイピングゲーム制作記9ホームUnity基本情報スポンサーリンクサイト内検索が出来ますプロフィール管理人のかめくめちゃんです。(-_-)メールはこちらにお願いします(記事に関する質問は送らないでください、返信は期待しないでください(._.))。kamekumechan@gmail.comいずれはSIRENやバイオハザードみたいなアクションゲームを作りたいと思っています。ゲームシナリオが書けないので面白いゲームはなかなか作れません・・・・。(^_^;)名前の由来はカメが好きだからです。プロフィールになってないな・・・・(-.-)Unityをこれから始める人へこれからUnityを使ってみようという方はUnityを使った3Dゲームの作り方(かめくめ)の歩き方Unityを使った3Dゲームの作り方(かめくめ)で、はじめてUnityの学習をする時の当ブログの記事を読む順番を書きました。機能を積み上げていく形になるので便利かも?gametukurikata.com2019.06.21の記事に記載の順番で見て頂くとUnityの基本的な使い方がわかり、簡単なアクションゲームや、TPSゲームの作成までが出来ます。自作タイピングゲームタイピングゲームを作りました。WebGL形式なのでPCのブラウザで遊べます。以下からプレイ出来ます。FinalTypingUnityを使って作成したローマ字入力のタイピングゲームです。gametukurikata.com2022.01.02お知らせ2023/01/24個人的にUnity2022.2.3f1をインストールしました。2022/10/14UnityのIKを使って足の位置と角度を地面に合わせる機能Unityのゲームでキャラクターの両足が別の高さの地面の上にある時にそれぞれの足をそれぞれの地面につけるようにする機能を作成しますgametukurikata.com2016.04.11機能を少し修正しました。2020/09/19コメント欄は閉鎖しました。今までコメントを投稿してくださった方はありがとうございました。(^^)/2018/08/07わたくしに出来る事は既に記事にしてあるので、ブログ右上の検索窓を活用してください。(._.)またブログの最初の方の機能を積み上げていく記事に関しての疑問点は当ブログ記事のスクリプトの説明と寄せられた質問への回答Unityを使った3Dゲームの作り方(かめくめ)の機能積み上げ形式の記事のスクリプトの説明と寄せられた記事の機能についての質問への回答を掲載しています。gametukurikata.com2019.08.01Unityを使い始めたばかりの人がつまづきやすい点を解消するUnityを使い始めたばかりの人が結構な確率で陥る不具合や疑問点を解消していきます。基本的にはブログに寄せられた質問への回答という感じです。gametukurikata.com2018.12.04も参照してみてください。小・中学生によるデジタルコンテンツ開発の全国大会ですuycc.unity3d.jp2022年大会の先行エントリーが開始されているようです。当ブログはハイスピードプランです。WordPressの編集画面の動作が早くなった。当ブログはハイスピードプランです。WordPressの編集画面の動作が早くなった。記事の内容に質問がある方へUnityを使った3Dゲームの作り方(かめくめ)の歩き方UnityのJavaScriptとC#を読み替えてどちらでも対応出来るようにするホーム検索トップサイドバータイトルとURLをコピーしました。