万年素人からHackerへの道

万年素人がHackerになれるまで殴り書きするぜ。

Boo Unity

Third Person ControllerをBooにしようといじったときに

public walkMaxAnimationSpeed as float = 0.75

BCE0018: The name 'float' does not denote a valid type ('not found'). って怒られた
foatは書けないのか

今後チェックしたい

http://www.reddit.com/ (http://ja.reddit.com/r/ja 日本語)
http://news.ycombinator.com/

JavaScript ゲーム作成勉強会 Vol2

■ngCore ソーシャルゲームゲームエンジン
HTMLも今後対応
今は/app.apkを使った配信で
ソーシャル用API
マルチプラットフォーム
バージョン管理
ビルドサーバに対しHTTPでアクセス
ブラウザ起動してアクセスすればできる
デバッグがやりやすい

・グラフィックス
将来3Dで
・ファイルの読み書き
 ファイル操作、Key/Valueストア

コンテンツのDL
box2d
端末の回転、加速度

commonjsのようにrequreがサポートされている
→ファイル分割の整理

クラスにサブクラスをよんで
オブジェクト指向サポート
オブジェクト指向に慣れて人はわかりやすい

JSのエンジン
gu2sprite、setImage
シリアライズされた命令がJS内で作られる

画面タッチ、センサー
emitter→イベントハンドラ用の関数

Canvasベースのゲーム出したことはあるがそれ以上早いパフォーマンスが出ている
nodeJS

Webだけだとnodejsとブラウザで大丈夫
iOSシミュレータ、AndroidSDKもいることもある

OSはMacOSXSnow Leopard LinuxWindowsの成功事例あり)

◯今後 まだまだ機能拡張
パフォーマンスアップ
HTML5への対応
3D対応
ngServer・・JSでゲームサーバ
ngBuilder・・統合環境
ngGO・・ライブラリ

スクリーン解像度差吸収
ピンチイン・アウトとドラッグ可能な2Dカメラ
アセット管理・動的アセット


・まとめ
アーキテクチャ
ネイティブ+JS。エンジン
ランタイムとセットで配布もできるラインタイムだけ配布
ゲムを個別に配信することも可能

v8に載せ替え
Appleの規約に引っかからないようにUIWebViewを使っている
AndroidiOSの見た目の差 速度が違う Androidの方がパフォーマンスがいい
速度以外はあまり差がない
デバッグ方法
→リモートデバッグ ngBuilder(出たばかり)
→ブラウザのデバッグが一番便利

・ngCoreを導入した理由
比較して優れているだけでなく、ngMocoのコンテンツ力
超大規模だと

・ユーザへの良さ
趣味でも使いたいくらい。
コンパイルしないで勝手にBuildで動くから
Androidの機種によってははmediaサーバーが落ちたりする

■IMPACT入門(@Seasons)
埼玉勉強会のスライド+最新情報 スライド
Seasons.NETのBlog
スクエニのタイトル3つ
ライター兼務
有償$99のライセンスが必要(買い切り)
githubに最新コードのアクセスもも洗える
2Dのゲーム開発フレームワーク
HTTML5+JavaScriptで開発
高度なレベルエディタ付属
連携ツール
「IMPACT JavaScript」で検索したらいい
1.18aが最新

レベルエディタ(Weltmeister
→ブロックを塗りつぶしたところがコリジョンになる)
GUIツールではなく、HTML5が動くブラウザでつかうツール(推奨:Crome)

debagが最近追加した

・連携ツール
Lawnchair JSONベースのドキュメントストア
Tapjs ゲームプラットフォーム提供 自分で作った
appMobi web上でiOSAndroidアプリ作成
Zeewee.com crossplatform用appstore
Playtomic 解析
TweenJS(Unityみたいなアニメーション)、box2d、directorjs(シーン管理、cocos2dのCCSceneDirectorの人向け)

