2016.03.21【チュートリアル】uGUIとPhysics2Dでブロック崩しを作ってみるチュートリアルとして試しに作ってみました。比較的プログラムをあまりできない人向けにできる限り崩して書くようには気を付けます。画像が用意できない人向けに画像リソースは一切使わないようにしてます。※この記事はUnity...cfm-art.sakura.ne.jp2019.06.13この記事の続きです。最後に課題として投げていたものを順次実装してみます。毎度同じようにはねて面白味もなにもないので、バーの当たる場所で跳ね返る角度を若干変えるようにします。ボールに角度を変える処理を追加まず、ボールに角度を変える処理を追加します。velocity(速度)を設定する。}}ベクトルの回転はQuaternionを使う事で簡単にできます。次に衝突位置がバーのどのあたりかを知る必要があります。衝突時に何がどこにぶつかったなどの情報はOnCollisionExit2D関数に引数として渡されます。}この引数はなくても動きますが、その場合は衝突したタイミングだけがわかり、そのほかの細かい衝突時の情報が取得できません。試しに衝突の位置をログに表示してみます。}}Collision2Dのcontactsに衝突座標が入っています。配列な理由は複数同時に何かにぶつかることがあり得るからです。バーの座標と衝突座標の差を計算すると、真ん中であれば0、左端であれば-横幅の半分、右端であれば+横幅の半分となります。差を横幅の半分で割ると、当たった位置で-1~1までの数値が求めることが出来ます。これに変えたい角度を掛けると真ん中はそのまま跳ね返る、端に行くにつれ大きく角度が変わる。いうのが実現できそうです。}先ほど作った関数を呼び出してこんな感じです。バーがはみ出すはみ出すとちょっと見た目が良くないのではみ出ないようにします。座標が出ないように座標が一定以上変わらないようにします。上記でバーの位置で跳ね返る方向を変えたので半分程度は壁にめり込むようにします。Clampを使って-320~320の以外の数値にならないようにしているだけです。はみ出た部分は見えなくするこれでもバーが半分ほどはみ出るので、この部分は見えなくします。これだけで、はみ出た部分は表示されなくなります。ブロックに耐久力ブロックに耐久力を設定できるようにします。これも難しくありません。ブロックに耐久力を設定できるようにし、ぶつかる度に減らし、0になったら消す。}}失敗できる回数を設けるいわゆる残機を設けます。Game.csに残機用変数を追加します。}}変数life_を増やしました。初期値に3を入れてます。次に残機を減らして、0になったらゲームオーバーになるような関数を追加します。}}このままだとボールが画面外に出たまま戻ってこないので、ボールを復帰させます。}Field.csでゲームオーバー判定していたので、この関数を呼び出すように変更します。}}ひとまずこれで失敗してもボールが真ん中に戻ってきてつづきができるようになりました。復帰早々下向きに飛んで来るのは微妙なので、向きも初期化するようにします。velocity(速度)を設定する。}Ball.csに初期化する関数を追加し、Game.csではそれを使用するように変更しました。スコアの導入スコアを導入します。}}残機と同様にscore_変数を追加しました。}}ブロックが消えるときにスコアを加算するように対応してます。これでスコアが増えるはずですが、表示されていないとわかりませんので、画面に出すようにします。Gameの下に新しいGameObjectを作ります。Emptyを選択します。名前はUIにしました。他のと同様にストレッチでLeft等はすべて0です。その下にスコア用のTextを追加します。Textを選択します。これで文字表示用のオブジェクトが出来ました。Strechにして、図のようにしました。上から少し下で横幅一杯位がに表示できるようにしています。右上揃いにしたいので、Pivotは両方1にし、TextのAlignmentも右上揃いに設定します。Sizeは見やすい大きさに適当に設定してください。これでスコアの表示用オブジェクトの設定が終わったので、Game.csでスコアが加算された際に、このTextにその数値を反映するようにします。}}Editor上で設定するのも忘れないように。シーン遷移の導入シーン遷移を入れます。タイトルという流れに変更しようと思います。タイトルとゲームオーバーのシーンを作ります。Sceneで新規シーンを作ります。Sceneで保存します。Scenesの下にTitleという名前にしましょう。Canvasの設定をGameシーンの時と同様にします。下にタッチ判定用のゲームオブジェクトを追加します。Image名前はTouchAreaにし、StrechでLeft等はすべて0に。ColorのAlphaも0にして見えなくします。タイトルとタッチして開始の文字を出す為のTextを追加します。次にタッチされたら、Gameのシーンへ遷移するスクリプトを用意します。Triggerを追加します。Clickイベントを追加して、Titleをドラッグで設定します。シーンを登録するこれで実行すれば動くかとおもいきや動きません。Gameという名前のシーンが無いと言われます。Settingsにシーンを登録しなければいけません。SettingsはFileにあります。ゲームオーバーを作るゲームオーバーを作りますが、ゲームオーバーと表示して、タッチしたらタイトルに戻るだけなので、内容がタイトルとほぼ一緒です。いうわけで面倒なので、Titleシーンをコピペで作ります。Duplicateを選択します。1が出来上がりますので、GameOverにリネームします。GameOverシーンをダブルクリックして開いて、細かいところを変更していきます。※GameOverシーンが空っぽの時はまだ、保存されていないTitleシーンがコピーされていますので、再度コピーしなおしてください。名前を変えたり文言を変えたりしてます。タイトルに戻るスクリプトも作ります。}}TouchAreaのスクリプトも差し替えます。いう遷移は出来るようになったので、最後にゲームオーバーでこのシーンへ遷移するように変更します。}Game.csの失敗時の処理を書き換えました。SettingsにGameOverシーンを登録するのを忘れないようにしてください。アイテムの導入ライフを増やすアイテムとボールの速度を速めるアイテムを導入してみます。進めるにあたってGameシーンを開いておきましょう。(一つ前のトピックでタイトルシーンになってるかもしれないので。)アイテムはブロックを破壊したときにランダムで出現し、壊したブロックの位置から下にゆっくり落ちてきて、自機で触れると効果が発生する感じにしたいと思います。アイテム取得時の機能を作っておくアイテム自体を作る前に先にアイテムを取ったときの「ライフを増やす」と「速度を増す」機能を関数として実装しておきます。ライフはGame.csにあるのでそこに増やす処理を足します。}}ライフの変数を1足すだけです。ボールの速度も変える処理を入れます。これはBall.csで制御されていたのでそれを編集します。Ballに速度用変数を用意します。略}次にこの変数を変更する関数も用意します。}}ただ、このままでは変数が変わっているだけで、Rigidbodyの速度が変わっていません。Rigidbodyの速度を変更する関数も用意します。velocity(速度)を設定する。}この関数を速度変更時に呼ぶようにします。Resetで速度を元に戻したりを踏まえて最終的に以下のようになります。velocity(速度)を設定する。velocity(速度)を設定する。}}同じような処理が多く、まとめた方がいいのですがそれはまた別の話なので今回は割愛します。これでライフを増やす処理と速度の変更処理が出来ました。アイテムオブジェクトをつくる次に肝心のアイテムオブジェクトを作ります。アイテムオブジェクト用の場所をHierarchyに用意しておきしょう。作り方や設定はいままでどおりです。ライフを増やすアイテムItemsの下にTextを作って上記のような設定にしました。Colliderもつけています。下に落とす処理はRigidbodyを使います。スクリプトを用意してそこで、下に落ちる処理と自機と触れたときの処理を記述します。}}とりあえず出来ました。ボールの下あたりを初期位置にして開始すると1UP出来ます。ボールと同じ場所にあるとボールとぶつかり1UPしてしまいました。当たる相手を限定するアイテムは自機だけにぶつかってほしいので、当たる相手を限定します。スクリプトで判定する事も可能ですが、今回はEditor上の設定で対応したいと思います。Layerを増やすInspectorの左上にLayerがあります。Layerを選びます。(Inspectorで見るのはどのGameObjectでもいいです。)選択したらレイヤーの編集画面になるので必要なレイヤーを足します。それぞれボール、壁とブロック、自機、アイテムに設定するようにします。BallのレイヤーをBallにWallsの下の4つのレイヤーをBlockに先ほど作った1UPアイテムのレイヤーをItemに自機のバーのレイヤーをBarにBlockプレハブのレイヤーをBlockに各GameObjectにレイヤーの設定が終わったら次にPhysics2Dの設定を開きます。Matrixを設定することで、どのレイヤーのオブジェクトがどのレイヤーのオブジェクトと衝突するかを設定することが出来ます。ItemはBarだけにぶつかるBarはBallとItemにぶつかるBlockはBallだけにぶつかるということで上図のようになりました。※すこし図が見づらいかもしれませんが、例えばBarであれば下図の赤枠の中のチェックがついているもの(ItemとBall)が衝突対象です。これで実行してみるとアイテムはボールとぶつからず自機だけに反応するようになりました。他も問題なさそうです。速度上昇アイテム作る同様に速度上昇アイテムを作ります。1UPのコピペを改変していきます。Hirerachyの1UPアイテムを右クリックしてDuplicateします。コピーが出来るので適当にいじります。変更点はGameObjectの名前と、Textの文言と、あとはOneupItem.csの削除くらいです。Componentします。Prefab化する開始時に出てるのでは意味がないので、Prefabにしてブロック破壊時に出せるように準備します。以前にブロックでやった通りHierarchyからドラッグ&ドロップで終了です。Hierachyにある方はもういらないので削除してください。アイテムを生み出す処理まずは、Game.csにアイテム用Prefabを設定します。略}Editorでここに設定します。ブロックの時と同じようにItemを足す場所も必要です。itemPrefabs_;//略}これもEditorで設定します。次はGame.csでランダムに指定の座標にアイテムを生成する関数も足します。}}ブロックが破壊される際にこれを呼びます。}}ひとまず100%生成されるようにして動きを確認します。実行してみるとブロックを壊すとアイテムがでて、とると効果も出ている感じです。出現率を設定するいまは100%なので出現率を変更します。}}ランダムで0~99までの数値を取得し、それが0~49ならアイテム生成としています。これで50%でアイテム生成されるようになりました。プロジェクトここまでの内容はこれです。do.関連記事C#自分で作ったuGUI用メッシュのクリック判定対応uGUIで自由なメッシュを表示するでuGUI用のメッシュの作り方をざっくり解説しました。これにIPointerClickHandler等を利用してクリック(タッチ)判定をつけてもイマイチ思った動作をしません。...C#uGUIの描画する順番uGUIの表示する順番の話です。ヒエラルキーで上から下に順番に描画されます。上が一番奥、一番下が一番手前に表示されます。こん...ASP.NetASP.Netのセッション変数をmemcachedにするASP.Netのセッション変数をmemcachedに変更してみようという試みです。ASP.Netのセッション変数での扱いをおさらいします。ASP.Netでは大きく4パターンあります。前の記事でuGUIの自分で作ったクリック判定の調整作業をざっくり書きました。これには課題点がありました。クリ...ASP.NetASP.Net触ってみたずっと気になってたASP.Netをさわってみました。Frameworkで動くウェブアプリケーションの環境です。Servletやapache...C#Unityでトランジション演出を実装する使い古されて今更感ある内容ですが、ノベルゲームでよくあるトランジション演出についてです。トランジション演出というのは以下の画像のような場面転換で利用されるものです。ツイートタイトルとURLをコピーしました。