エンジニアが書いてるようなブログ

ゲームプログラマをやっています。仕事やゲームや趣味に関してつらつら

Canvas に関して簡単なまとめ

こんにちは、久しぶりの投稿になります。

最近仕事でUnityのUIをいじることがあり、Canvasの設定が全然わかりませんでした。

今日はCanvasについて簡単にまとめてみたいと思います。

そもそもCanvasってなに?

f:id:tkymx83:20180218140909p:plain

UnityでUIを置こうとするとHierarchy上に上の画像のような"Canvas"とかかれたオブジェクトが設置されます。
ボタンなどのUIはこのCanvasの子要素として設置されます。このCanvasのオブジェクトの下に設置しないとUnity上では見ることができません。

Canvasってなにをやっているの?

簡単にいうと、子要素として設定されたボタンなどのUIの見え方の制御をしています。

f:id:tkymx83:20180218140753p:plain

Canvasには上記のようなコンポーネントが設置されています。

[Canvasコンポーネント] はUIがどのように配置されるかを表しています。
Render Mode に設定された項目で見え方が大きく変わります。

  • Screen Space - Overlay

このモードでは、キャンバスのスクリーンの大きさに合わせて、3D空間上のオブジェクトに上書きされるようにレンダリングされます。

この際パースによる影響は受けないため、ゲーム上のメニュー画面のような形で使用できます。

  • Screen Space - Camera

このモードでは、[Screen Space - Overlay] とは異なり、3D空間上の奥行きを判断してレンダリングされます。この際もパースの影響は受けないため、3D空間上に板が設置されているようなレンダリングとなります。

ゲームでは常にカメラの方を向くヘルプの情報のようなかたちでみることができます。

  • World Space

このモードが一番わかり易いですね。3D空間上にUIがあたかも存在するかのように設置できます。そのため、カメラを動かすと、それに応じてUIの見え方も変わります。

キャラクタのHPバーのような形で表示することができます。

解像度が変わった場合ってどうするの?

ゲームを作っていて一番気になるのはスマホのように解像度が違う場合にどのように対処するかですね。

f:id:tkymx83:20180218140753p:plain

その場合は上記Canvasコンポーネントの中で、[Canvas Scalerコンポーネント]を使用します。

UI Scale Mode を変更することで、解像度が違う場合の対処方法を設定することができます。

  • Constant Pixel Size

このモードはUnity上のピクセル数が解像度関係なく表示されます。
つまり、100x100px の画像を表示する場合、1000x1000pxの画面では小さく表示されるが、100x100px の画面では大きく表示されるということです。

  • Scale With Screen Size

こちらは、解像度の変化によって、実際の表示されるサイズを変更するモードです。前述の例で行くと、1000x1000pxの画面でも100x100pxの画面でも画面上の大きさは変わりません。

  • Constant Physical Size

こちは、[Constant Pixel Size] と似ており、前者がピクセル数が一定であることを保証していたように、後者は物理的(ミリメートル)なサイズを一定に保つようにレンダリングします。そのため、DPIが重要視される場合に使用されます。

まとめ

基本的にメニュー画面のようなUIを作る場合は、CanvasのRender Mode は Screen Space - Overlay がおすすめで、Canvas Scaler の UI Scale Mode は Scale With Screen Size がおすすめです。理由は解像度が変わってもUIの位置がずれることがないためです。

反対にHPバーやキャラクタの名前が3D上モデルの上部に表示される場合はそれ以外の要素を使って調節する必要があります。

あとは使ってみて、一番自分の理想に合うものを選んでいただける幸いです。

【未解決】なぜ説明がうまくできないのか?

仕事の内容を伝えようと思ってもあまりうまく伝わらない
そんなことがありませんか?

説明がうまくできなかった状況について、僕が気づいたものを
いくつか上げてみたいと思います。

あるある!、と思った人はすでに説明が下手かもしれません。
気をつけてください。

係りが多い

この仕様でこの部分が間違っていたので修正したので見てください。


「で」がおおいですね。
ここまで同じ接続詞が続くと、どの部分が伝えたい事なのかがわかりづらくなります。

わかりづらい理由は、テンポが一緒が一緒だからです。句読点があるように人間は区切りで物事を判断します。
そのため、「で」が一定のリズムで現れると区切りがわからなくなり、内容の理解が困難になります。

