satofumi のすべての投稿

承認欲求を満たしながら開発するために

ソフトウェア開発のプロジェクトを進める上で、仕様やコードのレビューを行い、不明な点を相談して決めたりする。 そうやって、曖昧だったタスクを明確な個別タスクに落としこんでいくと最終的には個人でやるタスクになる。  個別タスクを達成したときに、

「できたー!」
「できたか! よし、宴じゃ! 宴の準備じゃ!」

ってなる職場なら承認欲求も満たされ、気分を切り替えて次の個別タスクの開発に取り組めるかもしれないが、実際は違う。 現実の開発では個別タスクを達成しても、集中している周囲の人間の邪魔にならないように軽く休憩したりするくらいだろう。

ソフトウェア開発は、コーディングの段階になると集中して開発する必要があるため、孤独で静かな作業になる。 集中した時間それ自体は、達成感と心地よい疲労感を得られる。 ただ、本来は課題を達成した直後に「やったね」「おめでとう」「やればできると思っていたよ」などの賛辞があるべきだ。 現代人は、もっと承認欲求を満たされなければならないと思う。

そして、現代人の承認欲求を満たすために開発されたのが「クエリちゃんのタスク管理」だ。

query_first_message

解説しよう。 これは、普通のタスク管理システムに見えるかもしれないけど、登録したタスクを完了するとクエリちゃんが褒めてくれる凄いシステムだ!

開発を終えてタスクを終了のボタンを押す、その緊張が弛緩するタイミングで「やったのデス!」とか「すごいのデス!」と褒められると、

「あぁ〜〜、これが承認欲求が満たされるというやつか〜」

ってなる。 このシステムを使ってると、自分の承認欲求が満たされるのは当然として、他人を褒めることの大切さも理解できます。  つまり、自他共栄の雰囲気を自然に広めることができるのです!

まぁ、冗談はここまでにして言いたかったことをまとめると

  • 褒められるのは、いいぞ!
  • もっと他人を褒めよう。
  • クエリちゃん、ありがとう。

ってなる。
これからも、少しずつでもいいから自分の環境を改善していきます。

クエリちゃんのタスク管理
http://hyakuren-soft.sakura.ne.jp/query_manager/

「Among the Sleep」をプレイしてみた

今回はホラーゲームの「Among the Sleep」です。
日本語化 Mod を導入してプレイしました。

どんなゲームなの?

赤ん坊の視点で行動するホラーゲームです。 オープニングから赤ちゃんプレイを強要されるあたり、かなりマニアックなゲームと言えます。

2015-12-31_00002

ゲーム中では、高速移動できる「ハイハイモード」と物をつかんだりできる「よちよち歩きモード」を切り替えながら操作します。 ステルスゲームのノリで「こちら、イーグル。 よちよちモードに移行する」とか脳内ナレーションをしながらプレイすると、よりいっそう楽しめます。
トラップっぽい何かに対して「これはブービートラップ、いや、ベイビートラップか?!」などとナレーションするのもオススメです。

さて、冗談はここまでにして。
このゲームですが、ホラー要素としての音楽や効果音、光量の演出はわりと私好みです。 ゲームクリアまで数時間ですが、その間に 2回ほど鳥肌が立ったりしました。

2015-12-31_00004 2016-01-02_00001

難を言えば、ところどころで「で、どうしたらいいの?」っていう状況に陥りやすかったことでしょうか。 (単に「TAB キーを押すと入手したアイテムが使える」というのに気づかなかっただけとも言います)

こういうホラーゲームは「移動したいけど、怖いから移動したくない」っていう葛藤状態を維持できるかがネックになると思うので、何をすればいいのかわからない状況になるとその葛藤が崩れて没入感がなくなる気がしてて、

(「本能」と「理性」の関係)
こわい vs 進まなければならない

なれてきた vs 進みたいけど進み方がわからない

こわくない vs 進めないのでイライラする

ってなっちゃうので、もっとうまく誘導してほしかったなー、と思います。
ともあれ、ホラー要素もストーリー要素も楽しめたゲームでした。

好きなところ

  • ちゃんと怖い
  • ストーリーをちゃんと伝えきれている

嫌いなところ

  • 暗すぎたりして周囲がわからないシーンがある
  • まれに行き詰まる
  • 最初の1周しか楽しめない…(仕方がないけど)

