kidoOooOoooOOom

IT系で開発やってます

Unityでアプリ起動時の画面向き設定

スマホの縦向きのレイアウトしか考慮しない場合は縦向き固定にする。
[Build Settings] から [Player Settings]を開き、Resolution and Presentation のところの Orientation を変更する。
Portrait: 縦向きでホームボタンが下固定
PortraitUpsideDown: 縦向きでホームボタンが上
LandscapeLeft: 横向きでホームボタンが右
LandscapeRight: 横向きでホームボタンが左
Auto Rotation: スマホの向きに合わせてアプリも回転

Monodevelop ショートカットメモ

とりあえず使いそうなのメモ


コードスニペット: 予約語を入れて tab 2回
定義へジャンプ: 変数を選択して cmd + y
参照先リストアップ: cmd + shift + y
リファクタリング: Cmd + r
指定行へ移動: Cmd + L
コメント挿入: ///
矩形範囲選択: option + マウスドラッグ

ファイルのタブを左移動: cmd + shift + {
ファイルのタブを右移動: cmd + shift + }
左にインデント: cmd + {
右にインデント: cmd + }

ファイル内検索: cmd + f
複数ファイル対象検索: cmd + shift + f
ビルド: cmd + b
ファイル名検索: cmd + shift + D

レベルアップのゲームデザイン 読書メモ LEVEL9

「レベルアップ」のゲームデザイン ―実戦で使えるゲーム作りのテクニック

「レベルアップ」のゲームデザイン ―実戦で使えるゲーム作りのテクニック

LEVEL9 レベルデザイン

  • お決まりのワールド: TOP10
    • 宇宙
      • 黒いテレビ画面は宇宙を表現するのに最適。初期のゲームではプログラマーだけで作業が完結することは重要な要素だった。
    • 炎と氷
      • ダメージを受ける炎と、滑り易い氷面。これらの危険な地形は、レベルを歯ごたえのあるものにし、プレイヤーのリズムを崩すタイミングパズルを作り出した。また、マグマ男や火をはくドラゴン、雪だるまなど敵のバラエティも提供できる。
    • ダンジョン/洞窟/遺跡
    • 工場
    • ジャングル
    • 不気味な場所/墓地/幽霊屋敷
      • 最高の恐怖はくるのはわかっているけれどもいつ来るか分からないもの
    • 海賊
    • 埃だらけの都市
    • 宇宙ステーション
    • 下水道
  • 名前の付け方
    • レベルのテーマを決めたら、次は名前をつける。各レベルは常に2つの名前を持つ。1つはプログラム用、1つはプレイヤー用。
  • レベルデザインに必要なことはすべてディズニーランドが教えてくれた
    • ストーリーはゲームのレベル内で伝えられべき
      • ディズニーランドの創造と構造が、ゲームのそれと多くの点で類似している
        • ディズニーランド
          • 世界 -> ランド -> アトラクション -> 1つ1つのシーン
        • ゲーム
          • 世界 -> レベル -> 体験 -> 1つ1つのゲームプレイ
  • ビートチャート
    • ビートチャートは映画のプロダクションを整理し計画するのを助けるためにハリウッドの作家や監督が使うツール
      • 少なくとも次の情報を含めるべき
        • レベル名
        • ファイル名
        • プレイヤーの目標
        • ストーリービート
        • プレイスタイル
        • メカニクス
        • NPC
        • ボーナス要素
        • 時刻
        • 色使い
    • ビートチャートを作成すると、ゲーム内に生じる隙間や重複を見つけだしやすくなる。ゲーム要素を再度整理して、各要素をバランスよく配置し、ゲームの流れが自然になるようにする。
  • マップ作成について。ただのゴミ箱だったとしても、すべての指状の脇道の終わりに報酬を配置するべきだ
  • ゲーム全体を通してプレイヤーをトレーニングする

Phoenixでcrud操作できるところまで