開発に必要なもの
 PC、WindowsLinux
 XAMPP(Apache
 ブラウザ

テキストエディタ
 textmate(有償:4500 軽いRailsの人必須みたい カスタマイズしたすい)
 →バンドルtmbundle(IMPACT関係の色付け)

Komodo Edit
起動が少し遅い
保管をデフォルト完備
カスタマイズ可能
IMPACTが動画でも使われている
本人はvimをよくつかう

開発ワークフロー
素材作成→Entityの作成→レベル作成→テストプレイ

・素材作成
ドット絵を使うときは最適なフレームワーク
EDGE(無償)でドット絵
SimpleDotX(Lionでも動く)

・エンティティの作成
ngCore記述に似ている
先にrequireで導入
init(メンバ変数名、パラメータ)→
ig.Entityを継承
必要なパラメータを実装
名前はEntity + ファイル名
update 初期化コード
update 毎フレーム処理するコード
当たり判定

・レベル作成
マウスでドラッグして塗り部していく
グラフィカルのイベント

・テストプレイ
チューニング:debug用API
 ig.log 出力したいメッセージ
 ig.show パラメータ名、出力したいパラメータ
 ig.mark マーキング名
main.js
1.14 1.18

配布(Publish)
 Tools back.sh
 game_min.jsに結合される(全てのソースコードを追加)

iOS/IMPACT
ソースコードiOSでそのまま利用()
OpenGLで描画
OpenALでサウンド処理
30〜60fps
UIKitなどの
アーキテクチャ JavaScriptCoreの評価エンジン
OpenGLOpenAL

iOSIMPACT XcodeProject→.app AppStoreに配布できる

iOS移植への注意点
plugin読み込み
スクロールメソッド
ig.game.screenPos(x,y) 1.17は書き換え
ig.game.screen(x,y)1.18はそのまま
解像度の変更iPadiPhone
背景描画のパフォーマンス
マップのプリレンダリング有効
チャンクサイズ
サウンド
 SE:caf formatに変更
 BOM:acc fromat
512KB以下の場合はOpenAL
それ以上はBGMと認識 AVAudioPlayer
SoftwareDesign
2011年9,10月号

スマホ向けCanvasゲームの作り方(@chikathreesix)
北澤良
フロントエンドエンジニア
DeNA
FPゲームをどんどんSP化
海賊トレジャー
住み着き妖精セトルリン

スマホブラウザゲームをつくる
CSS3を駆使する
Canvasを駆使する

・メリット
 簡単
 GPUアクセラレーション
 3Dも使える

・デメリット
 アニメーション

Canvasを駆使する
・メリット
自由度高い
・デメリット
 面倒
 CSS3ほどのパフォーマンスがない

CSS3向き
・シンプルなアニメーション
・HTMLベースで作れるもの

Canvas向き
・複雑なアニメーションがある
・衝突判定などが必要なアクションゲーk無


Canvasとは?
 画像描画のためのHTML

Canvas基礎
・移動


・拡大・縮小

・回転
rotateやtranslateをすると記憶されれてしまうので
sava/restoreが必要
他の描画に影響されないようにする

ループを1つ作り、前回の描画をクリアした後、新しい描画をお粉

この処理が一秒間に何度も行われるか
FPS(Frame Per Second)

setInterval/setTimeoutの間隔は信用出来ない

Canvasパフォーマンス

GalaxGS
iPhone3 CanvasAPIを叩く
3GSよりiPhone4の方が遅い
実際にディスプレイに表示するのが遅い

Canvas高速化
→drawImageで拡大は重い

拡大されている画像を使ったほうが軽い
拡大時のパフォーマンス差が顕著
→なるべく拡大はさける
一度canvasに描画してそれをdrawImageする
座標に小数を用いない
Math.floar(0.01)→0.01

マルチデバイス

基本的な挙動は同じですが
◯Android2.1におけるバグ
drawImageすると基本的に座標やサイズが
screen.widthは320倍される??
scaleは二回適用される
rotateは意味不明
→回転は諦める

フレームベース
setInterval/setTimeout内でプロパティを目標値に向かって

どの環境でも同じ速度を保つには

タイムベース
setInterval/setTimeout内で経過時間を取得して、適切な値を設定する
描画が間引かれる

タイムベース
AS3?
表示ツリー
イベント伝播モデル
アニメーション
アニメーション(単一アニメーション、キーフレーム)

iPhone4でFPS20前後



Animationわからない Unity

AnimationとAnimationsの違い

http://unity3d.com/support/documentation/Components/class-Animation.html
Animationはデフォルトアニメーションのようだ。

http://unity3d.com/support/documentation/Components/animeditor-AnimationEvents.html
アニメーションビュー(Window→Animation [command+6])から、特定の秒数でキーフレームを打って、指定の関数を実行させる。

ふっとばし Unity

http://forum.unity3d.com/threads/32666-fly-away-in-hit-direction

enemy.rigidbody.AddForceAtPosition(punchPosition, punchForceVector);

・Rigidbody.AddForceAtPosition
http://unity3d.com/support/documentation/ScriptReference/Rigidbody.AddForceAtPosition.html

AddForceもある
http://forum.unity3d.com/threads/37314-Solved-AddForce-vs-AddForceAtPosition

順番 Unity

Awake()→Start()→Update()2回→OnGUI()

function Start () {
    print("Start()");
}
function Update () {
    print("Update()");
}
function OnGUI () {
    print("OnGUI()");
}
function Awake () {
    print("Awake()");
}

GUIText色替えメモ Unity

var hogeGui : GUIText;
hogeGui.material.color = Color.black;

Rigidbodyの物体を固定したい Unity

インスペクタでgravityで0にして重力をなくしたり、Massを大きくしても、
他の物体にぶつかるとずれるのを固定

function Update () {
	this.transform.rotation =  Quaternion.identity;
	this.transform.position.y = 8;
}

今回は高さ8に固定

当たり判定系 Unity

// OnTrigger系
function OnTriggerEnter(otherObject: Collider) {}
function OnTriggerStay(otherObject: Collider) {}
function OnTriggerExit(otherObject: Collider) {}

// OnCollision系
function OnCollisionEnter(info : Collision) {
function OnCollisionStay(info : Collision) {}
function OnCollisionExit(info : Collision) {}


http://blog.livedoor.jp/akinow/archives/52183427.html

このサイトを短くまとめる。

・人物
 Player
 Bullet
 Enemy

・OnTrigger〜〜
enemyBulletScript.js をBulletに適用

Enemy(相手)のオブジェクトColliderコンポーネントには
”かならずtrigger”にチェックが入っていることが条件。

gameObjectだけ記載するとそれを適用している物体自体。

Destroy (this. gameObject);
↑↓同じ
Destroy (gameObject);
otherObject.gameObject.SendMessageUpwards()

これでぶつかったゲームオブジェクト(今回はEnemy)のメソッドを実行させられる

ApplyDamageはEnemyに適用されている関数。


Instansiateで使用する前に

if (プレハブ名) {
}

こうするとプレハブがアサインされなかった場合にエラーにならない。
※ただし、nullはダメ

OnCollision〜はOnTrigger〜と使用法は似ている。
返ってくる?というか引数として入った値がCollisionInfoなのが異なる。

function OnCollisionEnter(collision : Collision) { // ←このcollisionが違う。
    var contact : ContactPoint = collision.contacts[0]; // 接触したポイント座標
    // collision.contacts[0].normalで法線がとれる?