まとめ

赤ちゃんプレイのホラーを楽しみたい人は買ってみよう!

「100% Orange Juice」をプレイしてみた

Steam で買ったゲームをプレイしていく企画です。 今回は 「100 % Orange Juice」 をプレイしました。

どんなゲームなの?

人生ゲームのルールをシンプルにして対戦できるようにしたボードゲーム風のなにか。  バトルやカードがある。

2015-12-31_00001 2015-12-31_00002

「移動してバトルがあって、カードも使える」って聞くと面白そうなんだけど、これが全然おもしろくない。 というよりも良くも悪くもドキドキ感がない

プレイしてて「絵がかわいくて音楽があってエフェクトが良くても、面白くないゲームは存在する」ということを実感した。 今まで「ソシャゲは絵がユーザに媚びてるかわりにゲームとしては微妙なものも多い」って思ってたけど、その主張は取り消したい。 このゲームに比べると、世間のソシャゲはすごく、すごく面白い。

なんというか、カルドセプトと人生ゲームを組み合わせて良い点と悪い点を対消滅させて「楽しくなく、苦痛でもない」という雰囲気を出すことに成功している稀有な例だと思う。 イライラしているときにこれをプレイすると冷静になれそう。

良かった点も書くと、ゲーム後の報酬を使って新しいカードを購入するときはドキドキしたし、ゲームが進行しているのを眺めてて苦痛すぎないのも確か。 「ガチャ」が簡単にドキドキさせる仕組みとして、とても有効なのが確認できた。

好きなところ

  • プレイしてて無心になれる点。 他の何かのアイディアを練るのによさそう。
  • 私もゲームを作りたい、という気分にさせてくれるところ。
  • このゲームするなら「カタン」やりたい、って思わせてくれるところ。
  • 絵がかわいい。
  • カードを買う瞬間はドキドキする。

きらいなところ

  • サイコロを振ったり選択のためにクリックが必要なところ。
    • いっそのこと全自動でいいと思った。
      • 全自動をつきつめるとクリッカーゲームになるのかもしれない。

まとめ

Steam のレビューに「フレンドと遊ぼう」ってのが多かったけど、ほかのゲームで遊んだ方がいいと思った。

「カタン」やろうぜ!

Heroes of the Storm 反省会(12/30)

Heroes of the Storm をプレイして思ったことを適当に書きます。上手くなるためのトピックとかは、ないです。

1戦目

モード: Quck Match
マップ: Infernal Shrines味方: Sonya, Artanis, Tyrael, Nova, Raynor(私)
敵: Murky, Nova, Arthas, Raynor, Abathur

えっと、味方の Sonya, Artanis, Tyrael が3人チームで参加してたんですけど「なんで3人とも Warrior なんだよ!」ってツッコミたいです。 とてもツッコミたいです。 Warrior が弱いってことはないけど、Assassin よりは攻撃力が伸びにくい。

最初のレーン分け

hots_2015_1230_only_nova

違う、そうじゃねぇ!
チームメイトといちゃいちゃしたいのはわかるけど、「mid の Nova が 1人で寂しそうでしょ!」って思った。 そもそも Artanis はいつまで Core にいるのか。動いて、動いてよ! AFK なの? ってハラハラしてた。 でも、まぁ、ある意味楽しい。

だめだ。 もっと自分のプレイを反省しようと思ってブログを書き始めたのに、負けたゲームのリプレイは見ててつらい。w

味方の反省点を箇条書きで書き出して終わりにしよう。

  • Sonya … 「攻撃したら回復するからw」って思ってるかもしれないけど、体力が2割になったら下がってほしい。
  • Artanis … 味方より敵の数が多いときに攻撃し始めないでほしい。
  • Nova … 茂みの中で待ち続けるんじゃなくて、もっと攻撃してほしい。
  • Tyrael … 普通だった。 ありがとう。
  • Raynor … Object 取り合い中は、敵ヒーローへの攻撃を優先しよう。

まとめ

Warrior が活躍して前半は押してたけど、後半までに Abathur に Split Push で削られたり Nova に私がやられたり、人数が少ないのに集団戦を始めて負けたりしてずるずると負けたゲームだった。

負けました!

2戦目

