MYMYゲーム制作室

アラ古希姉妹のゲーム制作日記

Tentacleのつづき、、、、進歩はしたがまだ完成ではない。

昨日と違いクネクネはしている。

ミスを直したから少しは進歩した。

でも、端っこは棒!そして、その先は地面に根を下ろしているまま。

昨日は直立不動だったテンタクル。今日はBlackthornprodさんのYouTubeと自分のスクリプトを目を皿にして、比較してみた。その結果、一つのミスを発見した。

配列の[ ]の中の変数を表す「i」を入れるべきところに、数字の1を入れているところが一か所あった。そこさえ直せば一件落着かと、、期待しながら再生ボタンを押してみる。

昨日は直立不動、ブロッコリーの茎みたいだったテンタクルが、クネクネしている!

が、、、なぜ、端っこに棒をくっつけてるの??(';')

新体操のリボンの棒みたい。まだどこかミスしてるんだな・・・

でも、あと一息のところまで来ている気はする。あと一頑張りだ!

(こん)

 

BlackthornprodさんのYouTubeのチュートリアルで勉強してみた

BlackthornprodさんのYouTube動画のUnityTutorialが、わたしの最近の推し!

BlackthornprodさんのYouTubeより。Tentacleの動き。

           https://youtu.be/9hTnlp9_wX8

学びたいものが目白押しなのだが、なかでも「Tentacle」(触手、触角、タコの手)の

ような、くねくね動くオブジェクトの作り方を知りたくて、今日は半日、それにかかりきりだった。

YouTubeの自動翻訳機能で日本語字幕を出しながら、スクリプトの部分では何度も一時停止をして、スクリプトをノートに書き写すという作業。日本語翻訳も自動だから、間違いもあって、オイオイ!と思うところは、英語を聞き直したり。例えば、「これで頭の動きが右になりました。」(え、左だけど??と思ったら、正しい位置になりましたというright positionを右と訳していたりするような)

ま、スクリプトをコピペできれば楽なのだが、概要欄をみてもスクリプトは載っていない。代わりにJoin Thomas Brush's Full Time Game Dev course (40% off with code NOA): https://full-time-game-dev.teachable....と書いてあったから、ゲーム学校のコースを受講すれば、見させてくれるのだろうけど。なんとか無料の動画だけでもやってできないことはないだろうとチャレンジ。

しかし、やはりスクリプトを書き写して、コマ送りしながらなので、動画7分分を真似するのにも半日以上かかってしまう。

 

そして、オブジェクトがマウスカーソルを追ってくるというのは、難なくクリアできたのだが、後半の尻尾付けるところで苦戦。尻尾みたいなとこ(それがテンタクル)を頭オブジェクトの子どもとしてくっつけて、その尻尾の中に関節のような節(segment)が入っているとして、その節たちが、前の節のポジションを追いかかけることで、蛇のような、ウナギのような動きが実装されているというわけ。

最初はどピンクで出てくるLineRenderer。これが尻尾になる。

そのスクリプトの説明をしてくれていて、それは間違いなく書けた自信はあるのだが(書けたといっても意味は半分くらいしかわかっていない(笑)一言一句違わないように気を付けて真似しただけ)

スクリプトをテンタクルオブジェクトにくっつけて、インスペクターのフィールドにもそれぞれのものや数字を入れて、これで良し!と、再生してみたところが、なんじゃこりゃ~~!!

緑のエニシダオブジェクトを頭にして、尻尾がなびくはずだったのだが、尻尾が地面に生えている!びくともしないので、マウスにくっついて動くのは頭だけどいう、予想と全く違う動きだ~~!

先に根っこが生えてるみたいなわたしのTentacle。クネクネでなく直立不動!

期待が大きかっただけに、ちょっとがっかり*1

スクリプトはよ~く見比べたから、間違っていないと思うのだが・・・・

でも、どこかで間違ったんだよね。

