投稿記事

2022年 04月の記事 (3)

ものららい 2022/04/18 17:00

ブロック周りの修正と追加


こんにちは🍎

前回地形作成用にブロックであれこれする物を作りましたがちょっと不足というか不備があったので修正版をアップします。

主に Tool_CombineBlockParts.cs の最適化周りの修正がメインですが、前回までの物ではスケールがすべて1な真四角のブロックだけしか対応せず、たとえばYのスケールを0.5くらいにしたハーフブロックとかを組み込んだ場合は、最適化処理に不具合が生じて表示されなければならない面が非表示になったりなど正確さに欠けてしまってました、修正版では各面の4隅と中央から法線方向にレイを飛ばして、合計5ポイントが隠れていれば面を表示しないきちんと測定している方式にしています。


大きいのはこれくらいですが、修正がてらついでに何点か追加もしました。

まず、ブロックの各面のUV位置の指定に従来のマップチップ方式とピクセル指定方式を選んでパラメータを入力できるようにしました。

設定項目のプルダウンメニューに「ChipID」と「PixelClip」があるので「PixelClip」に設定後各面のX、Y、Width、Heightを指定すればクリップされた範囲のテクスチャが表示されます。

なんでピクセル方式が必要なの?ってお思いでしょうが、従来の正方形を基準としたマップチップ方式だと、ハーフブロックやロングブロック等を作ったときにどうしても側面や上下面が正方形でなくなってしまって表示がゆがんでしまい、あまりいい気持ちじゃないな~ってなったので正確に表示できるように用意しました。(設定が若干めんどいけどしょうがない🍏)

テクスチャの指定の箇所をクリップできるので面と同じ比率の画像をクリップしてもらえればきれいに表示できます。


あともう一つは「カラーブロック」という、色だけ変更してあれこれする簡易版のブロック機能を用意しました。

こちらは特定の色(ファミコンのカラーパレットを参考に)を、マップチップ方式の要領で指定していくだけでいいので割と使い勝手はいいですが、ややのっぺりしちゃうのが欠点なので、何か使いどころ考え中です。

一応カラーブロックもブロックの範囲の物なので、上記の Tool_CombineBlockParts.cs の最適化は可能だったりします、適当に積み重ねて一体化して使う的な事も可能なので、アイデアがあれば色々作れると思います。

実際に使用しているテクスチャは8x8ドットなのでとても小さいですが、色の並びはこれと同じなので参考までに。


地面以外はすべてカラーブロックで作ってみたの図↓




最後に、今回の実際動作するアセットフォルダも置いておきますので、アセットフォルダを空プロジェクトに入れれば確認できます。

Assets_2022_04_18.zip (1.19MB)

ダウンロード

※2022/04/22 メッシュ結合の面中心からレイを飛ばす処理にミスあったので修正版も上げておきます。

Assets_2022_04_22_Assets.zip (1.19MB)

ダウンロード

この記事が良かったらチップを贈って支援しましょう!

チップを贈るにはユーザー登録が必要です。チップについてはこちら

ものららい 2022/04/06 18:21

ブロック構造の背景(地面)を作ってみた


こんにちは🍎

今回はちょっと変わった内容にしようということでしたので、背景周りの内容にします。

3D空間上でのゲームで背景というと、なんだか地形や建物をモデリングしたりなどものすごい大変なイメージありますよね…🐄、2Dのマップ制作でも大変なのにそれに輪をかけてとてもとても大変なイメージが付きまとって苦しみが…🍏。

実際、自分も「ゲーム用の軽くて最適化したモデル」を作るのをなるべくやりたくないなぁって常々思ってるくらいで、日々なんかいい方法ないかな?って色々回避する方法を考えてたりします。(ここら辺のもやもやがあるのでビルボードでキャラクターを表示する方式でゲームを作ってたりします…)

でもあんまり頭だけで考えても、そうそういいアイデアが浮かぶことは無いので、まず挫折しないくらい簡単な所から…とシンプルな昔からあるタイルを敷いてく方法の「マップチップ的な感じで地面を作ろう」くらいの所から始めてみました。(一応3D空間上でやるのでマイクラみたいな感じのやつ)