昨日に引き続き、elixir と Phoenixを軽く触ってみる。

Phoenix は default で postgreSQL を使うので、それをローカルのmacに環境構築する。
参考にしたのはこちら。qiita.com

$ brew install postgresql
$ initdb /usr/local/var/postgres -E utf8
$ postgres -D /usr/local/var/postgres

これでデータベース一覧が取得できれば成功
$ psql -l

だが、自分のmacではエラーになった。どうやらバンドルインストールされたのがあるらしく下記対応で起動できるよういなった。

$ curl -o fixBrewLionPostgresql.sh http://nextmarvel.net/blog/downloads/fixBrewLionPostgres.sh
$ chmod 777 fixBrewLionPostgresql.sh
$ ./fixBrewLionPostgresql.sh

これでおk。

.zshrc
あたりに下記の設定をしておけば

$ export PGDATA=/usr/local/var/postgres

今後は下記のコマンドで起動停止できる。
$ pg_ctl -l /usr/local/var/postgres/server.log start
$ pg_ctl -l /usr/local/var/postgres/server.log stop


今回のphoenix アプリ向けに postgresにユーザ作成
$ createuser -P -d postgres

default では password も postgresになっている。
phoenixのtestで使うDB の設定は config/test.exs に書かれている。

# Configure your database
config :phoenix_training, PhoenixTraining.Repo,
  adapter: Ecto.Adapters.Postgres,
  username: "postgres",
  password: "postgres",
  database: "phoenix_training_test",
  hostname: "localhost",
  pool: Ecto.Adapters.SQL.Sandbox

以下のコマンドでデータベースが作成される。
$ mix ecto.create

データベースを確認する。
$ psql -l

phoenix_traning_devが作成されていることが確認できる。

                                       List of databases
        Name         |  Owner   | Encoding |   Collate   |    Ctype
---------------------+----------+----------+-------------+-------------
 phoenix_traning_dev | postgres | UTF8     | ja_JP.UTF-8 | ja_JP.UTF-8


下記のようなコマンドを実行すると、User CRUDの各ファイルが作成される。
$ mix phoenix.gen.html User users name:string email:string bio:string number_of_pets:integer

ファイル生成後、

Add the resource to your browser scope in web/router.ex:
    resources "/users", UserController

とあるので、router.exに定義を追加する。

その後、

Remember to update your repository by running migrations:
    $ mix ecto.migrate

とあるので、migrateを実行する。

サーバを起動して、localhost:4000/users でアクセスすると User の CRUD アプリが動く。
f:id:gidooom:20151007160618p:plain


user crud のために自動生成されたソースは下記の通り。
https://github.com/kidooom/phoenix_training/commit/336236aee52c95b2daf18ee9d80c589d862df876

elixir と phoenixを軽く触ってみる

elixir の wikipedia
Elixir (プログラミング言語) - Wikipedia

Elixir (エリクサー)は並列処理、関数型に対応した、Erlangの仮想環境(BEAM)上で動作する汎用プログラミング言語である。ElixirはErlangで実装されているため、分散システム、耐障害性、ソフトリアルタイムシステム等の機能を使用することができるが、拡張機能として、マクロを使ったメタプログラミング、そしてポリモーフィズムなどのプログラミング・パラダイムプロトコルを介して実装されている


elixir のインストール

$ brew update
$ brew install elixir

これでok.
iex でインタラクティブシェルが立ち上がる。
$ iex

文字列の連結は + じゃなくて <> を使う。

iex(1)> "hello" + " world"
** (ArithmeticError) bad argument in arithmetic expression
    :erlang.+("hello", " world")
iex(1)> "hello" <> " world"
"hello world"
iex(2)> 

rubyと同様に#{}によって式展開

iex(2)> "10 + 20 = #{10+20}"
"10 + 20 = 30"