「思います」の罠

このような自体が起きていると思われます。
対処するにはこのような対策が必要であると思われ、
そのために〇〇を行いたいと思い連絡いたしました。

思いすぎですね。

思うという文章には、重要ではないという感想がつきまといます。
それによって、文章の重要な部分がわからず、混乱をきたしてしまいます。

思うという言葉は自身がない時によく使われがちですが
断定できる部分は断定して、重要であることを伝えましょう

話の範囲がわからない

〇〇と〇〇について問題が生じました。
そのため、検証対象の他の対象についても再検証が必要です。

一見普通の文章のようです。しかし、この文章は2つの解釈があります。
1.検証対象の〇〇と〇〇を抜いたの他の対象
2.全対象の中で検証対象を抜いた他の対象

本当の意味が1だったとしても、2と解釈されると、検証の範囲が増大します。
その状況で会話を勧めていくと、とんでもない勘違いが生まれてしまします。

なので、何かの範囲の話をする場合は明確に伝わるのかを注意しましょう

やさしい日本語はながくわかりづらい

調べる大きさはとても大きなるかもしれないので、わかりやすい調べ方を探しておいてください。

文章は小学生にも理解できるようにすることが大切とよく言われます。
しかし、上の文章を理解するのは難しいでしょう。

理由は2つあります。
1.長いので読んでいる間に前半のことを忘れる
2.意味の単位がわからない

特に重要な事は2の意味の単位がわからなくなることです。
先程も述べましたが、人は区切りで物事を認識します。

ひらがなの多いこの文章では区切りがわかりづらいです。
実際に以下の文章を見てください。

調査範囲は増大傾向にあるため、明確な調査方法の検討をお願いします。

感じがあると、その区切りで物事を理解するため、理解の助けになります。

まとめ

以上、最近の文章力の不足を自分なりに分析して、悪い点を洗い出してみました。

最後の項目などは伝える対象によるところがあるかもしれません。

重要なことは誰が読んでも同様のこととして理解できる点です。

そのことに注意しましょう。

そろそろ経済学の本でも読んでみませんか?

こんにちは

皆さんはどんなことが気になりますか?
僕は古本屋さんがどのように儲けているのか気になります。

神保町の古本屋さんに行くと、本を買う人はあまりおらず
本を見ているだけ。店員さんも座って本を読んでいるので
本が売れなくても生計を立てられるのか不思議になります。

そんな僕の疑問を解決してくれたのが、このの本です。


なんで古本屋さんは売れるのか?

答えは本の売買以外のことで儲けているということです。

この本の中で登場する本屋さんにはイケメンの店員がいます。
店主はいつも店の前で本を読んでいるそうです。
ではどんなことで儲けているのか?

作者が近くのカフェに寄った時に、カフェの壁にはとてもセンスの良い本が並んでいたそうです。
本についてマスターと話していると、なんとカフェに飾ってあるこれらの本は隣イケメン店員に選んでもらっているそうです。

実はこの古本屋さんのイケメン店員は目利きのセンスが強く、とても良い古本を集めて来るそうです。
なので、本の売買だけではなく、自分の能力(目利き力)を活かした、本のプロデュースで儲けていたのです。

本のプロデュース事業は作者のよってカフェだけではなく、都内のいたるところで展開しているそうです。

他にはどんなことが書かれているのか?

本で書かれている古本屋さんのように儲る仕組みはいろいろあります。
この本ではこれ以外にもたくさんの例がわかりやすく書かれています。

古本屋さんの例から分かる通り、この本では日常の気づきを経済学に結びつけます。
なので、自分事としてすんなり経済学を受け入れることができます。

いままで経済学を難しいと思ってた人にとっても良本に

世の中にある本はたいてい難しい本です。
キャズム」や「5つの力」など聞いたことはあっても、具体的に何に使えるのかは想像がつきません。

対してこの本は、日常から経済学を学べるため
とても気持ちよく経済学の基礎の部分を理解することができます。

10秒でできることから習慣が始まるのか?

下の本を読みました。

かなり有名な本で、習慣化につながることが書かれています。

習慣化のためにこの本で述べられていることを、僕なりに解釈すると以下のようになります。

