忍者ブログ
まったくのプログラミング素人の筆者がC++/HSPを使用してSTG(シューティングゲーム)を作っていく過程を書くブログでしたが最近は脱線気味。プログラミング以外にも、ゲーム関連の記事、日々の戯言など。
どんなSTGを作ろうかなーと色々と考えているのですが、とりあえず烈火のレーザー的な自機弾を作成してみました。

ここで悩んだのが当たり判定です。このレーザーを実装するためには敵を倒す用の当たり判定とレーザーを敵の方向に向かわす為の当たり判定の2つが必要になります。
当たり判定自体はCollider命令で実装できるのですが2つ別々に判定する方法がわかりませんでした。

ググって見るとレーザーに親子関係を持たせてレーザー本体に敵との当たり判定、子の方に敵に向かわす為の判定を実装して別々のスクリプトで管理すると良さげ。

layer_bullet_laserが親でangle_collider_leftを子にします。
シーンの大きい緑枠が子の当たり判定で自機の前の小さい緑枠がレーザー本体の当たり判定として処理すれば上手く実装出来ました。

しかし更に問題が。レーザーは沢山発射されているのでちゃんと親の関数を呼び出す必要がありました。
これはtransform.root.gameObjectで親を取得出来るので、子のスクリプトで
GameObject X = transform.root.gameObject;
player_bullet_laser_move_right s = X.GetComponent<player_bullet_laser_move_right>();
s.Create_rad_ds(rad, 1f);
こんな感じで書くと子のスクリプトから親の関数を呼び出し出来ました。
1行目でXに親のオブジェクトを代入します。
2行目で親オブジェクトにアタッチされているスクリプトをsに代入します。
3行目でsにある関数Create_rad_dsを呼び出してレーザーの向きを変える感じです。

といった感じでなんとか実装は出来たのですが、これだけの事でも作るの相当大変でした。
出来ればギミックありありなSTGを作りたいなーと思っているのですが先は長そうです。。。
PR
前回はUV展開時にスマートUV投影でUV展開していました。
この方法だとパーツがバラバラに展開されてしまって、繋げたい場所などで面倒な事になるんですよね。

円柱をスマートUV投影で展開すると筒の部分がバラバラになってしまいます。
かと言って普通にUV展開しようとしても上手く展開してくれないんですよね。

これは箱状の物を展開する時に切り開く場所を指定していないと、どこから展開して良いか判断出来ないのでおかしな事になっています。
なので切り開く場所を上手く指定してやると綺麗にUV展開出来るようになります。
この切り開く場所の指定をシームを付けると言うそうです。


シームを付けたい辺を選択してCtrl+Eを押すと出てくるメニューからシームを付けるを選択すると赤い線でシームが付きます。


こんな感じで上下の円と筒のにシームを付けました。


この状態でUV展開すると筒の部分が綺麗に展開されています。

といった感じなのですが複雑なモデルだとシームを付けながら作って行く方が良いのでしょうね。モデルによって普通のUV展開とスマートUV投影を使い分けるのが良いのかなぁと思いました。
先日作った3DSTGを元に2DSTGを作ってみました。

悩んだのが画面サイズというかカメラの位置というか。
3D表示の場合はカメラの位置によって画面サイズが変わってしまうんですよね。
かと言ってコレが正解!って位置も良くわからないので色々と位置を変えてみて何となく良い感じの位置に設置してみました。ちゃんとした設置の考え方とかあるんでしょうか・・・

それと凄く戸惑っているのがX軸Y軸Z軸の扱い。

2D的な考えだとX軸が横、Y軸が縦、Z軸が高さになると思うんですよね。
でも3D的な考えだとX軸が横、Y軸が高さ、Z軸が縦(奥行)になるみたいなんですよね。
なのでオブジェクトの座標もXとYで考えるのではなくXとZで考える感じになってしまって凄く頭がこんがらがってきます。
そして、本当にこんな考え方するのか?実はXとYで座標考えてZが高さになるように作るのが正解なんじゃないのか?とか色々と悩んでます。

アセットを使うと簡単にリアルな爆発とかを出せるのは良いので、このまま3Dで作っていくか2Dに戻して作って行くほうが良いのか色々と考え中です。2.5DSTGの作り方講座とかあったら速攻で受講するんですけどねぇ(笑)
先日作った3Dシューティングをベースに2Dシューティングを作ってみようと思って、とりあえず自分で作ってキャラクタに変更してみたのですが、変更した瞬間にすんごく動作が重たくなりました。

なんでかなーと思って変更する前のキャラとの違いを考えると、3Dモデルの頂点数が全然違ったんですよね。元々が頂点数800程度で置き換えた方は4000くらいあったので、これが原因かなーと。
私が今まで制作していたモデルはテクスチャを使わずに素材に直接色を塗っていたので色を塗る為にモデルを分割しており非常に頂点数が多かったんです。なので出来るだけ頂点数を抑えつつモデルに色を付けるとなるとテクスチャを貼る方法が一番良さげなのでモデリングからやり直しましました。