となると、まずやらないといけないのは素材になるブロックを作る事なので、メッシュのUVをいじれるMeshUvControl.csを使用して各6面の柄を任意の物に変えられるCubeっぽい物をブロックのひな型として編集できる機能を作成しました。(平たく言うと6面箱状になるようにUVの調整できる板ポリ配置した物)


Scenes/Scene_BlockCreateEditor

Assets/Script/Tool/
Tool_BlockBase.cs ブロックの作成ツール
Tool_QuadBase.cs 平面ブロックの作成ツール

上記のシーン、Scene_BlockCreateEditorを開くとブロックを作るシーンが開かれます。

このシーンは基本、再生とかは行わないでエディタ内の操作だけでブロックを作っていきます、左Hierarchyの項目内にBlockBaseとQuadBaseというオブジェクトがあるのでこちらをコピペしてからコピーの方でブロックの編集&作成を行います。


コピペするとデフォルトの状態のブロックのひな型ができますのでMeshUV_Lengthの項目にチップの最大数、MeshUV_UpからMeshUV_Rightまでに表示したいチップの番地を入力する事で柄の表示ができます。


柄の設定を行って城壁にしてみました。

これでブロックの作成の準備が整ったので、次はブロック化してみましょう。
Pathに保存したい場所を入力して「アセットに保存」ボタンを押すとPathの場所に保存されます。

ちなみにブロック化したものは一個のメッシュになっていますので、後で微調整したくなった場合ブロックのメッシュだけを調整した物に入れ替えると、配置の方のデータを作り直さなくていいので楽です。



保存されたものをステージ上に配置してみました。(右奥の)
ブロックの作成はこれだけなので、次はブロックの塊を作る作業に移行します。


Scenes/Scene_BlockLayoutEditor

Assets/Script/Tool/
Tool_CombineBlockParts.cs 子すべてのメッシュを結合するルール
Tool_BlockDuplicate.cs ブロックやオブジェクトを指定個数分生成するツール
Tool_ObjectChange.cs 指定のオブジェクトと入れ替えるツール

Scene_BlockLayoutEditorシーンで先ほど作ったブロックを配置してみました。
こちらも先ほどのブロック作成シーンと同じようにCombineBlockPartsBaseをコピーしてからコピー先を編集していきます。

CombineBlockPartsBaseの子の要素のBlockDuplicateはオブジェクトを指定数分XYZに配置していくツールで、一応ブロック用に作っている機能ですが一応オブジェクトならブロック以外も使えるようになってます。

画像の場合X3、Y1、Z3なのでL字型の配置がされてますよね、通常は数値を増やしていっても一方向に伸びてくだけなのですが、FillModeのチェックを入れると下の画像のように中身の詰まった感じの箱型の配置をしてくれるようになります。


一応ですが、Tool_CombineBlockPartsは子に存在するメッシュすべてを一つにする機能なので、CombineBlockPartsBaseの中に入っていればBlockDuplicateの中とか関係なくメッシュ結合の対象内になります。

とりあえず配置ができたのでCombineBlockPartsBaseを選択して、Tool_CombineBlockPartsコンポーネントのPathを設定後「アセットに保存」を押してみましょう。



先ほど生成されたブロックの塊をシーンに配置してみました。

一応、このメッシュの結合を行わなくても、BlockDuplicateの配置そのままでブロックを使用する事は出来ますが、ブロックのままの状態だと重なったところの面がそのままなので、データ的にも描画的にもたくさん配置するとかなりの負荷になってしまいます、それを防ぐために結合時に重なる面や埋もれてる面は自動的に削除する処理を入れていますので、結合したメッシュは負荷が削減されていると思います。


ということで、現状のグレーの背景から地面っぽいブロックで似たような地面を作ってみました。



ちょっと歩いてみましたが…、遠景にちょっと違和感感じますよね…🐄


動画だと若干わかりにくいので補足。

ブロックを敷き詰めた感じの構造物を作ると、アンチエイリアスの設定やミップマップが悪さするみたいで、遠景が格子状になってしまってますね…うっ🐄

これ自体はアンチエイリアスやミップマップを切れば出なくなるのですが、人によってはこれらを切るのはちょっと…っていうのもありそうなので何か別の解決策あればいいんですけど、現状はわからないのですみません。

