TheLongDarkプレイ動画配信+進捗のお知らせ
こんにちは、ぽうひろです。
先日からロングダークのプレイスクショをあげていましたが、やはり伝わりにくいなぁ・・・ということで、、、、、
生中継はできなくとも、プレイ動画を撮ってナレーションをつけ、YouTubeにアップするスタイルにチャレンジしていこうと思います!!
というわけで、最初からスタートしたロングダークプレイをこちらの「ぽうチャンネル」でお楽しみいただけます!
youtu.be
チャンネル登録していただければ、更新通知が届きますので、是非是非登録をお願いします〜!
1日目は湖エリアに放り込まれます。服も足りない、マイナス13度の世界です((((;゚Д゚))))サムー
自分の居場所を確認し、拠点のキャンプオフィスへ向かう動画になっております。
ぜひ、おヒマな時にでもお楽しみを(*´∀`)
-
-
-
-
-
-
-
-
-
-
-
-
-
- -
-
-
-
-
-
-
-
-
-
-
-
-
さて、ここからは開発状況のお知らせです。
アーバンナックル・Sの開発状況ですが、ほぼゲーム要素は出揃いました。
細かい部分を仕上げていく感じなのですが、なかなかプレイ実況に忙しくて進捗が思わしくありません。
自分の尻を叩くためにもリリース日を2/17(金)と表明したいと思います!!
最近、杏z(@AnzNetJp)さんが個人開発者同士のリリースがかぶらないようにということで、とっても素敵なカレンダーを用意してくれました!!
https://anzfactory.github.io/#!/developer/calendar
ん?
。。。
さて、そういうことで、頑張ってリリースできるように詰めていきますよ!!
それではまた!!!
The Long Dark日誌 3日目
みなさん、こんにちは。ぽうひろです。
The Long Dark日誌 3日目です。
昨日はガマを大量にゲットし、変なマスクを手に入れました。
準備も整ったので、再び湖に出かけます!
湖の周りに点在する小屋を物色しに行きます!
キャンプオフィスを出て右へ行けばすぐ湖です。天気がよろしい^^
見た感じ、オオカミさんはいないようです!!よかった!
小屋が見えてきました!
あれ、あの遠くに見える点はオオカミさんじゃありませんか、もしかして・・!!
ウーウー唸ってる!!発見された!
フレアで追っ払うぞ!!(ドキドキ
なんとかやり過ごしましたが、気付いたら周辺に3匹くらいオオカミがいます。。。ちょっと左側から遠回りしていこう・・・・すでにお家に帰りたい;;
ん?
あの遠目に見えるのは。。。。
クマさんだ〜〜!!!🐻
調べたところによると、クマさんはフレアで撃退できないらしいので、ここは通れません。。。。。無念ですが、別ルートで引き返すことにしましょう。。。
ちょっと凍傷にかかりそうになったので、屋外で初焚き火です。
と、ここで思わぬ事件が!!!
マキを足そうと思ったら、なんと焚き火に突っ込んでしまい、まさかの大やけど!!!(左下ステータス
あああ、もう瀕死です・・・・帰るしかない・・・・!!
ギリギリ残りHP14%でお家に到着!!
包帯と薬で火傷を治療します。。。。踏んだり蹴ったりだ。。。。;;
とまぁ、今日はオオカミの大群、クマ、さらには焚き火による火傷(自業自得)で、災難な日でした。。。。 けれど、まだ生きてる・・・!!
オオカミ追っ払ったし、クマの姿も見たので良い経験になりました!
また明日、湖にチャレンジしたいと思います!
それではまた!!! ウワァァ-----。゚(゚´Д`゚)゚。-----ン!!!!
The Long Dark日誌 2日目
みなさん、こんにちは。ぽうひろです。
The Long Dark日誌 2日目です。
昨日は拠点のキャンプオフィスにたどり着きました。
今日は湖を探索しようと思います。
夜明けとともに起きて外に出ましたが、朝は超寒い!
気温が上がるまで、本でも読みます。
釣りの本などもあり、暇な時読んでスキルを上げておくとサバイバルが楽になります。
さて、3時間経ったので出掛けます!
手に持っているのはフレア(発火筒)です。
まだ武器がないので、襲われたらフレアで追い払うのです!(未経験)
小屋を出て右側の湖へ出発!!
湖の周辺には「ガマ」という植物が生えています。
この茎は「調理なし」で食べられ、穂は火を起こす時の「火口」になります。とっても貴重なアイテムです。ゲットしまくります。
湖の釣り小屋が点在しています。アイテムあるかな〜
手斧ゲット!これでいろいろ壊せます。ナイス!
さらに、変なマスクゲット!
犯罪者に見えるけど、暖かいそうです。人はいないのでかまってられません。
お、第一村人ならぬ第一鹿を発見!
しかし弓矢も銃もないので、指をくわえて見ているしかありません。。。いつか対決せねば・・・
時間がなかったので小屋を回れませんでしたが、燃料いっぱい集めてきました!
途中、空腹の音がオオカミかと思って紛らわしい、、(^_^;)
今日は湖に狼はいませんでした。よかったよかった・・・
フレア使う練習しとかなきゃ・・・・
明日はまた湖に行って、釣り小屋以外の建物を探索します!!
最後に、今の格好はこんな感じですw
これはなかなかの犯罪者w
それではまた!!
The Long Dark日誌 1日目
みなさん、こんにちは。ぽうひろです。
いまsteamのゲームではまってる「The Long Dark」のプレイ日誌をつけていきたいと思います。
本来なら実況をしたいところなんですが、やっているのがmacbookproなのと、やる時間も場所も限られているので、スクショベースでやっていきたいと思います(^_^;)
これをみてやってみよう!と思ってくれる方が出ていたたければうれしいです\(^o^)/
ロングダークはsteamでα版公開中です。どんどんアプデされると思うので、今のうちに練習しましょう!w
では始めていきたいと思います。
燦然と輝く「Made With Unity」!!
ゲームモードはノーマルにあたる「運び屋」です。
このモードはオオカミとか熊が襲ってくるので怖いんですクマ、、、!!
場所はイージーモードで少し練習した湖近辺にしますよ!
ではゲームスタート!
そうです。どれくらい生き延びることができるか。。。これがこのゲームの目的です。
なんか妙なところにスポーンしました。どこだここは、、、
イージーモードで少し土地勘はありますが、いきなり放り込まれるとわかりませんね、、、
あ、丸太がいっぱいある。
伐採小屋のあたりのようです、、、!!
トレーラーがありました。
服とかをゲットしていきます。寒くて死にそうだよ、、、
まだまだ装備が足りません・・・・
風防付きランプをゲット!暗闇ではこれがないときついです。
凍傷にかかっています。(左下)HP%がゼロになる前に拠点を見つけねば、、!!
途中で脱線した列車を見つけました。
めぼしいものはなさそうです、、、
何とかいつもの拠点にしているキャンプオフィスに到着しました、、!!よかった、、、
物資がそこそこあります。
水がないので、ストーブに火をつけ、雪を溶かし、さらに煮沸して飲料水を多めに作っておきます。
多めに作ったら、棚においておきましょう。
今日のサバイバルはここまでです、、!!
凍傷にかかっているので、本でも読んで時間を潰し、今日は寝てから、明日湖の方を探索したいと思います!
それではまた!
FirebaseをUnityで使ってランキング機能を作ろう![実装編]
みなさん、こんにちは。ぽうひろです。
前回はFirebaseをUnityで使うための準備について説明しました。
sleepnel.hatenablog.com
今回は、簡単に実装方法を説明していきます。
前回、firebase側でアプリの設定を行いましたので、以下のconsole画面からデータベースなどを見ることができます。
https://console.firebase.google.com/
コンソールから作ったプロジェクトを選びます。
左側のメニューにDatabaseがあるので選ぶと、データベースが見れます。
firebaseのDBはこのようにjsonツリーになっていまして、consoleでGUIでデータを編集することができます。
さて、まずUnityで使う前の準備が少し残っています。
FirebaseのRealtimeDatabaseには認証機能がありまして、基本はそれを使ってDB使用して良いかを判定します。これは別途SNS認証を使うとか、メール認証アドレスにするのかとか選択肢がありますので、またの機会にやろうと思います。
今回は開発モードとして、読み書き権限をOKにしちゃう設定にします。
firebase consoleのルールのタブにjson形式で設定を書きます。
以下のように rulesの.readと.writeをtrueにして「公開」ボタンを押せばOKです!
あと、データベースのアドレスはここに書いてあるアドレスになります。
Unity側のコードで必要になります。
ただしこの状態だと注意が必要です。
この状態だと、DB URLが他の人に知られてしまうと、好きなだけ読み書きできてしまうので開発中だけの設定と考えておいてくださいね!(僕ももうwrite権限offしてありますよ(*´∀`))
はい、今度こそ準備完了です。
それでは実装コードの方を説明します。
まずはデータ検索(参照)の方から説明します。
ドキュメントはこちらが参考になります。
Retrieving Data | Firebase
データ検索(参照)のやり方
using Firebase; using Firebase.Database; using Firebase.Unity.Editor; public class Ranking : MonoBehaviour { //別メソッドのDB操作のためにprivateフィールドにとっておく private DatabaseReference timeRankDb; // Use this for initialization void Start () { //データベースURLを設定 FirebaseApp.DefaultInstance.SetEditorDatabaseUrl("consoleに出てたDBのURL"); // テーブル名的なノード名を指定して、DB参照をprivateフィールドにとっておく timeRankDb = FirebaseDatabase.DefaultInstance.GetReference("timeRanks"); } }
ざっくりポイントは、
using Firebase;
using Firebase.Database;
using Firebase.Unity.Editor;
と、データベースURLを指定してノード名(テーブル名的な)指定でDB参照を取る ところですかね。
UnityだとStartメソッドで1度実行しておくと良いと思います。
FirebaseのDBはjsonツリー状の構成となっています。
今回、ボスNoごとのクリアタイムランキングを実装したいと思いますので、構成は以下のように考えています。
root ∟ timeRanks ∟ ボスNo(1〜15個くらい) ∟ 記録ID (ボスIDごとに10個まで(10位まで表示したい)) ∟ ユーザ名(name) ∟ タイム(time)
実際はこんな感じになってます。何となくわかるでしょうか?
さて、まずはデータの取得をやってみたいと思います。
先ほどStart()で取得しておいたDB参照を利用してデータ参照します。
//bossNoのノードからtimeで昇順ソートして最大10件を取る(非同期) timeRankDb.Child(boss.bossNo.ToString()).OrderByChild("time").LimitToFirst(10).GetValueAsync().ContinueWith(task =>{ if(task.IsFaulted){ //取得失敗 //Handle the Error }else if(task.IsCompleted){ //取得成功 DataSnapshot snapshot = task.Result; //結果取得 IEnumerator<DataSnapshot> en = snapshot.Children.GetEnumerator(); //結果リストをenumeratorで処理 int rank = 0; while(en.MoveNext()){ //1件ずつ処理 DataSnapshot data = en.Current; //データ取る string name = (string)data.Child("name").GetValue(true); //名前取る string time = (string)data.Child("time").GetValue(true); //時間を取る //順位のuGUIに値を設定 GameObject rankItem = rankList.transform.GetChild(rank).gameObject; TimeRank timeRank = rankItem.GetComponent<TimeRank>(); timeRank.SetText(rank+1, name, getTimeStr(time)); //順位1位から rank++; } } });
コメントにも色々書いていますが、ポイントとしては
- データ検索はDatabaseReferenceを使って.Child("ノード名")、ソートしたかったら.OrderByChild("ソートキーに使う項目名")、取得件数絞りたければ.LimitToFirst(件数) をつなげていき、最後に.GetValueAsync().ContinueWith(task =>{ です。
- 検索結果は非同期でtaskに返ってきます(コールバック)ので、task.IsCompletedの時、データの処理を行います。task.IsFaultedの時は通信エラーなどが想定されますので、エラーメッセージを出すみたいなハンドリングをしてもいいですね(*´∀`)
- 検索結果はDataSnapshot snapshot = task.Result; で取れます。複数データの場合はsnapshot.Childrenに複数データが入りますので、GetEnumeratorで繰り返し処理するといいでしょう。
- 1件のデータはDataSnapshotのChild("項目名").GetValueで取れます。object型になっているので(string)でキャストすると良いでしょう。(データ投入の際、floatとかで登録したかったのですが、どうもエラーが出る模様・・・続報あったら追記します)
結果、このような感じになりました(*´∀`)
ちゃんと時間が早い順に取れてますね!
さて、次はデータ登録の実装を説明したいと思います。
ドキュメントはこちらが参考になります。
Save Data | Firebase
データ登録(insert&update)のやり方
//まずbossNoのノードにレコードを登録(Push)して、生成されたキーを取得(これを1件のノード名に使う) string key = timeRankDb.Child(bossId.ToString()).Push().Key; //登録する1件データをDictionaryで定義(nameとtime) Dictionary<string, object> itemMap = new Dictionary<string, object>(); itemMap.Add("name", name); itemMap.Add("time", time); //1件データをさらにDictionaryに入れる。キーはノード(bossNo/さっき生成したキー) Dictionary<string, object> map = new Dictionary<string, object>(); map.Add(bossId.ToString()+ "/" +key , itemMap); //データ更新! timeRankDb.UpdateChildrenAsync(map);
ここでのポイントは
- データの登録はDbReference.Child("ノード名").Push()でやる。生成されたデータを表す一意キーを使うために.Keyでキーをとっておくと良い。
- データの更新はDbReference.UpdateChildrenAsync(ノードがキーで値が更新したいデータのDictionary); で行う。
実際はこんな感じで登録されます!イメージ湧くでしょうか。
この暗号みたいなのが生成されたキーで、データのパスは 1/-KbIyIe621y8MZ9ySB5S ということになります。
駆け足で説明しましたが、いかがでしたでしょうか。
私もまだあまり使いこなしているわけではないし、まだSDKもベータ版なので今後やり方など変わるかもしれませんが、何となく簡単に利用できることがお分かりいただけたんじゃないかと思います。
また何か情報があったら、書きたいと思います(*´∀`)
それではまた!!
FirebaseをUnityで使ってランキング機能を作ろう![導入編]
みなさん、こんばんは。ぽうひろです。
ただいまアーバンナックル・Sの絶賛開発中なのですが、
sleepnel.hatenablog.com
ランキング機能が欲しいなと思いまして、天下のGoogleさんのmBaas Firebaseを導入してみることにしました!
※実装編も書きました!
sleepnel.hatenablog.com
早速このアドレスからFirebaseを始めましょう!
https://firebase.google.com/?hl=ja
新規プロジェクトを作成ボタンを押します。
Unityなんだけど、、、、メニューにないので、とりあえずAndroidを持っているのでAndroidアプリにFirebaseを追加を選びます。
プロジェクト名と国を選びます。難しくないですね。
パッケージ名とアプリのニックネームを入力します。パッケージ名はUnityのBuild Settingにも設定するBundle Identifierのことですね。
すると、google-services.jsonなるファイルが勝手にダウンロードされます。これは後で使います。
AndroidStudioのgradleの説明が出てきますが、Unityでは気にしなくて大丈夫です。
はい、これで設定は完了です。簡単ですね!!
では、ここからはUnity側の作業です。Unityは5.5.0を使っています。
FirebaseのUnitySDKはBeta版のようで、日本語ドキュメントがありません。
英語版のドキュメントはここになります。
https://firebase.google.com/docs/unity/setup
このGet startedの中にUnity用packageが入ったSDKをダウンロードできるボタンがあるので、ダウンロードしましょう。
中にはいろんなpackageが入っていますが、RealtimeDatabaseだけ使いたいなら、
FirebaseAuth.unitypackage(認証に使う)
FirebaseDatabase.unitypackage(DBをいじるSDK)
があれば良さそうです。
UnityのAssets > Import Package > Custom Package
で上記の2つのunitypackageをUnityプロジェクトにインポートしましょう。
その後、先ほどダウンロードしたgoogle-services.jsonをAssetsに入れておきます。場所はどこでもいいらしいですが、わかりやすいように先ほどのunitypackageをインポートした結果作成されたAssets/Firebase以下に放り込んでおきます。
さて、ここら辺で一度Unityを再起動しておくことをお勧めします。
(もしかしたらConsoleにビルドエラーが出ているかもしれません)
google-services.jsonがAndroidSDKと連携して、必要なライブラリをgradleを使ってダウンロードしてくれるみたいです。
導入はこれくらいです。特に難しいことはなく、簡単ですね!!
次回は、実際にRealtimeDatabaseに接続して、データ参照・登録などを説明したいとおもいます!
それではまた!!
タスク管理Trelloの一括タスク作成機能を発見!
みなさん、こんにちは。ぽうひろです。
いつもタスク管理に使っているTrelloですが、このほど、一括タスク作成機能を(偶然)発見したのでご紹介します。
Trelloについてはこちらも御覧ください(*´∀`)
sleepnel.hatenablog.com
まずはタスクを箇条書きにして、普通にタスク作成欄に記入します。
(改行されていれば良いみたいです。)
追加ボタンを押すと、ダイアログが出て「カードをn枚作成する」か「1つで作成するか」の選択肢が出てきます!
これで、n枚の方を選べば・・・・
はい、タスクが別々に登録されました!!これは便利!!
週初めにこのように、今週のタスクを出しておくと時短にもなっていいですね!!
それでは、良い開発ライフを!!