パスワードを忘れた? アカウント作成
14298778 journal
日記

yumeの日記: Unity学習 #5 2D Visibility

日記 by yume

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();

……動く、動くが……。
なんか惑星軌道みたいになっちゃったぞ……。

typodupeerror

犯人はmoriwaka -- Anonymous Coward

読み込み中...