リモートの最新を開発ブランチにも取り込む

リモートの最新を開発ブランチにも取り込む

複数人で開発している場合、他の人が行ったコミットを自分の開発ブランチにも取り込みたい。

master ブランチを例に書きますが、どのブランチでも同じ。

1) ローカルのmasterブランチにリモートのoriginにコミットされた最新を取り込む
2) 開発ブランチにmasterブランチをマージする

git checkout master
git pull origin master
git checkout dev
git merge origin master

ローカルの master ブランチに移動(checkout)して、
pull(fetch->merge) でリモートのmasterブランチに最新情報を取得(fetch)し、ローカルのmasterにマージする

その後、ローカルの開発ブランチにに移動して、
masterブランチと開発ブランチをマージする

【Aseprite】Layerごとにファイル出力したい

f:id:snoopopo:20190213124515p:plain

▲開発中のゲームだよ^^


今回やりたいのは、Layerごとにファイル出力したいってことよ

今回は、Asepriteで「レイヤーを部品ごとに分けたんでレイヤーごとに出力したいんだけど!」っていう記事です。

例えば、メニュー画面などで、
メニュー画面自体を描画するための背景画像と、
そのうえにのる実際のメニュー画面の要素(ボタン等)は、別々の画像にするかと思います。

うえにのる実際の要素はアニメしたり、表示・非表示が切り替わったりいろいろ変わるので一つの画像では表現できないためです。

というわけで、今回はAsepriteのLayerを部品単位に分けて開発してます。

こんなかんじ↓

f:id:snoopopo:20190213124246p:plain

これを、一度にレイヤーごとに出力する方法を今回書きます。

guiからはひとつずつしか出力できないっぽい

File -> Export File

f:id:snoopopo:20190213130927p:plain

Layers から 対象のレイヤーだけ出力はできます。

が、今回はいっきに全部のレイヤーをバラバラのファイルに出力してほしいのです。

※バージョン v1.2.8

結論:コマンドならできる

というわけでコマンドからは行けます。

$ ./Aseprite.exe -b --split-layers [asepriteファイル名] --save-as [出力ファイル名]

例)

$ ./Aseprite.exe -b --split-layers ~/Desktop/menu.aseprite --save-as ~/Desktop/menu.png

https://www.aseprite.org/docs/cli/#export-all-layers-into-different-png/gif-files

▼実行するとこんな風にレイヤーごとに出力されたよ。

f:id:snoopopo:20190213131712p:plain

ファイル名は自動で決まりました ⇒ 追記:指定できるー!「ファイル名をレイヤー名にする」見て

追記①:不要な透明部分も除去できる

レイヤーごとにファイルを出力した場合、画像の大きさはすべてキャンバスのサイズになっていて、 不要な透明部分含めて出力されてしまう…

f:id:snoopopo:20190214121000p:plain

▲ こんな感じに、透明部分を含んだ大きい画像になってしまう。

そこで、--trim オプションを指定すると!不要な透明部分の除去もできた!素晴らしい!

$ ./Aseprite.exe -b --split-layers [asepriteファイル名] --trim --save-as [出力ファイル名]

例)

$ ./Aseprite.exe -b --split-layers ~/Desktop/menu.aseprite --trim --save-as ~/Desktop/menu.png

https://www.aseprite.org/docs/cli/#trim

f:id:snoopopo:20190214120742p:plain

▲ 透明部分を除去した画像が生成されました!

追記②:ファイル名をレイヤー名にする

それぞれのファイルをレイヤー名で指定することもできた!

上述しているとおり、 ファイル名を指定しない場合は [画像名] ([レイヤー名]).png というフォーマットで出力される。

これを、レイヤー名だけにしたい。って場合は、ファイル名の指定に {layer} とつけるとできました!

例)

$ ./Aseprite.exe -b --split-layers ~/Desktop/menu.aseprite --trim --save-as ~/Desktop/{layer}.png

https://www.aseprite.org/docs/cli/#filename-format

f:id:snoopopo:20190214122610p:plain

【作業記録】20190105~ unityで爆弾人つくる!!

「ゲームプログラマになる前に覚えておきたい技術」(通称:ひらしょー本)

の「爆弾人」を
unityで作ってる作業きろく!!!


20190111(作業時間:3.5h(9:40-13:10) + 1h(14:00-15:00))

起きたのがバリおそかったけど、今日もすぐやる。

