2Dゲームの2Pカラーを簡単に作る方法
今回作った子は、8方向x1方向20枚=160枚
この子の2Pカラーを数分で一気に作成しちゃいましょう!
1つ1つ色を変更していたら、何時間かかるかわからない作業を数分に短縮できました!
作業環境は、CLIP STUDIO PAINT EX
使った機能は、色域選択、色相・彩度・明度、オートアクション、一括処理
この機能を組み合わせると次のGIFのようになります。
クォリティはこんな感じです。
左側が元の色、右側が2Pカラー
大まかな手順
一括読み込みを行うと次の画像のように表示されます。
<キャラクターの一部の色をまとめて変更>
保存に時間がかかる画像なら省いた方がいいかな。
自分はクリスタのレイヤータブの2つ隣にありました。
・下の隅にある[現在のオートアクションセットに新しいオートアクションを追加します]を押して新規作成
<発見>
もう1回一括処理で実行するとライトグリーンで出力された。
3Pカラーとしていけるかなと思ったんだけど、青い時には目立たなかった
色域選択で取り切れていない赤色の点々が目立ってました。
3Pカラー用には色相の値を変えるのと、作る色の順番を考えるのが必要ですね。
もう1つ、オートアクションって便利!!
今回初めて使ってみたんですがかなりいいですね。
同じ手順でできそうな作業を見つけたらどんどん自動化していきたい。
『暁の航路』の開発延期と2D版の制作開始のお知らせ
◆開発延期の原因は2つ。
1つ目は、自分とプログラマさんのスキル不足。
2つ目は、「暁の航路」の共有プロジェクトが壊れて復旧に時間がかかる。
◆2D版制作について
試行錯誤しながら、UE4で開発していく予定でしたが、1つのことを試すのにも時間がかかりすぎる。 なので、DXライブラリを使って、2Dで開発しながら色々試す。
遊びながら、面白いを見つけていこうと思います。
◆3D版制作再開予定は来年の1月頃の予定です。
雑記
2人で勉強しながらプロトタイプを作りながらで、仕様がふわふわしてると、開発はなかなか進まないですね。 仕様を確定させてからとりあえずの完成まで持ち込む。
そこからやりたいを追加していこう。(理想)
来年の1月頃に再開予定ですが、その頃には、自分の開発スキルやマネジメントスキルなどがぐーんとあがってるはずです。
ゲーム作りの合間に息抜きのゲーム作り パート8
ただいま製作中のゲーム! UnrealEngine4で『暁の航路』制作中(メインプログラマー:GAISUTO) Unityで『(タイトル未定)』制作中(メインプログラマー:ざわわ) UnrealEngine4で『大旗取合戦(仮タイトル)』(息抜き&学習用)
本職に影響がでないように製作するので結構スローペースになります。 原稿の合間に落書きを描いて、ゲーム作りの合間に息抜きでゲームを作って、仕事の合間はゲームをして息抜き。
——–本日!——–
NPCユニティちゃんの数を増やして試してみたところ、かなり重くなったので、AIを軽くする方向でもう1つ作ってみました。 パート7で作ったのが、全体探索のレベル上全フラグクラスを探索するAI 新たに作ったのが、全フラグの場所と色情報だけを持ったものを検索するAI
結果は、あまり変わらなかったです。
ただ、もう1つAIを作ったおかげで、FPSを大きく下げる原因を見つけることができた。 LineTraceByChannelのラインを表示させていたのが原因みたいです。 これがあるときに40体ぐらいだしてると、FPSの通常が70ぐらいで、団子が大きくなったあたりで30ぐらいまで落ちてた。 LineTraceByChannelを切ったら、通常が90~100、団子が大きくなってもあまり変化なし。
処理がちょっとごちゃっとしたので採用しなかったけど、とりあえず作ったので備忘録だけ残しておく。
NPCVTTask_FlagSearch_BTの中身。 フラグの位置と色の情報は、位置配列と色配列でゲームインスタンスに持たせるようになってます。 配列の番号で紐づくようになってます。
~流れ~ ・自分の位置を保持。 ・AIContorollerにキャストして、自分のチームカラーを取得。 ・Targetの位置を初期化 ・ゲームインスタンスにキャストして、全フラグの色配列と位置配列を取得。
色配列でループをまわす。(Elementを使ってすぐに旗の判別ができる) ・色配列ループのIndexを使って、位置配列から位置を取得。 ・自分の色と違うなら真の処理にすすむ。 ・初期化された直後なら真にすすむ(1つ目に来た位置情報をTarget候補にする) ・TargetVectorの位置情報が入っている(2つ目以降のループ)なら位置を比較して、 ・自分から近い方をTarget候補にする。 ・Target候補と自身の距離、ループで回ってきた位置情報と自身の距離を比較。 ・X座標Y座標Z座標を絶対値にして足して比較しています。 (数学の3次元の距離計算をすると処理がえらいことになるので簡略化してます。)
ループが終わった後の処理。
・Targetが決まったら、FINDで位置配列からTargetのインデックスをとってくる。 ・そのインデックスで色配列から色情報をとってくる。(自身が立っている場所が敵のフラグで、一旦離れなければ旗を取れないときの処理に使います) ・Targetが初期状態の場合、偽にすすみ、3秒待って、もう一度ループ(取れるフラグがない時) ・Targetが決まっている場合、ブラックボードに位置情報を書き込む。(これをビヘイビアツリーでMoveToに渡して、移動してもらいます。)
Flag3Count(これが一旦離れて旗を奪う処理です) 3回連続で同じフラグをTargetにしたら、Targetから少し離れてビヘイビアツリーにfailureを返す。離れてもすぐに次のTargetとしてこのフラグが選ばれるので、旗が取れます。 (最有力候補にあがるだけなので、離れた瞬間味方が奪うと、別をターゲットとします。)
・3Count配列に色情報がない場合は真へ進み3Count配列に追加。Successをビヘイビアツリーに返す。 ・3Count配列に色情報がある場合は、来た色情報と今持っているの色情報を比較。 ・違う場合は配列を捨てます。Successをビヘイビアツリーに返す。 ・同じ場合は追加します。 ・追加した情報が2つ目の場合はSuccessをビヘイビアツリーに返す。 ・追加した情報が3つ目の場合はTargetから少し離れた位置に移動します。 (チームによって移動する位置をずらそうとしてました。) (今気が付いたのですが、チームカラーが2、つまり青チームのとき動かなかったのって、ここのPawnをつなぎ忘れてたからか) ・配列を空にして、failureを返します。
レベルBPの中身。 フラグを作成する際に、位置情報と色情報を追加しています。 追加された配列の位置が位置情報と色情報を結びつけます。 ごちゃごちゃしているのは、AppendとPrintStringを使って、自分がほしい形でデバッグ情報をだしているからです。
AIConrollerの中身。 TeamTag(BlueTeamかRedTeamの文字列情報)をキャラクターのカプセルコンポーネントのタグから送ってもらって、番号に置き換えています。 ブラックボードを使う宣言をして、ブラックボードのTeamTagに取得してきたTeamTagを、TeamColorにさっき置き換えた番号をいれます。 この後で、ビヘイビアツリーが起動してます。
Flagの中身。(パート4参考) パート4で作ったフラグの続きに作ってます。 Flag自身が自分の位置情報を使いゲームインスタンスの位置配列からインデックスと色配列を取得。 インデックスで色配列に変更を加えていきます。 新しい色情報で上書きできたらよかったのですが、見つからなかったので、新しい自分を追加して古い自分を削除するかたちをとりました。
ゲーム作りの合間に息抜きのゲーム作り パート7
ただいま製作中のゲーム! UnrealEngine4で『暁の航路』制作中(メインプログラマー:GAISUTO) Unityで『(タイトル未定)』制作中(メインプログラマー:ざわわ) UnrealEngine4で『大旗取合戦(仮タイトル)』(息抜き&学習用)
本職に影響がでないように製作するので結構スローペースになります。 原稿の合間に落書きを描いて、ゲーム作りの合間に息抜きでゲームを作って、仕事の合間はゲームをして息抜き。
——–本日!——– 『ゲーム作りの合間に息抜きのゲーム作り パート6』で作成したAIの振る舞いを変更せず、BPのみから、ビヘイビアツリー(以後、BT)とブラックボードを使う変更を行いました。
NPCBTTask_MoveはいろいろやってるうちにBTに用意されているMoveToを使うことになったので、破棄。
NPCキャラのBPのBeginPlayの後半を変更。 カプセルコンポーネントにいれているチームタグをNPC_AIControllerに送っているだけです。
NPC_AIControllerに送ったタグを変数にいれて、ブラックボードを使う宣言をして、ブラックボードにチームタグを書き込んで、ビヘイビアツリーを起動してます。 ブラックボードのチームタグはまだ使ってません。 今後どうするかは検討中。 NPC・NPC_AI・ブラックボードの3つにタグの変数をたらい回しにしてるのがあまり気持ちよくない。
ビヘイビアツリーが起動されたら、シーケンスの左から処理をしていきます。 FlagSearchで全フラグを調べて、向かうFlagを決める。行く先が決まったら、MoveToで向かう、決まらなかったらずっと調べ続けるという流れです。
NPCBTTask_Searchの中でTargetFlagBTにセットした値をブラックボードのTargetFlag(Flagクラス)にいれてます。
BlackBoardKeyにTargetFlagをいれてます。
NPCBTTask_Searchの中身。 AIからタグと本体を持ってきてます。 処理の中身は前回と同じです。
全部のFlagをみて、行く先が見つかったら、Success! 目的地に向かいます。 行く先が見つからなかったら、3秒まってfailure! 目的地を探し続けます。
~今後~ ブラックボードに、変数をインスタンス全域で同期させるチェックがあったからここにFlagクラス情報を持たせて、レベル上を毎回全部チェックしなくていいようにできないかな。 ここの変数に持たせたクラスが参照だったら、レベルBPで最初に全部突っ込んでおいて、あとはここを見続けるだけでいいんだ。 そうでなかったら、フラグが変更されるたびにブラックボードの値を書き換えにいく。 レベルBPやアクターからブラックボードの数値を書き換えにいけるのかなぁ
NPCユニティちゃんが自動で生成されて、チームタグを召喚地点によって変化するようにしたいな。
ゲーム作りの合間に息抜きのゲーム作り パート6
ただいま製作中のゲーム! UnrealEngine4で『暁の航路』制作中(メインプログラマー:GAISUTO) Unityで『(タイトル未定)』制作中(メインプログラマー:ざわわ) UnrealEngine4で『大旗取合戦(仮タイトル)』(息抜き&学習用)
本職に影響がでないように製作するので結構スローペースになります。 原稿の合間に落書きを描いて、ゲーム作りの合間に息抜きでゲームを作って、仕事の合間はゲームをして息抜き。
——–先日!——– ぷちコン制作、UE4勉強会、アンリアルフェスなどなど大忙しの日々を過ごしてました。 やっと落ち着いて開発できる。平日は3Dモデリングばっかりで、UE4ももっと触りたい。
さて、大旗取合戦の仲間や敵NPCのAIを作りはじめました。 今回作成したのはこちら、全体探索型近く狙い
NPCキャラのBP 頭の上のアイコンのマテリアルインスタンスを作って、キャラのCapseleComponentのタグの0番目に青チームか赤チームの文字をいれているのでチーム分け。 頭の上のアイコンの色がここで変化します。
チームの色情報をNPC_AIControllerに送る。
ここからNPCのAI チームの色を保持して、Flagクラスを全部取得して全部見ていく。 2回目に呼び出されたとき、TargetFlagを持ってると困るので、ここで初期化。 これで空っぽにしてくれてるみたいなんだけど、こういう使い方って大丈夫なのかな。
TargetFlagが空なのでIsNotValidから出てきます。
マクロの中で、Flagが自分のチーム以外のものだったらこのFlagをそのままTargetFlagにします。
TargetFlagを1つ確保している状態で、他のFlagを見ていきます。 自身から一番近いFlagをターゲットにするようにTargetFlagを置き換えていきます。 GetDistanceToの上側で自身と他のFlagの距離を、下側で自身と確保しているFlagの距離を取得して、小さい方(近い方)をObjectで取得。 Flagにキャストして、TargetFlagにします。
全部のフラグを見終えて、TargetFlagがあったらそこに向かう。 無かったら3秒まってもう1回調べます。
このAIの問題点 ・旗の中にいるときに他の旗に変化すると一旦旗の外にでてから触らないといけない。 自分がいる位置が他のチームの旗なので取ろうとして動かなくなる。
ゲーム作りの合間に息抜きのゲーム作り パート5
ただいま製作中のゲーム! UnrealEngine4で『暁の航路』制作中(メインプログラマー:GAISUTO) Unityで『(タイトル未定)』制作中(メインプログラマー:ざわわ) UnrealEngine4で『(タイトル未定)』(息抜き&学習用)
本職に影響がでないように製作するので結構スローペースになります。 原稿の合間に落書きを描いて、ゲーム作りの合間に息抜きでゲームを作って、仕事の合間はゲームをして息抜き。
——–本日!——– 息抜きでUnrealEngine4でゲームを制作です。本日は5時間半、累計制作時間29時間 長時間座りっぱなしで体が・・・カッチカチになってしまいそう。 そうだ、ラジオ体操をしよう。 一気に体がほぐれるので結構おすすめです!
作業 ・NPCユニティちゃんの追加。まだ動かない。 ・ユニティちゃんが攻撃できるようになった。まだ見た目だけ ・マップの拡張
○NPCユニティちゃんの追加。まだ動かない。 キャラクターBPを「PNPoawn_SD_unitychan」と名前をつけて作成。 TagにBlueTeamを付けて、マップに配置して、動かないけど青チームのユニティちゃんが出現! 敵の視野チェック参考:http://unrealengine.hatenablog.com/entry/2014/10/11/003032 NPCユニティちゃんからライントレースがでます。 緑のラインが貫通で赤のラインがぶつかったら途切れるみたいです。
[LineTraceByChannel]のOut Hitからライントレースに当たったアクターの情報をとってきて、[BreakHitResult]で情報の分解をして、タグを取得します。 いろいろ試行錯誤をして、次の形に落ち着きました。 試行錯誤・・・なんででしょう・・・[ActorHasTag]がユニティちゃんが持っている"Player"というタグに反応して、tlueという返事を返してくれません!!! -●-●-●-が通過しているルートです。 なんでぇ・・・
○ユニティちゃんが攻撃できるようになった。まだ見た目だけ 攻撃参考(下記のURLのスレッドの13-20を参考) http://unrealengine.hatenablog.com/entry/2015/07/05/180000 自分の周りに広がるエフェクト(ShotWeapon2)のあと、とんでいく(ShotWeapon)の2つのエフェクトを組み合わせました。
あ、左クリックじゃなくて、Xキーで発動するようになってます。
モーションはこんな感じに、ちょっとジャンプして片手を上げる感じになります。(次回)
今後のモーションも含めて、ATKフォルダを作ってまとめておきました。
階段の先のフロアに上段と下段が出現! 下段から向こう側の下段を橋みたいなので繋いでみましたハラハラゾーンです! ここで接敵すると怖いですねぇ恐ろしいですねぇ暴れるのが楽しそうです。
<次回> ・NPCユニティちゃん、決められたルートを走る! ・ユニティちゃん、攻撃時のモーションが付く! 天に右手を掲げ、落ちる稲妻! ・マップの拡張! 上段と下段どっちを通るのがいいの?