すぐに始められる馬鹿馬鹿しい習慣から始める

馬鹿馬鹿しいってどんなんだよとおもったら、「一日腕立て一回」だそうです。

たしかに、やる意味があるのかよと思ってしまいますね。この習慣の目的はとりあえず始めることらしいです。

習慣が続かない原因は高い目標を立てたゆえに、やる気が起きなかったり、できない自分に絶望したりなどがあります。

それにたいして、「一日腕立て一回」はたしかに、やれないことは無いですね。作者自身もこれを実践すると、一回やったら二回目をやってもいいかなという気持ちになったそうです。

そうやって、次に続いて行くんですね。

習慣にモチベーションは関係ない

モチベーションがあると良いように思えます。僕自身、以前運動をしようとした時に、モチベーションが高い時はかなり続きました。

ですが、モチベーションが低いと今日はやめようとなるのも事実でした。

モチベーションというのはワクワクした時に上がるそうです。何か新しい習慣を行う時はワクワクしますよね?毎日運動したらマッチョになれるんじゃないか?と言った感じに。

ですが、毎日このわくわくが続くわけではありません。普段に行動にワクワクする人がいないように3日もすればモチベーションは上がりません。

ならどうしたら、続けられるのか?それが、はじめにも出ていた「一日腕立て一回」です。一日腕立て一回なら、モチベーションがなくてもとりあえず始められますよね?はじめてしまうと、モチベーションは後からついてくるので続いていきます。

やる時間を決めない

やる時間を決めるということはやらない理由を作ることになります。

朝風呂に入るなどの時間が決まっている場合を除くと、「一日腕立て一回」などはいつでもできるものです。

これを18時からやるなどと決めてしまうと、飲み会などで遅く帰ったの時に、時間が過ぎてるからやらないという判断を下してしまうかもしれません。

なので、時間を決めないで、できると思った時にやる。内容もすぐできるものなので、すぐやる。そうするよ、自然ともう一回となっていくものです。

まとめ

実は自分も運動をやろうと、決めていて、何もできていない日が結構ありました。やっぱり辛いものなので後でやろうと思っていました。

「小さな習慣」の良い点は10秒でできることでもいいということです。いまでは、思い立ったら、腹筋をとりあえずやります。そうすると、なんだか腕立てまでやりたくなってしまいます。

やっぱりどんな小さいものでもいいから続けることが重要なのかなと思いました。






ちなみ、この本にはなんで、習慣化できないかが、これでもかというほど書かれているので、その部分を読むだけでも楽しいと思います。


BitCoin で 3000円が3003円になった。

こんにちはまずは下の画像を見てください。

f:id:tkymx83:20180108163415p:plain

右上の預入証拠金は現在の資産だと考えてください。今日からBitCoin でFx をはじめましたが、なんと3000円が3003円になりました。

小さな一歩かもしれませんが、これが30000円なら 30030円です。夢が広がります!!

そこで今回はBitCoin でFx 初心者向けにどうやって、3円儲けたのかを解説します(笑)

※販売所は BitFlayer を使っています。

コツは一つ

買った値段よりも高く売ることです。

当たり前だろうという人がいると思いますがこれには落とし穴があります。

その落とし穴とは

より高く売りたいと考えてしまう。

これです。今回は3000円で買って、3003円で売りました。しかし、チャート上ではどんどん値段が上がっていきます。そこで、売りしぶっていたら、どうなるでしょうか?いつまでも待っていたら、下がってしまうかもしれません。もしかしたら、全く上がらず下がってしまうかもしれません。

なので、この落とし穴にはまらないために以下のことが重要になってきます。

買った値段よりも一定の値段高く売ることです。

つまり、はじめから 3000円になったら買って、3003円になったら売ることです。

これをコンスタントに続けることが大切になります。

IF - DONE が使える

このように、いくらになったら買って、いくらになったら売るという条件を設定できます。*本当はもっと機能が多いです。

BitFlayer での IF - DONE のやりかたは以下に書いています。
bebesan.net

コンスタントにIF - DONE を設定する。

投資は一気に儲けることもできますが、今回話していることはコツコツと稼ぐ方法です。
※本当にコツコツなので、大きな儲けは数年後になると思います。