とりあえずここで止まっててもどうしよもないので、今回はその二つを切って見た目をマシにする方向で対応します。

アンチエイリアスはEdit→Project Settings→QualityメニューのAnti AliasingをDisabledにすると切ることができます。

ミップマップはAssets内のテクスチャを選択すると項目が出てくるのでチェックを外してApplyすると切れます。



あまりすっきりした感じではありませんが、これで遠景の格子状は消えます。



ちょっと最後らへんはそれてしまいましたが、これで背景少しは作りやすくなったかな?とか思ってます、…実際ここまでしても背景作るの面倒なのであんまり解決!と胸を張って言えない感じしますが、あんまり考えてもしょうがないので、次回からこの範囲で何か出来る事をコツコツやっていきたいと思います。


最後に、今回の実際動作するアセットフォルダも置いておきますので、アセットフォルダを空プロジェクトに入れれば確認できます。

2022_04_07_Assets.zip (971.96kB)

ダウンロード

この記事が良かったらチップを贈って支援しましょう!

チップを贈るにはユーザー登録が必要です。チップについてはこちら

ものららい 2022/04/03 14:56

ゲーム的な演出とかのイベント進行など


こんにちは🍎

RPGなどをプレイしてると特定の位置や話の流れでキャラが動いたり会話が始まったりとか自動的な演出する事ありますよね。

それらの動作をスクリプト上に記述していってもいいんですが、規模が大きくなるとどうしてもスクリプトの再読み込み等の時間のロスが大きくなってきて、後に数文字変更した微調整繰り返してくるとだんだんとやきもきしますよね…。

流石に開発進んでくると長い読み込みとか待ってられないので、今回は以前作った会話の機能を改造してイベントの動作を順番にする機能を作ってみました。


まずこんな感じのできるようになりました。

↓今回使用するのは主にこの二つファイル
Assets/Script/CharacterTalkEvent.cs イベント機能
Assets/TalkEvent_001.txt イベントの設定ファイル


基本的にtxtに書かれてるコマンドのある行を順に処理していくというのはキャラクターとの会話の処理と同じものですが、こっちはより上位版になっていて設定されてる範囲で会話以外の事もできるようになっています。

パラメータ等の詳細はCharacterTalkEvent.csの処理中の方に記述していますが、一例をあげると、

Character_Move : "StagePlayer", 4,0,-3, true

という記述は「Character_Move :」の部分は命令の種類で「 "StagePlayer",」は移動の指定をするステージ上のキャラクターの名前、「 4,0,-3,」は順にx,y,z、最後の「true」は移動後に次の処理を行うか即座に次の処理を行うかboolで設定できます。

他にも色々ありますが、こういう命令を組み合わせることでイベントが始まったときに村人が寄ってきてから会話を始める、や、プレイヤーが近づいたときにみんな驚いたあとで逃げていく、や、敵兵NPCが一か所に集まってみんなで作戦を練り始めるとかの演出の準備に使えます。


今回思いつく範囲で一応基本的な所は用意しましたが、状況に応じてまだまだ必要なコマンドが出てくると思うのでその都度CharacterTalkEventに追加していけばいいかなと思っています。

CharacterTalkEventができたのでCharacterTalkは必要なくなりそうですが、普通の会話をする程度ならCharacterTalkの方がシンプルで楽なので、今後も一応残しておきます。(CharacterTalkの方に不備あったのでコマンドを解読する処理はCharacterTalkEventに合わせました。


一応イベントはひと段落付いたので(しゃべってるキャラ画像の差し替えとかONOFFとか、他不足はあるけど実際使っていかないと何ともな感じなのでもうちょい後で…リソース引っ張って来る方法とかもあるので後で…)、次はキャラクターとかじゃなくちょっと変わった所をやりたいと思います。(お楽しみに🍎)


今回のの実際動作するアセットフォルダも置いておきますので、アセットフォルダを空プロジェクトに入れれば確認できます。

2022_04_03_Assets.zip (571.34kB)

ダウンロード

この記事が良かったらチップを贈って支援しましょう!

チップを贈るにはユーザー登録が必要です。チップについてはこちら

月別アーカイブ

記事のタグから探す

記事を検索