unity進捗-久しぶり編-

久しぶりにunity進捗書きます。

はい、久しぶりです…。

いろいろ忙しかったんです…。

 

いわゆるブロック崩しを作っていたんですが、

というかいい加減完成させなきゃなんですが、

面白いアイデアが湧いたのでそっちにかかりきり。

 

その中で引っかかったことがあったので少しメモ。

今はシューティングゲームを作っているんですが、

爆発をパーティクルで作成しています。

普通、自分と敵、自分の打ったミサイルと敵の衝突に対して

爆発エフェクトをかけると思うんですが、

今回は敵と敵や自分と敵のミサイル同士などにも

エフェクトをかけようとしています。

そうすると、エフェクトが多発して重くなる可能性があるので

どうにかしようとしてさらにひっかかったお話。

 

◎したかったこと

エフェクトの発生数を減らす。

具体的には単純にOnCollisionEnterでパーティクルを発生させると

同じ場所に2重に発生するので重複をチェックして

1か所に1つのパーティクル発生にしたかった。

 

◎起きたこと

発生数を減らすどころかエフェクトが多発。

1か所の衝突で1000個以上のパーティクルが発生した。

 

◎原因となったメソッド

重複のチェックをする機構としてexplosionControlというクラスを作成。

衝突が起こると、explosionControlに自分と相手の座標を送る。

explosionControlは送られた座標にパーティクルを発生させる子オブジェクトとして作成し、配置。ただし、子オブジェクトがいる場合には子オブジェクトの座標を一致しない場合のみ作成する。

ということで作ったメソッドが下。

if(transform.childCount>0){

 foreach (Transform child in gameObject.transform) {

  if(colVector!=child.position){

   エフェクトのためのゲームオブジェクトを作成

  }

 } 
}else{

 エフェクトのためのオブジェクトを作成
}

一見、うまく行くんですが…。

1か所の時はうまく処理できますがエフェクトが増えるにつれて

爆発的に増加・・・。

2か所目で発生するとexplosionControlは1回目の呼び出しでは

1か所目とは違う場所のため、オブジェクトを作成。

2回目の呼び出しでは2か所目に作ったオブジェクトとは場所が一致するため作成しないが、1か所目とは一致しないためオブジェクトを作成。これによりオブジェクトが3つに…。

3か所で発生するとさらに増え、6つ。

4か所目だと12個と指数的に増大。

 

ということで改善したのが下。

if(transform.childCount>0){

bool rec = true;

foreach (Transform child in gameObject.transform) { if(colVector==child.position){

rec = false; break; }

}

if(rec){

エフェクトのためのオブジェクトを作成

}
}else{

エフェクトのためのオブジェクトを作成
}

すべての子オブジェクトの座標と一致しないか確認し、

一致しなければオブジェクトを作成する機構を入れました。

これだけなんですが1週間以上悩んでたwww。

 

 

 

 

 

 

unity進捗

少し間が空いたんですが・・・自分のメモ程度に。

ブロック崩しが完成しましたーーーーーーーー。

androidで実機に乗せて最終チェック中です。

 

学んだこと

 

1.デザイン-全体の統一したデザイン、世界観が必要

2.レベルデザイン-無限継続が可能な場合の難易度変化

 

3.タッチ操作を想定したコントローラー作成

4.uGUIを用いた画面作成と画面遷移

5.BGMとSEの導入。複数SEの乗せ方も。

 

今回は、思い付きのアイデアを形にすることから始まったので

面白そうな機能を思いつくままに付けていたので

一段落したときにデザインぐちゃぐちゃ・・・。

unityroomに投稿した時とはかなり雰囲気が変わりました。

作成途中で変わるとしても、

最初にきっちりとしたデザインを作る必要性が一番の収穫でした。

google play storeに上げれたら、また報告しますm(__)m

ドライヤーとピンポン玉

前、言ってたゲームと違うやんと突っ込みを受けそうですが…。

無料ゲーム投稿サイト unityroom - Unityのゲームをアップロードして公開しよう

unityroomのunity1weekという企画で「フロー」というテーマで

ゲーム制作にチャレンジしました。

フローといわれてなぜか思いついたのが、

www.youtube.com

なぜと聞かれても困るけど…。

原理的に言うと揚力とかジャイロなんかも働いてるのかもしれないけど

1週間という期間でこれを実装するのは無理!!!!!

ということでparticleで風のイメージに使ったことを活用して

particle collisionを使ってそれっぽく作ってみました。

当初の目的は達成したんですが、

ゲーム性というところでは少し欠けるかなと思っています。

基本的な設計をしてなかったのでコードぐちゃぐちゃ…。

でもせっかくなので遊んでみてくださいwww

ドライヤーとピンポン玉 | 無料ゲーム投稿サイト unityroom - Unityのゲームをアップロードして公開しよう

 

 

Bounce FreeDom(仮)の進行状況

進行状況:70%くらい

unityの仕様なのか、壁との衝突時の反射処理がうまくいかない

+反射の角度や向きを調整したかったため

衝突処理をオリジナルで作成。

他にもinstantiateを用いてボタンの数を自由に設定できるようにもしました。

今はタイトル画面を作成中。

これからはレベルデザイン、ゲーム全体のデザインを詰めていきます。

たぶんですが、残り30%が地獄な気がします。

というか、これは残り30%じゃない気がしてきたwww

 

 

unity経過

unity始めてから結構、時間が経ちましたが、少しずつ進めています。

「クッションもの」と「ブロック崩し」を平行して作っています。

 

クッションものは原型ができたので、

装飾したり、複数ステージ作ったりかと思っています。

装飾は複雑な構造ではないのでセンスの問題が大きそうですが、

問題は複数ステージ。手で作るのはかなり大変なので自動化したい・・・。

unityに自動化スクリプトを組み込むか、javaで作ってcsv??

自動化スクリプトは難易度をどう定義するかが問題、

あと同じステージができないって問題も出てくるかも。

javaスクリプト組めばそれを記録しておいてupdateなんてことも…。

 

ブロック崩しはアイデアできて動き始めてるけど

いろいろ詰まってまだまだかかりそう。

ただブロック崩しのほうが簡単かも。

 

経過報告は週1くらいで書かないと作成自体が止まっちゃいそう(笑)

 

unity~つまらんミスで詰まる~

「フィールドxxxは割り当てられてません。常に既定値nullを使用します。」

public class aaa:MonoBehaviour{

      int angle;

 

      void start(){

              int angle=new int[s];

      }

 

      void ttt(){

              Debug.Log(angle[res])

     }

}

 

こんな感じで書いて詰まりました。

start()の中でangleにint[]を付けていることが原因でした。

常識的に考えれば当たり前なのかもしれませんが、

まだまだ初心者な中でいい勉強になりました。

 

 

大学院への道~番外編~

今年の大学院受験は一旦、やめたんですが…、

受験・進学を悩んでいた時期に自信をつけるために

個人的にまとめた研究が、12月の学会に通りました☆

あんまり看護系ではされない(自分はみたことない)研究だったので

落とされる気満々だったんですが(笑)。

テンション上がって上司に報告したら

「資料作成頑張ってね」

と言われ、現実に引き戻されました(泣)。