味方に「お前アホだわ!」って煽られて嫌な気分でプレイしたゲームだった。というか、レーンにやってきた戦車+メディックに対してどう対処すればいいのかわからん。

負けた。
味方にののしられながらプレイするゲームは最悪だった。

ずんだ餅を転がすアプリをゲーム化し始めた (その3)

だいたい実現したいことは実装したので、細かなネタも含めて解説していきます。  前回からいろいろ実装したあたりを書くべきな気がしましたが、だいぶん忘れたので総集編っぽくゲームを起動してからのネタを記述していきます。

以下、基本的にネタバレしかないので、未プレイの人は、とりあえず遊んでください。
http://hyakuren-soft.sakura.ne.jp/ZundaClicker/

タイトル画面

では、タイトル画面から解説していきます。
最初はこんな感じに、どこにでもありそうな無難なタイトル画面だったのですが、

ZundaClicker_title

「ずんだ餅が降ってくる理由とか意味がわからない。 なんで?」 というコメントをもらったので、プロローグが表示されるようにしました。

ZundaClicker_prologue

プロローグの文章は、時間でスクロールするようになってて、ずんだ餅をなぜ穴に落としているのか、東北ずん子たちは何をしているのか、の説明が表示されます。 30 分くらいで考えた文章としてはいい感じの説明になっていると思います。 なので、遊んで確認して見て下さい
(タイトル文字列の「Zunda Clicker」が背景と重なって読みづらくなったのは気にしないことにしました。  「Zunda Mochi Clicker」じゃないの? ってあたりもです)

ゲーム中の演出

ずんだ餅を食べるずん子

では、東北ずん子のスキルを説明していきます。 このゲーム中では3姉妹とも詰まったずんだ餅を穴に落とすためのスキルを持っているわけですが、ずん子のみ姉妹と違うスキル、そう、ずんだ餅を食べることができる、というスキルを持っています。  その理由は、ずんだ餅を食べる画像素材があったのはずん子のみ、だからです。(見も蓋もないな…)

zzm_taberu01

このスキルがあるがために、ずん子は他の2人よりもスキルが発動しにくくなっています。 それはずん子に実装した処理ルーチンが

ずんだ餅が地面にあれば、そこに移動して食べ始める

ずんだ餅が詰まっていればスキルを発動する

適当に移動したりする

という優先順位になっているからです。
しかも、地面にあるずんだ餅を食べ終わるとずん子は寝ます。 寝てる最中はスキルが発動しないので、なおさらスキルが発動しにくいのです。 スキル、2つもあるのに…。

zzm_utubuse_a

まぁ、気にせずその2つのスキル「ずんだアロー」と「もちもちジャンプ」について説明しましょう。

「ずんだアロー」

文字通り、普通のもちを ずんだ餅に変えてしまう技なわけですが、降ってきてるのは最初から全部ずんだ餅なんですよね。 じゃぁ、このスキルをどう表現すればいいか、そう、簡単です。 普通の餅がなければ召喚すればいいじゃない、ってやつです。

ZundaClicker_shoot

実装としては「ずんだゲート」から餅が出現するようにして、矢が餅に衝突したときに、その餅を消して、新たにずんだ餅を生成するようにしています。 ときどき、生成されたずんだ餅の速度が早すぎて壁を突き抜けることがありますが、物質が変換されてずんだになるレベルのエネルギー量を考えると、それは当然のことだと自分に言い聞かせながら作ってました。 みなさんも、そう理解してくれると助かります。

「もちもちジャンプ」

このずん子が壁の中に入って餅を落とすスキル、これは実は「ずんだアロー」より先に思いつきました。 ずん子にスキルが2つあるのは「もちもちジャンプを実装したけど、ずんだアローを実装しないわけにはいかないよなー」って悩んだ結果です。

ZundaClicker_jump_drop

で、ずん子の足先にずんだ餅や壁との当たり判定のための透明な円があるわけですが、ここだけずんだ餅がない空間ができてます。 上の画像では足先に透明な領域がありますが、「見えるべきは足先ではなくて太ももではないか!」って気づいたので、透明な領域が太ももになるように最新版では調整しなおしました。 自分で気づけてよかったと思っています。

ZundaClipper_mochimochi
修正後

