yumeの日記: Unity学習 #5 2D Visibility
Console Adventure
エンディングの曲もできたので、mp3同梱版zipをバージョン1.1として更新。
--
2D Visibility
バージョン管理
まずは下準備として、Git(SourceTree)でバージョン管理できる状態にしていこう。
Unishar-ユニシャー曰く、
・ignoreしなきゃいかんものがあるので、ignoreする
やってみたらうまくいった。
さっそく最初のオブジェクトを作ってみる。
Playerオブジェクト
・PlayerとBackGroundスプライトをIllustratorで簡易的に作る
・それぞれをGameObjectとしてシーンに配置
・Playerに移動能力を追加する。
移動能力はとりあえずマウス追従でいいかな。
TASOGARE GAMES BLOG曰く、
・入力をとるのはInputクラス
・マウス座標はmousePosition
・mousePositionも、transform.positionもVector3
>ってことは、単純に毎フレームtransform.positionにmousePositionを代入すればいいかな?
でもなんでVector3なんだろう。Vector3ってことは多分3つのfloatが入ってるってことで、マウスの座標はXとYの2次元で成立するのに?
Unityの世界はXYZの3Dが原則だからかな。
一旦動かしてみたがPlayerがどこかに飛んでいるらしく、まったく姿が見えない。困る。
UIで画面上に現在地を表示しよう。Vector3をStringに変換するにはVector3.ToString()
表示してみると、実際のPlayerのポジションは左下なら0,0に、右上なら(今のテストプレイ枠だと)1600ちょっとになる。
ここで気づいたが、プレイヤーの座標系はどこが原点なんだ。
もしかして中央が0,0?だとしたら実際のプレイヤー位置はとんでもないところになってることになる。
Unity世界の座標とマウス座標は違う原点で動いてるわけか。
かさたな日記曰く、
Vector3 v = Camera.main.ScreenToWorldPoint(Input.mousePosition);
で変数vにスクリーン座標に変換した画面上の位置を取得、らしい。
Vector3 updatePosition = Camera.main.ScreenToWorldPoint(Input.mousePosition);
updatePosition.z = 10.0f;
transform.position = updatePosition;
myPositionText.text = (transform.position).ToString();
で動いた。z軸を10.0fにしないと、表示されない(指定しないとなぜか-10.0に行ってしまう)
うーむ……まぁいいか。
試しにColliderの設定を一通りやるが、まぁ当然Playerは壁を貫通できる(Scriptで無理やり動かしてるからね)
本当は「マウスの位置に向かって、力で毎フレーム引っ張られていく」みたいな処理にすればいいんだろうけど。
試しにやってみるか。
えーと、力を追加するのはAddForce。AddForceはxとyからなるVector2を渡せば、1,0なら右向きの力が入っていく、というような感じだったな。
そんで、Playerの現在地はtransform.position、マウスのUnity世界での現在地はさっきの通りで、
Vector2 (マウスの現在地 - PLayerの現在地)でマウスと自分のポジションの差分をとれる。
大きくてもだいたい-10~10の範囲だ。だからこれをそのままAddForceに入れてやれば……。
ついでにVector3からVector2へもちゃんと変換しよう。そしたらz座標をいちいちUpdateする必要はない。
aimPosition = new Vector2(Camera.main.ScreenToWorldPoint(Input.mousePosition).x, Camera.main.ScreenToWorldPoint(Input.mousePosition).y);
updatePosition = aimPosition - new Vector2(transform.position.x, transform.position.y);
myBody.AddForce(updatePosition);
myPositionText.text = (transform.position).ToString();
……動く、動くが……。
なんか惑星軌道みたいになっちゃったぞ……。
Unity学習 #5 2D Visibility More ログイン