アニメーションとかなしでとりあえず最低限必要なものはいれおえた?か?

爆弾を爆発できるようにした。爆発で、レンガ、敵、プレイヤーも死ぬようにした。

f:id:snoopopo:20190111150331g:plain


次回やること

爆弾の爆風をとりあえず時間経過とかなしで表示する。

残っててあとでちゃんと調べたいこと

Debug.Log()もリリース版には含まない方がいいようなので、 Debug#isDebugBuildの判定をいれたunilityクラスを作っておきたいが、どう実装するか。単純にutilityクラスつくればいいだけと思ったけどコンソールからのリンクがすべてutilityクラスに飛んでしまってデバッグログ出すの意味が微妙になりそうかも。

・pushするときに毎回パスワード聞かれてうざい。httpでやってるからっぽいけど、すぐわからなかったのでタスクに。


20190109 昼(作業時間:1.25h(11:40-12:55))

敵の配置と敵の移動。あたり判定もいれた。

f:id:snoopopo:20190109125845g:plain


次回やること

爆弾を設置できるようにする。爆弾が爆発するようにする。

残っててあとでちゃんと調べたいこと

Debug.Log()もリリース版には含まない方がいいようなので、 Debug#isDebugBuildの判定をいれたunilityクラスを作っておきたいが、どう実装するか。単純にutilityクラスつくればいいだけと思ったけどコンソールからのリンクがすべてutilityクラスに飛んでしまってデバッグログ出すの意味が微妙になりそうかも。

・pushするときに毎回パスワード聞かれてうざい。httpでやってるからっぽいけど、すぐわからなかったのでタスクに。


20190110(作業時間:2.75h(7:30-10:15))

今日も朝から作業です。

「作る」は楽しめるけど「学ぶ」は苦手なので、今の作業は「作る」をしてる感覚でできる作業なので楽しいです^^

爆弾をおけるようになった

f:id:snoopopo:20190110101941g:plain


次回やること

爆弾の爆風をとりあえず時間経過とかなしで表示する。

残っててあとでちゃんと調べたいこと

Debug.Log()もリリース版には含まない方がいいようなので、 Debug#isDebugBuildの判定をいれたunilityクラスを作っておきたいが、どう実装するか。単純にutilityクラスつくればいいだけと思ったけどコンソールからのリンクがすべてutilityクラスに飛んでしまってデバッグログ出すの意味が微妙になりそうかも。

・pushするときに毎回パスワード聞かれてうざい。httpでやってるからっぽいけど、すぐわからなかったのでタスクに。


20190109 昼(作業時間:1.25h(11:40-12:55))

敵の配置と敵の移動。あたり判定もいれた。

f:id:snoopopo:20190109125845g:plain


次回やること

爆弾を設置できるようにする。爆弾が爆発するようにする。

残っててあとでちゃんと調べたいこと

Debug.Log()もリリース版には含まない方がいいようなので、 Debug#isDebugBuildの判定をいれたunilityクラスを作っておきたいが、どう実装するか。単純にutilityクラスつくればいいだけと思ったけどコンソールからのリンクがすべてutilityクラスに飛んでしまってデバッグログ出すの意味が微妙になりそうかも。

・pushするときに毎回パスワード聞かれてうざい。httpでやってるからっぽいけど、すぐわからなかったのでタスクに。


20190109(作業時間:1.75h(8:15-10:00))

今日も朝おきて一番に作業開始だ~.

衝突応答(8.2章)

プレイヤーが壁にぶつかったときに移動しないようにした。

以前使ったことがある、Physics2D#Linecast()を使って、 移動するまえに移動予定の位置にコライダーを設定したオブジェクトがあるかどうかを調べて、 あるなら移動しない。ないなら移動する。という具合に。