でもコードの意味が半分くらいしかわかっていないので、どこが間違ったかを探すのも、今は難しい。粘り強くやるしかない!

だって、Blackthornprodさんのゲームみたいなの、作りたいから。

(こん)

 

*1:+_+

ボスの動き、弾の発射、やりたかったことが全部実装できた!

ボスがキツネくんを狙って、岩ブレットを連射してくる!

今日は、昨日できなかったことをまとめてやった。

1. ボスがずっとキツネくんの方を向くようにする。

2.    ブレットがボスの発射口で生成されて、キツネくんのいる方に発射される。

 

悩んだところ

●ふたつのオブジェクト(Aはスクリプトを張り付けている自分。Bは別のオブジェクト)の位置関係を調べて、AがBの方を向くようにしたかったわけだが、そもそも別のオブジェクトの位置を取得する方法が、あやふやだったので、そのあたりから確認しなくてはいけなかった。((´;ω;`) 

GameObject.Find(”B”)とやるのか、、、と悩んだけど、スクリプトの最初のところに

    public Game Object B;

と書いておくだけでOK !だった。

あとからインスペクターのフィールドにヒエラルキーからBのオブジェクトを放り込むだけで事足りることが分かった(*^_^*)それができれば、あとはGetComponent<Rigidbody2D>()とか、B.transform.positionとか、欲しい情報をなんとか取得できることが分かった。

 

●ボスを回転させる方法。3Dの情報は多いように思ったが、2Dでスクリプトをどう書くのかがわからなくて悩んだ。でもそういえば、この前ブレットの発射では変なことになってしまったが、あの時、ボスはキツネ君のほうを向いて回転していたんだったな。

没にしたスクリプトから、一部をコピーしてきて張り付けてみた。

var vec = (player.transform.position - this.transform.position).normalized;

this.transform.rotation = Quaternion.FromToRotation(Vector3.up, vec);

この二行でうまく回転するようになった。

ただし、360度を超えて回転すると、その瞬間に画像が一瞬変になるので、それの修正は必要。今後の課題。

参考サイト

LookAtを2Dで再現するには - デジタルフロッグ (hatenablog.jp)

 

●ブレットを飛ばす方法。昨日まではワールド座標で(-1, -0.3, 0)のように指定した角度で飛ばしていたが、それはテストのためで、本当はボスの顔の向いている方向(つまりキツネくんのいる方向)に飛ばしたかったので、そこんところを修正する必要があった。さっき、ボスの向きをキツネくんの方に向けることができたので、簡単かとおもいきや、これが意外に難しく、さっきはボスのrotationだったのを、弾の飛ぶ方向として指定する方法が分からなくなってしまった。

参考サイト

【Unity】2Dでクリックした方向に弾を飛ばす【サンプル】 | TECH PROjin (pjin.jp)

これを参考に、マウスの位置のかわりに、キツネくんの位置を当てはめることで解決!

 

昨日までの課題は全部解決したので、これからは、弾に当たったらキツネくんのヘルスが減るようにして、それをUIのヘルスバーに表示するようにしたい。ボスのヘルスバーも作らなくては!(こん)

 

 

あ!わかった!!!攻撃をやめさせる方法!

さっき書いた日記では、できなかった攻撃の中止ができた~~~!!!

 

「InvokeRepeatingを止める」で検索してみたところ、ありました!(*^_^*)

 

https://gist.github.com/nopitech/dfd26c0ff4f9e0bacae12f55e93d3a74

「予約・実行しているInvoke系の関数をキャンセルする」と題して、紹介されていたよ。

 

それもこんなに簡単なやり方でできるとは!ありがたい。

InvokeRepeating("",  ,  )とした関数を、CanselInvoke("")とキャンセルするだけだって!

もちろん夜中だけど早速やってみた。

 

お~~!!感動***(*^▽^*)***

さっきまで悩んでいたことが霧が晴れるようにすっきり解決。

 

先人たちがノウハウを書き留めてくださっていて、ほんとに感謝感謝。

(こん)

 

キツネくんのBOSS戦の準備

今日は、「キツネくん森へいく」ゲームの最後のシーンとなるボス戦の準備の続き。

この前は、ボスがランダムに種類の違う弾を繰り出してくるようにしようとして、岩ブレットを無数に吐き出して、蛇のようにトグロを巻くという訳のわからない事態に陥ったので、今日は新しい別のシーン「Last」を作ってまず実験的にやってみることにした。このシーンは俯瞰的に上から見た感じで作る予定。

やりたいこと

1. ブレット(弾)の用意

ブレットを用意する。これはこの前と同じ、岩と切り株のスプライトをアニメーションにしたものに、speedとか方向とかを決めるスクリプト「BossBulletController」とRigidbody2D、Colliderをつけて、プレハブ化しておいた。

2. ボスが弾を生成して発射する

ボスのスプライトがまだ仮のものしかないので、とりあえずそのボスに、ブレットの発射口のようなノズルをつけて、俯瞰的に見てもこっちが前ですよとわかるようにしてみた。ブレットの飛ぶ方向はボスがキツネくんのいる方向に体を向けることにするので、真っすぐ正面に飛ばせばよいと思っている。(ただし、今日はまだ向きを変えるところまでやれていないので、適当な方向に岩を切り株を飛ばしていればし!ということにしてある)

生成はInstantiate(BossBullet, transform.position, transform.rotation);

連続攻撃はInvokeRepeating("BulletSeisei", 1, 1);

などを使って関数を作ってみた。

3. キツネくんがテリトリーに入ったらという条件をつけて攻撃スタート

ボスとの距離が一定以内になったら、ボスがキツネくんの方を向いて、攻撃を仕掛けてくるようにする。これは距離を測るより、ボスの周りに円を描いて、それにコライダーをつけることで実装できるかなと、思ってやってみた。2Dオブジェクトの円をボスの子どもとしてくっつけて、円の名前を「Territory」とし、それにサークルコライダーをつけて、制作中わかりやすいようにうっすらと色を付けておいた。ブレットの生成と発射のスクリプトも今はとりあえずこのテリトリーにアタッチしてみた。これでキツネくんがこの円の中に入ると、ボスが攻撃してくればOK!

円に入ってきたら・・・は

void OnTriggerEnter2D(Collider collision)

{ if(collision.CompareTag("Player")==true)

  {

   InvokePeating("BulletSeisei", 1, 1);

   }
 }

 

とここまでは、so far so Good!  上手くいったぞ~!

、、、なのだが、実はダメだったのだ~~~~~!!!!

 

Triggerのついたテリトリーの外にキツネくんが出ても一度始まった攻撃は止まない。

そして、もう一度入りなおすと、弾が二倍の量になって飛んでくる。

そして、さらにもう一度入りなおすと、弾の量は3倍に!!

こりゃ、恐ろしい(*_*;

ボスのテリトリーの外にいればキツネくんは攻撃されない

ボスのテリトリーに入るや否やボスから攻撃されるキツネくん


4. ボスがキツネくんの方を向く

これは今日はできなかった。明日の課題。

 

それより、3.の問題をなんとかしなくては!

OnTriggerExitというのを使うとしても、生成をやめるという関数の書き方がわからない。nullを生成するとやってみたけど、ダメだったし、、、、switchという構文を使うのかな~~?それならretrunというので止められるみたいだが・・・

ま、明日考えよう。(こん)

見れば見るほど、これは宝の山!BlackthornprodさんのYouTube

このまえ、素敵なインディゲームを作っている人を発見!と、感動した例のBlackthornprodさん。改めて一つ一つの動画をよく見てみると、どれも役に立つチュートリアル!!

この8か月間UnityのC#を見よう見真似で書いてきた身で見ると、C#の大事なコード9つを紹介してくれている動画も、納得しながら見られた。そしてまだ知らなかったことは、ありがたく覚えさせて頂いた(使えるかと言えば、まだ使えないかもしれないが、気に留めることはできた)

https://youtu.be/aB9LJ9oHGOs

 

アニメーションの作り方も、今までやった他のチュートリアルとは一味違う解説があったのも新発見。パーツごとにスプライトとしてインポートしたキャラクターのパーツがUnityの中でアニメーション化されて、生き生きと動くキャラクターに仕上がっていくプロセスも感動!

https://youtu.be/EmbA-AitPow

https://youtu.be/FTxQKHG5WCA

 

ほかにも身に着けたい知識としては、こういうものも。👇

 

長い尾をゆらしながら動くプロシーデュアル?アニメーション。

https://youtu.be/9hTnlp9_wX8

2Dに光を導入するやり方。

https://youtu.be/WiDVoj5VQ4c

パーティクルの作りかた。

https://youtu.be/_z68_OoC_0o

 

なにより一番感動するのは、ゲーム制作が自由な発想で出来上がるというプロセスを紹介しているところ。Unity初心者のわたしたちは、まずUnity公式チュートリアルをやってみるところから始めて、その中の画像など一部を加工してみようという段階なのだが、、、、ちょっとしたアイデアを大事に育てることで、面白かったり楽しかったりするオリジナルゲームができるものなんだと教えてくれている。一日も早くスクリプトに精通したいものだと思っても、実際はかゆいところに手が届かないもどかしい日々が過ぎていくけれど、それでもコツコツやっていけばBlackthornprodさんのような楽しそうなゲームをいつか作れるかも!!

頑張る元気が湧いてきた。

(こん)

果たして ラスボス戦のないアクションゲームでいいのか?

そもそも

ことの発端は

unity learnのチュートリアルで学んだら

ちょいとキャラだけでもすり替えれば

それでオリジナルゲームとして

発表してもいいですよ

という心の広いunityさんのお言葉に甘えて

2DGameのチュートリアル

Ruby's Adventure】をちょちょっと改造して

ともかく何かゲームっぽいものを世に出そう!

と考えたことでした。

 

【ルビーの冒険】

というチュートリアル

Rubyという主人公キャラが動き回る地面の

タイルを敷き詰めるところから始まります

次にRubyを配置し

敵の設定もして

いよいよRuby

"前後左右に歩く"

"何か物を投げる"

という動きをつけます。

そしてそのあとは

敵に攻められると

ライフが減る

回復アイテムで

ライフが増える

その変化をヘルスバーで知らせる

大体このあたりのお勉強ができる

親切設計のチュートリアルです。

 

でもね…

動き回る敵に

ぶつからないように動きながら

何かを投げつけたら

当たった敵は止まる

ただそれだけのゲーム

 

これでは

もの足りなさすぎる

なにかそれなりの筋立てのあるものを作らないとねぇ

となり

 

森の乱開発により仲間を切り倒された

森の木々が怒ってゾンビと化して

襲ってくる

という設定を思いついたのです

 

考えているうちに

森も1つだけというのも物足りないよね

いろんな森があってもいいよね…

そして最終的にはやっぱり

ラスボス戦‼‼

となって

 

ラスボスは

当然、諸悪の根源『乱開発』

悪いドラゴンその名も『ランカイ-ハーツ』を倒さねばなりません

というところまでたどり着いたのですが

Rubyチュートリアルで学んだところまででは

ゲーム性の難易度を上げたボス戦を作るのは

とても無理

かといって

それまでの面よりラスボス戦が単純であっけないのでは

話にならない

試行錯誤を繰り返すうちに

Ranquaii-Herts ドラゴン

ないほうがましということに。。。。

 

でもスクリプト担当の

(こん)ちゃんががんばってくれてるから

結局素敵なラスボス戦が出来上がるんじゃないかな?

と期待しているところです。

MYMYぽん 記