あとは、ずん子がジャンプしたときに茶色の壁を飛び越えて左右端から地面に落ちてしまうことがあったので、ずん子専用の見えない壁「ウォール・ずん子」が配置されています。 この壁のおかげで、ずん子の進撃は防がれているのです。

それから、みなさんお気づきだと思いますが、ずんだ餅に埋もれたずん子がときどきジャンプするのは呼吸をするためです。

ZundaClicker_fall_1 ZundaClicker_fall_2

最後に「もちもちジャンプ」で穴に落ちたずん子がアプリ外に落ちてくるやつ、作る前は「このネタ最高じゃね?!」って思ってたんですけど、作ってみたら案外普通でした。 面白さを作る前に評価するのは難しいですね。

きりたんの「きりたん砲」

パワーアップ前後で威力が全然ちがう「きりたん砲」ですが、最新版では爆発と同時に画面外に飛び散ったずんだ餅をデスクトップに描画するようにしました。

ZundaClicker_bomb_1 ZundaClicker_bomb_2

ずんだクリッカーを起動したまま開発してて、ときどきずんだ餅がデスクトップに飛び散るのを見て「あぁ、動作させてるんだっけ?」って思ったりしました。 現状ではアプリ外に出たずんだ餅ごとにプロセスを起動してるのですが、複数個のずんだ餅を描画する 1つのプロセスを起動する方が負荷が少なかったなー、と反省しています。

それから「きりたん砲」のカットインが「焼き払え!」って感じのポージングなのは大変お気に入りです。

ZundaClicker_cutin_kiritan

イタコの「ずんだ口寄せ」

なんというか「ずんだ口寄せ」っていうスキルの名称だけは決まったけど、どういう演出にすればいいかが全然決まらなかったです。  そのせいか、無難な作りになってしまってちょっと反省です。 ごめんね! でも ZPS (Zunda Per Second) は大きいスキルだから許してね!

ZundaClicker_itako_kuchiyose

クリア後のずんだ餅の登録

ZundaClicker_donate

登録のボタンを押すと、本当に貯めている数だけのずんだ餅が落ちてくるようにしました。  なので、登録するずんだ餅の個数が多い場合は延々とずんだ餅が落ちてきます。 それを見てると変な笑いがこみ上げてくるから不思議です。

それから、左下のずん子は固定せずに山盛りずんだ餅の中腹に配置して、落ちてくるずんだ餅に流されるように変更しました。 いい感じです。

ZundaClicker_mount_ticket

後から見なおしても、この処理を実装するときに作ったチケット(ソフトウェア作成タスクを管理するもの)は、意味不明な方に属すると思います。  (アプリ自体はネタを追い求めてますけど、ソフトウェアの開発自体は真面目にやらないと動作しないのでちゃんと管理してるのです)

さいごに

作ってて楽しかった。
ありがとう。

やる気になったら登録されたずんだ餅の個数をグラフ化するあたりを作ります。

ずんだ餅を転がすアプリをゲーム化し始めた (その2)

前回までで、

ZundaRolling_sisters

こんな感じだったアプリをゲーム化するべく実装を行っていった。 今回も淡々と何をやったか紹介します。 興味があればソースコードを見てもらえればと思います。

で、基本的にネタバレの嵐なので、まだ「ずんだ餅クリッカー」で遊んでない方はご注意ください!

スキル「きりたん砲」の実装

ずんだ餅が詰まったときに、きりたんが「きりたん砲」を撃って詰まりを解消したら面白いんじゃね? と思ったのがきっかけです。  「面白いかも! って思ったら作ってみる」が、今回の合言葉です。

ZundaRolling_kiritan_hou
まずは、きりたんが穴の下に移動し、きりたん砲を撃つポーズを取るようにしました。

ZundaRolling_fire_1
次に、 Detonator Explosion Framework を適用しました。

ZundaRolling_fire_2
なかなかいい感じだと思います。 実際には爆風エフェクトが Sprite2D より手前に表示されたり奥に表示されたりして、それの修正に時間がかかっています。 結局 Detonator 側の C# スクリプト内に Renderer の layerSortingName を設定するコードを追記して解決しました。

ZundaClicker_explode
このスクリーンショットなどは、姉たちが寝ているなかで「きりたん砲」をぶっぱなす感じが気に入っています。