int dx = 0;
        int dy = 0;

        Vector2 tPos = new Vector2(0, 0);

        if (Input.GetKey(KeyCode.UpArrow))
        {
            dy = 1;
            tPos = new Vector2(0, this.collider.size.y / 2);
        }
        else if (Input.GetKey(KeyCode.DownArrow))
        {
            dy = -1;
            tPos = new Vector2(0, -this.collider.size.y / 2);
        }
        else if (Input.GetKey(KeyCode.RightArrow))
        {
            dx = 1;
            tPos = new Vector2(this.collider.size.x / 2, 0);
        }
        else if (Input.GetKey(KeyCode.LeftArrow))
        {
            dx = -1;
            tPos = new Vector2(-this.collider.size.x / 2, 0);
        }

        dy *= PLAYER_SPEED;
        dx *= PLAYER_SPEED;

        if (!(dx == 0 && dy == 0))
        { //移動しようとしている

            //移動できるか判定
            this.collider.enabled = false;
            Vector2 targetPos = this.rigidbody.position + new Vector2(dx, dy);
            RaycastHit2D hit = Physics2D.Linecast(this.rigidbody.position + tPos, targetPos + tPos);
            this.collider.enabled = true;

            if (hit.transform == null)
            {
                //移動可能なので移動する
                //this.transform.localPosition += new Vector3(dx, dy);
                //this.rigidbody.position = this.transform.localPosition + new Vector3(dx, dy);
                this.rigidbody.MovePosition(targetPos);
            }
        }

ミソなのは、移動できるかの判定処理で、

RaycastHit2D hit = Physics2D.Linecast(this.rigidbody.position + tPos, targetPos + tPos);

+ tPos ってしているところがあるんだけど、 これをしないと、画像の原点が中心になっていて、画像の中心で判定してしまうことになり、うまくいかなった。

f:id:snoopopo:20190109095851g:plain

▲こんなかんじで、プレイヤー画像の中心まで壁にめりこんじゃった。。

なので、移動方向によって画像の中の判定したい位置をもとめるようにしたってこと。

f:id:snoopopo:20190109100006g:plain

▲改善できた版!


次回やること

次回は敵の配置やって敵も動くようにします。本的には、p226~

敵とプレイヤーの当たり判定処理がむずいかも。

残っててあとでちゃんと調べたいこと

Debug.Log()もリリース版には含まない方がいいようなので、 Debug#isDebugBuildの判定をいれたunilityクラスを作っておきたいが、どう実装するか。単純にutilityクラスつくればいいだけと思ったけどコンソールからのリンクがすべてutilityクラスに飛んでしまってデバッグログ出すの意味が微妙になりそうかも。

・pushするときに毎回パスワード聞かれてうざい。httpでやってるからっぽいけど、すぐわからなかったのでタスクに。


20190108(作業時間:1.25h(8:30-9:45) + 0.5h(16:00-16:30))

今日も朝おきて一番に作業開始.

動くオブジェクトを配置する(7.5章)

プレイヤーの配置(表示だけ)は昨日時点で終わっていたけど、

インスペクターでTransform#Positionを1動かすだけで、1マス分がっつり移動してしまう状態だった。

今日は1マスをTransform#Positionの100にするようにして、ちょっとずつ移動できるように、カメラサイズ等調整。 Transform#Positionでfloatの値でやってもよかったけど、整数の方がわかりやすいので。

これで、

1マス座標=ローカル座標(`Transform#Position`)の100

という風になった。

見た目上の変化はないが、ちょっとずつマス単位でなくちょっとずつプレイヤーを動かすことができそうな目途がたった。


次回やること

敵の配置

残っててあとでちゃんと調べたいこと

Debug.Log()もリリース版には含まない方がいいようなので、 Debug#isDebugBuildの判定をいれたunilityクラスを作っておきたいが、どう実装するか。単純にutilityクラスつくればいいだけと思ったけどコンソールからのリンクがすべてutilityクラスに飛んでしまってデバッグログ出すの意味が微妙になりそうかも。

・pushするときに毎回パスワード聞かれてうざい。httpでやってるからっぽいけど、すぐわからなかったのでタスクに。


20190107(作業時間 1.75h + 1h)

昨日は1hやってそのあともう1hはやりたかったけど、見事にねてた。

やっぱり朝イチでやらないと時間が確保できないな。

今日も昨日の続きから。p198あたり。

とりあえず背景だけ出してみる(7.4章)昨日の続き。

床、壁、レンガ(レンガ率はまだ固定)を描画した。

とりあえず、解像度対応とかすべてなし。画面サイズ固定で作る。

f:id:snoopopo:20190107081339p:plain

ひらしょー本だと、床、壁、レンガというフラグを作って、フラグを元に描画するかんじ。

それに対して、unity公式ローグライクは、床、壁、レンガ、という単純なプレハブを作ってそれを配置している感じ。

ひとまずは後者で実装するが、プレハブ作るまでもないならひとつのクラスにまとめて、前者に変更するかも。


プレイヤーとアイテム(壁の中にあるので見えないけど)も表示した。

