読者です 読者をやめる 読者になる 読者になる

第5回 Unity開発記録 敵の移動方法を見直す

f:id:moshi1121:20170306144202p:plain

以前に敵の動きをAnimationを使用して作成しましたが、いろいろと不都合があるのでは?と思ったので、見直して作り直すことにしました。

不都合一覧

  • 弾を発射するタイミングが計りにくい
  • 移動場所の指定がしにくい

などです。特に問題なのが、移動場所の指定がしにくいということ。敵ごとに移動場所を指定してあげたいので、一つ一つAnimationをいじるのはちょっと面倒かなと。

そこで、コルーチンを使用することにしました。

続きを読む

第4回 Unityゲーム 開発記録 敵の攻撃バリエーションを増やす

f:id:moshi1121:20170306144202p:plain

f:id:moshi1121:20170321213607p:plain

こんな感じに、敵さんに3方向に攻撃をしていただくのが今回の目的です。

 

Instantiate関数を使用して弾を生成しています。弾にはあらかじめ直進方向に進むスクリプトをアタッチしてあります。

さて、Instantiate関数には回転方向を指定する引数が設定されています。見てみましょう。

docs.unity3d.com

public static Object Instantiate(Object original, Vector3 position, Quaternionrotation); 

Object originalには生成するオブジェクトを、Vector3 positionには生成する位置を、Quaternion rotationにはオブジェクトの回転方向を指定するわけですが、最後のQuaternionがなかなか曲者でして、理解できませんでした。

そこでどうしたかというと、とりあえず生成しておいて、あとから回転方向を指定することにしました。一連の流れがこちら。

 var obj = Instantiate(shot, this.transform.position, Quaternion.identity); //弾の生成
obj.transform.Rotate(Vector3.forward,180);
obj.tag = "Enemy_Bullet";

 いったん生成したオブジェクトをobjに保存しておき、transform.Rotateで回転方向を指定しています。最後のtagは自分自身の弾で敵さんが死んでしまわないように設定しています。

これを

var obj = Instantiate(shot, this.transform.position, Quaternion.identity); //弾の生成
obj.transform.Rotate(Vector3.forward,180);
obj.tag = "Enemy_Bullet";

obj = Instantiate(shot, this.transform.position, Quaternion.identity); //弾の生成
obj.transform.Rotate(Vector3.forward,170);
obj.tag = "Enemy_Bullet";

obj = Instantiate(shot, this.transform.position, Quaternion.identity); //弾の生成
obj.transform.Rotate(Vector3.forward,190);
obj.tag = "Enemy_Bullet";

 こうして、10度ずつ向きをずらしてみました。動きを確認してみましょう。


敵の攻撃バリエーションを増やす

 

悪くないのではないのでしょうか。ただ、コードが汚いですね。プレイヤーにも同じような機能を持たせたいので、後々整理します。

作文の書き方を教えてくれる本

f:id:moshi1121:20170314233751j:plain

作文は、小学生時代に回避不能の、立ちはだかる壁だったのを記憶しています。

そもそもなにを書けばいいの?どのように書いたらいいの?

その答えを教えてくれる先生はいませんでした。

それから約10年間。作文という存在を忘れたころにやっと、その答えが書いてある本を見つけたのです。

 

続きを読む

第3回 Unityゲーム 開発記録 ゲームオーバーの実装

f:id:moshi1121:20170306144202p:plain

Unityのロゴを利用できるようです。詳しくは下の記事を参照ください。日本語環境なら日本語で出てきます。

unity3d.com

 

今回はゲームオーバーを実装していきます。

 

ゲームオーバになる条件は、自機が破壊されたときですね。

OnTriggerEnterを使用して、障害物に接触したら自機を破壊するコードを加えました。

 

private void OnTriggerEnter (Collider other) {

is_dead = true; //死亡判定をオンに 

Destroy(this.gameObject);

}

 これで何か障害物に接触したら自機が破壊されるようになりました。

次に、自機が破壊されたらGameOverと表示させるようにします。

 

f:id:moshi1121:20170306145010p:plain

こちらがゲームオーバー画面。リトライとホームボタンも加えました。

Inspectorタブのチェックを外しておいて(非アクティブにする)、通常時は見えないようにしておきます。

GameObject.SetActive(true);で表示ができるのですが、対象のオブジェクトが非アクティブだと、オブジェクトの捜索をしても見つけてくれないみたいです。かくれんぼしているんですね。

なので、あらかじめどこに隠れているのか教えてあげます。

public GameObject gameover; //ゲームオーバー表示 

 これでInspector上でGameOverオブジェクトがどこにいるのか教えてあげます。かくれんぼだったら裏切り行為ですね。

 

最終的なOnTriggerEnter内は次のようになりました。

private void OnTriggerEnter (Collider other) {
is_dead = true; //死亡判定をオンに
gameover.SetActive(true); //ゲームオーバー表示
Destroy(this.gameObject);

 実際に動かしてみます。

 


GameOverの実装

うまく表示されました。

そのうち、文字が表示されるのを、自機が破壊されて数秒後にしたいです。

GameOverと表示する目的は達成されているので、ひとまずここまで。

スポーツがうまくなるには

f:id:moshi1121:20170304003314j:plain

スポーツ上達への考察

 今回の記事では参考にならないスポーツがあります。それは、陸上競技です。なぜ参考にならないのかは後半で記述しています。

 

みなさんはスポーツ得意でしょうか?学校で体育の授業が嫌いだった方は多いと思います。

わたしはスポーツが苦手だったかというとそうではなく、初めてやる競技でも、そこそこできるほうでした。

なぜ初めての競技でもそこそこできるのか。それには理由があります。

続きを読む

からだを柔らかくしたいなら、先にここに行っておいたほうがいいと思う

f:id:moshi1121:20170302214606j:plain

長いタイトルでごめんなさい。もしもしです。

 

最近、体を柔らかくしようとお風呂上りに柔軟しています。しかし、一向に柔らかくならないんですよね。

原因はなんとなくわかっているんです。それは、骨盤が歪んでいるのです。

思い返せば小学生の高学年、中学入学あたりからじわじわと歪んできていたのではないかと。そこで、まずは骨盤のゆがみと、ついでにO脚の改善をしようと整体にいくことにしました。

 

いざ、整体へ!

www.karada39.com

行ってきたのはカラダファクトリー。実は以前にも一度行ったことがありました。なかなか予定が合わなかったのと、興味が薄れてきていたので少し間隔があいてしまったのですが、店員さんは自分のことを覚えてくれていました。

 

続きを読む

PCの調子が悪いです

先月半ばごろからパソコンの調子がよくありません。

 修理をしようにも、原因がわからないのです。

状況的には

  • 電源ボタンを押しても反応なし
  • 電源を変えてみたが症状変わらず
  • たまに電源が入る
  • 電源入ってもしばらくすると落ちる

こんな感じです。

最初に電源を疑いましたが、他の電源を使用してもよくならない。つまり電源が原因ではない。

次にスイッチを疑いましたが、マザーボード側にもパワースイッチがあるのですがそれを押しても反応しない。

 

(´-ω-`)………………

 

ケース内の埃が結構たまっているので、オーバーヒートによる故障が今のところ有力候補です。

と、なると作り直さなければいけないですね。

余計な出費がぁ(;´д`)