ZundaClicker_cotinuous

つぎに、爆風だけだと微妙なので、Rigidbody2D を適用した透明なアセットを用意して爆風と同時に穴の下から上に移動する速度を設定して配置しました。 これで、爆風と同時にずんだ餅が微妙に飛び散って詰まりが解消されました。

で、連続で「きりたん砲」を撃ち続けると、餅が飛び散って積み上がってしまい、ずんだ餅が落ち続けてしまうのが確認できました。 これに対処するために、地面に落ちたずんだ餅はずん子に食べさせることにする決心をしました。 よろしくね、ずん子ちゃん。

ZundaClicker_cutin_kiritan

次に、カットインを作成しました。 「きりたん砲」を使う前に表示することにしました。 このカットインの背景素材も「ぴぽや」のものを利用しています。 いい感じです。

あ、このあたりのキャラクターが移動したり砲撃するあたりの処理はコルーチンで実現しています。 わぁい、コルーチン。 私、コルーチン大好き!

ZundaClicker_cutin_zunda_arrow
次に、ずんだアローのカットインだけ先に作ってみました。

ZundaClicker_giridan_hou
で、カットインの表示が重なると「ぎりだん砲ー」になるのが確認できました。 スキル発動は同時に起きないようにする必要があるのがわかりました。

ZundaClicker_zundamochi_oishiiyo
あとは、ノリと勢いだけでずんだ餅のカットインも作りました。 いい感じです。