f:id:snoopopo:20190107145441p:plain


次回やること

プレイヤーをマス単位じゃなく、ドット単位に動かせるようにする。p212~。

残っててあとでちゃんと調べたいこと

Debug.Log()もリリース版には含まない方がいいようなので、 Debug#isDebugBuildの判定をいれたunilityクラスを作っておきたいが、どう実装するか。単純にutilityクラスつくればいいだけと思ったけどコンソールからのリンクがすべてutilityクラスに飛んでしまってデバッグログ出すの意味が微妙になりそうかも。

20190106(作業時間 1h)

今日は、「ゲームプログラマになる前に覚えておきたい技術」の7章 の途中 p198~

なんだけど、完成版のゲームをまだ起動できる状態になってなかったので、その環境作りから。

完成版C++プロジェクトで起動

完成版のプロジェクト(C++で作られているもの)を動かせる状態にしておく。

古いバージョンしか対応していないので、自分の環境に入ってるVSで動かせるようにする。

いつも使ってる VS Com 2017 で動かしたいので、cmake でビルドをしなおす。

http://blog.techlab-xe.net/game-programmer-book-new-build

↑を見ればソッコーわかる!ありがたや~

cmake初めて使ったのでよくわからないけど、コンパイラのバージョン依存を解決してくれる?みたいなものっぽいととりあえず認識。

よくわかってないけど深堀しようとしすぎると、本当に進めないといけないところが進まなくなるのでとりあえずスルー。

とりあえず背景だけ出してみる(7.4)

そこで、、とりあえず手を出せるものから手を出すことにしよう。不確定な要素がたくさんあ るほど思考が迷いやすくなるし、見落としも起こりやすくなる。だから、すぐできることや、 どうせ必要になるとわかっている部分はさっさと片付けてしまおう。そうすれば不確定要素 が減り、同時に考えねばならないことも減ってくる。(p199)

タイトル、ゲームオーバー、ゲーム、エンディング はSceneにする。 準備、ポーズ、クリア、失敗、勝敗表示はゲームSceneの中で描画する。Canvasにするかもしんないけど保留。。


20190105(作業時間 1.5h)

今日は、「ゲームプログラマになる前に覚えておきたい技術」の7章最初~

文字の描画

TextMeshProのTextMeshProUGUI#SetText()を使う。

乱数

Randam#Range() を使う。

Random.Range(1, 100);

1~100まで ↑の例だと1~99の乱数を生成してくれる。引数の1も100も含まれるので注意。

https://docs.unity3d.com/ja/2018.3/ScriptReference/Random.Range.html

デバッグ用の機能について

デバッグ用の機能は、リリース時には含めたくないので、 BuildSettingsDevelopment Buildにチェックが入っているときのみ含めるようにしたいので、 Debug#isDebugBuild を使う。

unityエディタ上で起動した場合もDebug#isDebugBuildはtrueを返す。

ステージ数や何回死んだらゲームオーバーになるかは好き好きでいいが、テストをすることを考えると2以上にはしたい。プログラミングには0、1、たくさんという三つの数があって、2は「たくさん」の中の最小値だからである。1と2は根本的に違うものなので、1でしか出ないバグや2以上でしか出ないバグというのは頻繁に発生しうるが、2で動くならだいたいは3でも動くものだ。 (p216から引用)

シーケンス

タイトル、ゲームオーバー、ゲーム、エンディング はSceneにする。 準備、ポーズ、プレイ(ゲーム画面)、クリア、失敗、勝敗表示はゲームSceneの中で描画を分ける。

その他メモ

Debug.Log()もリリース版には含まない方がいいようなので、 Debug#isDebugBuildの判定をいれたunilityクラスを作っておきたいが、どう実装するか。単純にutilityクラスつくればいいだけと思ったけどコンソールからのリンクがすべてutilityクラスに飛んでしまってデバッグログ出すの意味が微妙になりそうかも。

・開始して1.5hで疲れたので今日はこれでおしまい

サボってたけど9/3(月)から再開します!!→すいませんしばらく休みます。

ローグライク記事、
サボってしまってた!けど9/3(月)から再開します!!
www.snoopopo.com

2018/09/12追記:
やるやる詐欺になってしまってるのが嫌なので遅くなりましたがご連絡します。
すいません(><)、諸事情でしばらくお休みます。
見てくれている方、申し訳ありませんm(_ _ ;)m