今まではモデリングにメタセコイアを使っていたのですが、UnityはBlenderと連動して動かせるとの事でBlenderを使ってみることに。
Blenderは操作方法が独特なので解説サイトなどで練習してから使うのが良いと思います。感覚的な操作では絶対に思うように動かせません。(リドゥがCtrl+Shift+zとか絶対わからんw)

下記の解説サイト様が丁寧で解りやすく書いてあって良かったです。
https://www.cgradproject.com/archives/category/tutorialtips/
https://blender-cg.net/

モデリングに関してはコレで良かったのですが、悩んだのがUV展開。
とりあえずUV展開する時は普通の展開ではなくスマートUV投影で行います。


UV展開する時は角度制限を89にして島の制限は0.03(大きくすればパーツごとの干渉が避けれます)

展開図をUV配置をエクスポートで保存します。


保存した展開図をGIMP2などで色付けするのですが・・・


ここで問題が。上の画像は色が付いてますが最初は何も色が付いていないので、どのパーツがどこの部品なのか全くわからないんですよね。
でもBlender側で簡単に確認する方法がありました。

画像の丸のボタンを押すと編集モードのモデルと展開図の位置を表示してくれますので、どのパーツがどこの部品なのか一目瞭然です。
あとはパーツ毎に色をつければOK。展開図よりも若干大きく色を塗って置いたほうが綺麗に反映されるようです。

尚、展開図の着色方法については、もっと良い方法があるかもしれませんが忘却録として書いておきました。

展開図が着色出来たら編集モードでマテリアルを新規追加します。


テクスチャを追加して画像または動画を読み込めるようにして展開図を読み込めばテクスチャが反映されると思います。

この方法で色付すると頂点数が劇的に減らせたので良かったです。

それにしてもテクスチャの書き込みって難しいですねぇ。線とか文字とか書き込んでみたのですが、なんか馴染まないというか嘘っぽくなってしまってイマイチなんですよね。検索してみても人物のテクスチャの書き方は沢山出てくるのですが、メカっぽいテクスチャの書き方ってあんまりないんですよねぇ。何か良い方法がないものかと思っております。
3Dモデルの表示をやってみたら意外と簡単だったので試しに簡単な3Dシューティングゲームを作ってみました。


簡単な敵と自機が出て来て当たったら爆発させて消去する感じ。
作成するのに下記のサイト様が非常に役に立ちました
プログラミング初心者でも簡単!Unity5で3Dシューティングゲーム開発!!

本当は2.5Dで作成したかったんですが参考にさせて頂いたサイトさんのが3Dだったので、とりあえず3Dで作ってます。

作ってみて感じたのは、本気の3Dゲームを作るわけではないので基本的な考え方は2Dと同じなのですが3D表示の場合はカメラの位置とか画面サイズなどをどうすれば良いのかがイマイチ良くわからないんですよね。。。

この作成した3Dシューティングのカメラを上から見下ろせば3D表示の2Dシューティングに見えますが、それで良いのか?とか思ったり。
そして3D表示だと2D表示と比べて沢山オブジェクトを動かすと重たくなるんですよね。
今回は弾幕シューティングを作ろうとしている訳ではないので、それほど沢山のオブジェクトを動かすことは無いと思うのですが動作は軽い方が良いです。でも背景グルグル回る演出とかやってみたいので3Dもありかなーと思ったり。

それとUnityにはアセットストアと言うキャラクターや背景を購入出来るサイトがあって、今回初めて使ってみたのですが、無料の物でもクオリティ高いものが沢山あって凄いなぁと思いました。(今回作った3Dシューティングの素材は全てアセットストアで無料ダウンロードした物です。)

こんなキャラクターや宇宙の背景も無料で使えるとか凄いです。

とりあえず、この作成した3Dシューティングを見下ろす感じのカメラ角度にして2.5Dシューティングとして作ってみようかなと思ってます。
カウンター
Twitter
カレンダー
12 2019/01 02
S M T W T F S
1 2 3 4 5
6 7 8 9 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30 31
最新コメント
[11/24 kt.]
[11/24 kt.]
[11/24 NONAME]
[11/23 NONAME]
[10/05 tejas]
プロフィール
HN:
kt.
HP:
性別:
男性
自己紹介:
STG大好きな45歳。
プログラミング経験は昔ファミリーベーシックでちょっとさわったくらい。
好きなSTGは、怒首領蜂大往生、エスプガルーダ(2)等の弾幕STGやら雷電シリーズなんかの非弾幕、バトルガレッガ、グラディウスシリーズ、R-TYPE等、STGなら何でも好きです。
音楽がカッコイイSTGが特に好きで、並木学氏は最高!
ブログ内検索
忍者ブログ [PR]