ZundaClicker_dropped_eating
地面に落ちたずんだ餅を食べるあたりを、いろいろどうにかして実装したときのスクリーンショットです。(たしか

zunda_loop
それから、そろそろ紹介ページでも作るか、って思ってて作った悪循環コラがこれです。 インパクトが不足しているのでボツにしました。

ZundaClicker_jump_drop
スキル「もちもちジャンプ」を実装したり。

ZundaClicker_title
タイトル画面を作ってみたり。

ZundaClicker_itako_kuchiyose
スキル「ずんだ口寄せ」を実装したり。

ZundaClicker_english_logo
タイトル画面にロゴを適用したり。

ZundaClicker_shootZundaClicker_hitどういう実装にするか決まらなかった「ずんだアロー」を実装したり。

ZundaClicker_skill_cooldown
スキル発動までのクールダウン時間を表示するためのアイコンを右側に配置したり。

とかをしました。
まだまだ完成じゃないので、引き続き実装してます。

つづく!

このアプリのソースコードは、下記プロジェクトで管理されています。
https://bitbucket.org/satofumi/zunda_clicker

 

ずんだ餅を転がすアプリをゲーム化し始めた

以前に作ったずんだ餅を落とす脱穀機シミュレータを、ちゃんと Google Play とかでリリースすべく作り込みを始めた。 淡々と変更する様子のスクリーンショットを貼り付けながら、何を変更したのか簡単に書き出していく。

ZundaRolling_zps
ずんだ餅が落ちる速度 zps (Zunda Per Second) を表示するようにした。

ZundRolling_dropped_per_click
クリックしてない間に落ちるずんだ餅の数を表示するようにした。(右下)

ZundaRolling_background
背景画像を適用した。 草原だとずんだ餅の色と同じなので雪原にした。
(素材は東北ずん子のもの以外は「ぴぽや」の物を使ってる。

ZundaRolling_hole

ずんだ餅が画面下まで落ちていくのは違和感があったので、穴を描画してそこにずんだ餅が落ちるかのような表現にした。
穴の画像と、穴の下部分の画像を用意して実現した。

hole
穴の画像。これを左右に伸ばして使ってます。

hole_front
↑ここに穴の下の部分が白色で、それ以外が透明な画像があります。(見えませんが

ZundaRolling_zunko_import
次に、キャラクターを配置しようとして東北ずん子ちゃんの画像を取り込んだ。
取り込んだら、ちょうど足が穴にはまっていて吹いた。

ZundaRolling_sisters
他の姉妹も配置した。
あと、ここまでで Anrdoid の加速度情報でもタップしたのと同じ操作になるようにしたり、ハイスコア相当の値がゲームの起動をまたいでも保持されるようにした。

今後の予定としては「ずんだ餅を 1,000 個ほど落とそう!」とかの実績を追加したり、キャラクターが動作するあたりを実装しようと思う。

タイトル画面を用意するかは、悩み中。

このアプリのソースコードは、下記プロジェクトで管理されています。
https://bitbucket.org/satofumi/zunda_clicker

Unity の Window を透過させてみた

今回は Win32 API を呼び出して Unity アプリを実行させるウィンドウを透過させてみました。

作ろうとしたもの

Unity で exe ファイルを生成して、実行するとウィンドウ枠がなくなって、ウィンドウ背景も透過するようなものを作ろうとした。 最終的に、デスクトップマスコットとして動作させようとした。

途中経過

このフォーラム中のソースコードを書き写し、Query ちゃんと Cube とを配置して実行してみた。
http://answers.unity3d.com/questions/869378/viewing-desktop-in-scene.html

できたもの

こういう風にモデルを配置して
HowIsTheProgress_unity

実行すると、こんな風になる。
HowIsTheProgress_exec

 

感想、今後の予定

現状では、こんなふうに背景もモデルも関係なく透過しているので、個々の Win32 API の機能について調べたり、調べなおしたりして対処したい。

今回のソースコードは、下記プロジェクトのリポジトリ中の HowIsTheProgress です。
https://bitbucket.org/satofumi/unity_learning

Unity を使って狙ったところのオブジェクト情報を取得してみた

Grappling Hook でもって、クリックした先にフックを引っ掛けるような動作をさせようとしたときに、自キャラとカーソルの先にあるブロックの情報を取得しようとしてできなかったので、その情報を得るだけのサンプルを作ってみました。

作ろうとしたもの

画面内にブロックをたくさんと自キャラを配置し、自キャラとクリックした位置の先にあるブロックの情報を表示するサンプル。

途中経過

RayCastInformation_blocks

ブロックと自キャラ(緑)を配置した。

RayCastInformation_rays

Game ビューでクリックすると Scene ビューで Debug.DrawRay() の線が描画された。 あ、ここまででブロックには Blocks っていう名前のレイヤーを定義しておいた。

できたもの

動いた。 主なコードは下記の通り。

void Update()
{
  if (Input.GetButtonDown("Fire1"))
  {
     Vector3 direction = Camera.main.ScreenToWorldPoint(Input.mousePosition) - OwnCharacter.transform.position;
     RaycastHit2D hit = Physics2D.Raycast(OwnCharacter.transform.position, direction, Mathf.Infinity, 1 << LayerMask.NameToLayer("Blocks"));
     if (hit)
     {
        Debug.Log(hit.collider);
        Debug.Log(hit.point);
      }

      Debug.DrawRay(OwnCharacter.transform.position, direction, Color.red, 10f);
   }
}

感想、今後の予定

ここまでに勘違いしてたことは

  • Physics2D.RayCast() の2番目の引数は「目的座標」じゃなくて「向き」であるということ。
  • Debug.DrawRay() の内容は Scene ビューにしか表示されないこと。

です。
正しく理解できてよかった。

今回のソースコードは、下記プロジェクトのリポジトリ中の RayCastInformation です。
https://bitbucket.org/satofumi/unity_learning

Unity を使って Grappling Hook を作ろうとしてみた

フックを使って天井にロープをひっかけて移動していくやつ。 今回はそういうのを作ろうとしてみます。

作ろうとしたもの

天井にロープ付フックをひっかけては進み、ひっかけては進みができるサンプル。

途中経過

GlapplingHook_blocks
ブロックを配置した。

GlapplingHook_rope
Hinge Joint を連続でつなげてロープを作った。

GlapplingHook_connected

ロープに自キャラを接続した。

GlapplingHook_fixed

ロープの質量を軽くしたり、自キャラへの重力の影響を変更した。

できたもの

この次に、自キャラとクリックした先の延長線上にあるブロックに新しいロープを作り直す、って処理を実装しようとして失敗した。 自キャラとマウスの先にあるはずのブロックの情報が適切に処理できなかった。 わからん。

感想、今後の予定

よくわからないので、仕切りなおすことにする。
次は、自キャラとクリックした先にあるブロックの情報を取得するサンプルを作ってみようと思う。

今回のソースコードは、下記プロジェクトのリポジトリ中の GlapplingHook です。
https://bitbucket.org/satofumi/unity_learning