コツコツ儲けるためには先程の IF - DONE の条件を複数個指定し、ある期間たったら見直しを行う必要があります。

IF - DONE をつけると、後は自動で売買を行ってくれます。自動で行うということは人間の意識が介在しないということです。先程述べた通り、もっと高く売りたいという人間の意志が迷いを生みます。よって想定通りの取引ができます。

IF - DONE を複数個指定する際には、ある一定の幅で指定します。例えば3000円で買って、3500円で売るのと3500円で買って、4000円で売ると言った形です。こうすると、チャートが 2900円から 3600 円まで動くと はじめの IF - DONE 取引が行われ小さいですが利益になります。そして、なくなたら、またおなじものを設置します。

気づいている人もいると思いますが、チャートが上下する間は利益が常に出ることになるので、コンスタントに儲けることができるというわけです。

見直しは必ず

しかし、いくらか運用しているお、このチャートも大きくハズレる場合があります。そのときは、IF - DONE の条件もチャートに合わせて変更する必要があります。この判断を行うために見直しが必要になるというわけです。

この見直しは何回も行っても良いのですが、それでは時間がいくらあっても足りません。投資が本業でもないのに時間を取られるのは嫌ですよね。なので、一日に一回程度で良いと思います。

まとめ

今回 3000円から 3003 円と小さな一歩ですが、これを定期的に出していくにはとても根気のいる作業だと思います。

BitCoin は昨年急激に上昇しましたが、今安定にあるので、そこに合わせた運用方法があるのではないかと思います。

上のはなしはかなり以下の本に影響されているので、皆さんも是非読んで下さい。特に、どのスパンでどれくらいの IF - DONE を設定したら良いかが参考になると思います。

家の中をスマートホーム化したい!でもどうやってやるの?調べてみた

こんにちは!

家に帰ってきてこんなこと思いませんか?

「寒い!、温まるまで何もできない!」

最近寒い上に、家に買ってきてから暖房をつけても温まるまで寒いですよね。

そこで活躍するのがスマートホームです。家に帰る前に暖房をつけることができたら、素敵ですよね。

でも敷居が高いですよね?何から調べて良いかもわからない。ということで、最近のスマートホーム化で使われているものについて簡単にまとめてみました。

スマートホームについて調べる取っ掛かりにしてもらえるとありがたいです。

※ この記事ではスマートホーム化のための具体的な方法がかかれているわけではありません。概要を掴んで今後の理解につなげてもらえると良いと思います。

Google Home

最近よく聞くワードですよね。

これは、人間の声をつかって何か動作を行う装置です。

例えば、「音楽を流して」というと、連携したアプリやサイトから音楽を流してくれます。

スマートホーム化では、操作の部分を主に担当します。

「電気をつけて」と言うと、連携した装置をつかって、電気をつけたりします。

しかし、Google Homeで電気をつけるには、連携する装置が必要になります。

store.google.com


Nature Remo

Google Home に連携する装置としての第一候補がこれです。

Nature Remo は学習リモコンと呼ばれており、実際のリモコンの赤外線のパターンを学習します。

つまり、既存のテレビや電気やエアコンのリモコンの動きを学習します。現在の家電は大体が赤外線で動いているのでこの装置があればほぼすべての家電をスマート化できます。

具体的には、Google Home にある言葉が話しかけられたら Nature Remo を動作させたら良いわけですね。

nature.global

Amazonはプレミア価格ですね。

IFTTT

Google Home と Nature Remo の連携を行うのが、IFTTT です。

IFTTT 自体は web サービスですので、ブラウザで様々な設定を行います。

このサービスが行うことは、「何かが起こったら何かを行う」という動作です。

そのため、IFTTT 上で Google Home であるメッセージを感知したら、 Nature Remo に登録されているある家電のリモコンの赤外線情報を送信すると設定すれば良いわけです。

ifttt.com

まとめ

スマートホームは基本的には今回説明した3つから成り立っています。

  • 入力:Google Home
  • 出力:Nature Remo
  • 連携:IFTTT

Nature Remo では赤外線リモコンの学習を行っていますが、直接電球がネットにつながっていて操作が可能な場合もあります。

そのときには出力の部分をその機器にすることで、対処できると思われます。