リストとタプル。
リストは Linked list に対し、タプルは要素を連続したメモリ上に保存している。
リストの更新や追加に比べて、タプルの更新は要素全体をコピーして生成するのでコストが高い。
変更されないようなデータをタプルにした方がよさげ。

iex(4)> %{hoge: 100, huga: 200}
%{hoge: 100, huga: 200}
iex(5)> 
nil
iex(6)> map =  %{hoge: 100, huga: 200}
%{hoge: 100, huga: 200}
iex(7)> map.hoge
100
iex(8)> %{map | hoge: 300}
%{hoge: 300, huga: 200}
iex(9)> map.hoge          
100
iex(10)> map = %{map | hoge: 300}
%{hoge: 300, huga: 200}
iex(11)> map.hoge                
300
iex(12)> 


実際にelixirプロジェクトを作成する。

$ mix new
で空プロジェクトが作成される。
$ mix test
でとりあえずtestが通れば問題無し。

hello world を出力する

defmodule Hello do

  def world do
    IO.puts "Hello World"
  end
end

Hello.world

フィボナッチ数列

defmodule Fib do
  def fib(0) do 0 end
  def fib(1) do 1 end
  def fib(n) do fib(n-1)+fib(n-2) end
end

IO.puts Fib.fib(10)


Railsライクな web framework の Phoenixもとりあえず動かしてみる。

install
$ mix archive install phoenix

new project
$ mix phoenix.new .

launch
$ mix phoenix.server

これで、localhost:4000 でアクセスできる。


ひな形プロジェクトに対し、/hello ページを追加する。
変更したコードは下記の通り。
https://github.com/kidooom/phoenix_training/commit/801f9039014d4d629dafbf5772826ff73140ebbe

これで、localhost:4000/hello
で動く。簡単。

レベルアップのゲームデザイン 読書メモ LEVEL5

「レベルアップ」のゲームデザイン ―実戦で使えるゲーム作りのテクニック

「レベルアップ」のゲームデザイン ―実戦で使えるゲーム作りのテクニック

LEVEL5 3つのC その1-CHARACTER

ゲームデザインプリプロダクションの初期に確立すべき3つの土台を「3つのC」と命名している。

  1. Character
  2. Camera
  3. Control

キャラクターをデザインする上で重要なルールは
「外見はゲームデザインに合わせる」

プレイヤーに個性を反映させることでキャラクターに親近感を持たせることができる。名前の変更や衣服のカスタマイズ、性格の反映などできればそのキャラクターの事を気にかけるだろう。

ほとんどのテレビゲームキャラクターは背後から見られるものなので、動きを表現するものを背中につけることが重要。例えばララ・クラフトのポニーテールや、バットマンのマントなど。

アクションゲームにおいて、キャラクターを設計するにあたり下記のようなメトリクスを決める必要がある。

  • 身長
  • 通路の幅
  • 歩きの移動量
  • 走りの移動量
  • ジャンプの移動量
  • ジャンプの高さ
  • 近接攻撃の射程距離
  • 飛び道具攻撃の射程距離


「歩くことはゲームプレイではない!」
ただ歩くだけの場面でも、おもしろくなるようにすべきである。

gruntでjshintとjscsのlintをタスク化

jshintのチェックルールを.jshintrcに、jscsのチェックルールを .jscsrc とかで用意しておき、下記をGruntfile.js に追加する。

  grunt.initConfig({
    jshint: {
      files: [
        'lib/**/*.js',
        'test/**/*.js',
        '*.js',
      ],
      options: {
        jshintrc: '.jshintrc'
      }
    },
    jscs: {
      src: [
        '*.js',
        './**/*.js'
      ],
      options: {
        config: ".jscsrc",
      }
    }
  });

  grunt.loadNpmTasks('grunt-contrib-jshint');
  grunt.loadNpmTasks("grunt-jscs");

  grunt.registerTask('lint', ['jshint', 'jscs']);

これで grunt lint を実行すれば OK.