ツクロウヤ

Unityによるゲーム開発記

【開発記】ステージ遷移について

ステージ遷移を実装しましたよ!ということで更新。
敵のグループを倒したりすると扉が開くようなものなど、ステージの状態が変化するものを実装しました。

f:id:ArtAwA:20161106143332j:plain

カメラの設定や背景を作っているころからなりそうだなぁと思いつつも若干目をそらしていた遮りの問題が起こってしまいました...
扉をくぐる際に途中で止まったりすると壁に遮られてしまい、プレイヤーの姿が見えなくなってしまいます...

f:id:ArtAwA:20161106143333j:plain

今後、壊せるオブジェクトや少し入り組んだような背景を作る予定なので、なんとかしないといけないということで。
白猫プロジェクトなどでもやられていました、隠れてしまったら、プレイヤーをシルエットで表示する機能があればこの問題も回避できるなと思い実装してみました。
ちなみに以下の記事を参考にさせてもらいました。

Unityでステンシルを用いたアウトライン表現 - 太郎Work

そして出来たのが以下のような感じです。

f:id:ArtAwA:20161106143334j:plain

問題解消!

と喜んだものの、別の問題も浮上...
描画負荷が高いんですよ... DrawCallが「3」も...
実装したシェーダでの処理的に「アウトライン」「ステンシル」「テクスチャカラー」でそれぞれで描画が掛かっています。

またキャラクターの構成がカスタマイズを想定して、
・頭部
・身体
・武器
の3つに分けています。
これらは「Skinned Mesh Renderer」なので、Batchされずにそれぞれにまた描画が...
キャラ一体に「DrawCall : 9」は恐怖ですね...

アウトラインはシェーダではなく自前で用意するのもありかな、でも調整がやりづらいし、汎用的じゃないなと思いつつ。

シェーダを弄り始めると泥沼にはまりそうなので、今は実装を優先して一旦保留ということで...

それでは今回はこの辺で
(´・ω・`*)ノシ

【Photoshop】レイヤーのリネームツール

Photoshopのリネームツールが欲しかったので探していましたが、微妙に痒い所に手が届かず...
じゃあ、練習がてら作るかということで作ってみました。

f:id:ArtAwA:20161020005939p:plain         f:id:ArtAwA:20161020015414p:plain

スクリプトの概要

主な機能は以下の4点です。

  • 「Add」レイヤー名に文字列を追加(前後)
  • 「Replace」レイヤー名の置換
  • 「SerialNum」レイヤー名に連番付け+上書きして連番(前後+桁ぞろえ)
  • 「Delete」レイヤー名から指定桁数文字列を削除(前後)
続きを読む

【開発記】リザルト画面だよ!

先週はちょっと別のことで自己開発をサボりがちでした><
ちなみに先週やっていたことは
・リザルトの実装+それに伴うデータの設計・外部化
・ノックバック処理の修正(アニメ実装まだ)
・開発補助ツールの拡張
と地味なことばかりやっていました。
Photoshopのリネームツールとか作ってたり、これはまたの機会に)

見た目的にあまり変わりないなぁと思っていましたが、リザルト画面を見せられるなということで。

f:id:ArtAwA:20161018002129j:plain

リザルトはバトル後にバトル画面に乗っける形にしましたが、背景によって見えにくさが変わってくるなと...
スクショを取っていて気づきましたが、4桁の数字とかは3桁区切りをした方が見やすそうですね。

この後はとりあえず先にステージギミックの実装を行っていきます。
単調さの解消にチャージなどを入れようかとしていましたが、この辺りはもう少しゲームシステムを詰めてから実装するか判断しようかと。

それでは今回はこの辺で
(´・ω・`*)ノシ

【開発記】開発時の問題:Sceneがnot loadedから進まない

先日進捗動画を公開して、一時停止画面などを表示して、また戦闘に戻るみたいなことをやっていました。
が... 他のリトライとリタイヤは実はココは正常に動いていませんでした|ω・`)コソ

何故かシーン遷移の際に、Sceneが「not loaded」の表記から一切進まず、BGMが垂れ流されている状態になっていました。
f:id:ArtAwA:20161008232144p:plain

何でだろうと調べた結果...
一時停止時に「Time.timeScale = 0.0f」で一時停止の処理を実装していましたが、リトライやリタイヤへの遷移時に元に戻す処理が抜けていたので、「not loaded」から進まない状態でした。
まぁ何というか... 凡ミスですね...(こんなのに何時間も悩んでいたのか...)

ちなみにロード時はこちらのサイトを参考に
【Unity5】非同期ロードでローディング画面を実装する。 : ねこバタ会議
SceneManagerに変えた形で実装していますが、

private IEnumerator LoadSceneAsync()
{
  SceneManager.UnloadScene(mCurrentScene);

  // 非同期でロード開始
  mAsync = SceneManager.LoadSceneAsync(mNextScene, LoadSceneMode.Additive);

  // シーン遷移をしない
  mAsync.allowSceneActivation = false;

  // 非同期読み込み中の処理
  while (mAsync.progress < 0.9f) //0.9で止まってしまうため
  {
	yield return null;
  }

  yield return new WaitForSeconds(LOAD_WAIT_TIME);

  // シーン遷移許可
  mAsync.allowSceneActivation = true;
}

どうも「mAsync.progress」は進むようで、シーン遷移は許可されている状態でした。
ずっとこの辺りで何かおかしくなっているのではと勘ぐっていましたが無駄足という...

それでは今回はこの辺で
(´・ω・`*)ノシ