早く家もスマートホーム化したい。。。

三日坊主解消にいいかも?、10時間でゲームを作っておもったこと

あけましておめでとうございます。

皆さんゲーム作っていますか?
ぼくは2018年 年賀ゲーム作りました!!

Androidのみでリリースしているので
もしよかったらやってみてください。

play.google.com

そして、このゲームは10時間で作成してリリースまで行いました。
短時間でゲームを作ってみて、一つ思ったことがあります。

長い期間でゲームは途中で諦めるのに、短時間だとスルスル作れる!


ということです。なんでそう思ったのかを今回は3つのポイントでまとめてみたいと思います。

簡単なまとめ

今回ゲームを作りきれた一番の原因はモチベーションが下がらなかったことにあります。長くゲームを作っていると、様々なところでモチベーションが下がります。

ですが、短い期間では自分の作りたいところから作っていきどんどん見た目で成果がわかるので、モチベーションが下がらずに続けられたのかなと思いました。

詳しくは以下に書きます!

初めにルールをきめてそれ以降の変更は行わず、最後に調整を加えた。

今回ゲームを作る時ははじめの30分でルールをざっくりですがきめました。

「縦スクロールで犬が進みながら食べ物を効率よく拾っていくとスコアが上がるようにしよう!!」

このような形です。そして、作成中にそのルールが面白いことを疑わずに作りきり、最後に面白くない部分を調整しました。

長い期間でゲームを作っていると、途中でこの企画は面白くないのではないか考えてしまい、モチベーションが下がることがあります。

しかし、ゲームは同じものでない限り作るまでは面白いかどうかはわかりません。なので、作り切る前に面白いか考える事自体がナンセンスなのです。

その点、今回ルールの再考をしなかったことで、作りきった後の確実に面白くない点のみに改善の目を向けることができたので、モチベーションが下がらずに開発できたと思います。

自分の作りたい所から作っていった

長い期間でゲームを作ると、クラス設計などの設計がはじめに入ってきます。設計ではすべての仕様を理解していないといけないために作っては修正してを繰り返すことになります。

この修正は全部作り変えることもあり、とてもモチベーションが下がります。また、一度作った設計が不完全だと次見た時に何がなんやらわからずに、思い出しコストが発生してモチベーションが下がります。

今回、短い期間で作るにあたって、自分の作りたいクラスから作り、自分の作りたい用に増築しました。これによって、完成した箇所が目に見えていくので、モチベーションが下がらずにできました。

コードが汚くなるのでは?という意見もあるかもしれませんが、はじめはそれで良いのです。一度作り切ると、隠れた仕様や全体像が見えてくるので、その段階でクラス図などを作れば良いのです。

ツールは初めにしっかりと決めておいた

ゲームを作っていて割りとつまづくのはツール決めです。選択肢が広く似たようなものが多いため判断に困ります。また、ツールによって拡張子などの相性もあるので、下手なものは選べません。

今回は開発ツールはUnity、画像作成はPowerPoint としました。PowerPointpng として出力もでき、ある程度のクオリティのものが作れるのでおすすめです。

今回は期間が短いので使い慣れているものを使いました。それが良かったと思います。どんなツールを使うかは実際に解決したい問題が出ないとわかりません。

ベクター画像が作りたければ、Illustrator、ドット絵を書きたかったらEDGEのようなツールを使うなどです。

なので、二番目の項目と同じですが、まず作り始めて、問題点やツールへの疑問点をまとめることが大切です。それまでは、自分が使ったことが有る。使いやすいものを使うのが一番です。

まとめ

長期間でゲームを作るときにモチベーションが下がる理由は、おもに考えすぎです。まだ何に対処すれば良いのかもわからないのに考えすぎてモチベーションが下がります。

いろいろ考えて作ったところで、考えが及ばずに作り直すことが多々あるでしょう。

今回、短い期間で色々と割り切って作りました。ゲーム仕様の把握やツールに対する問題点など、長い期間のゲームを設計する上で知りたいことを短い時間で把握することがで来ました。

つまり、モチベーション落とさずに長い期間開発するためには、一度短期間で作りたい所からがっつりつくって、問題点をある程度把握した上で設計などを行うと、効率的に開発ができる!!ということです。