× [PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。 |
|
Screen.width
Screen.height は、端末のサイズに依存する。 また、Unity上実行では、Gameビューのサイズに応じて変わる。 マウス位置を取得したいときは、 Input.mousePosition() で取得できるが、これはScreenのサイズ。つまり端末やGameビューサイズによって変わる。 そこで、想定ゲーム画面サイズに変換するには
呼び出し側は、 タッチから取得する場合(スマホ実機用。Unity上では反応しない)
マウスで取得する場合(Unity上でも実機上でも動く)
のような感じになる。 このとき、シーン内のカメラやテクスチャ等全てのオブジェクトが左下を(0,0)基準で置いてあること。 Unity空間の原点が、カメラ(つまりスクリーン)の中心の場合は、上の関数で言うと、画面半分だけ戻り値のVectorの値を足す(右上に移動する)ことが必要。 |
2D設定でプロジェクトを作成。
テクスチャは、画像ファイルをそのままアセットに入れて、シーンに配置してやればよい。 Transitionのx,y,zは全部0にしておけば、中心に配置される。 このとき、 Pixels per Unit の項目が、デフォルトで「100」になっている。 つまり、テクスチャの100pixelがUnity上で1メートルになるサイズで配置されている訳だ。 ということは、640x1136の画像なら 6.4m x 11.36m の大きさでUnity空間に置いてあることになる。 ここで、カメラ(もちろん平行投影=Orthographicになっている。2D設定でプロジェクトを作っていれば。)の設定も行う。 カメラが映す範囲は、 Orthographicの下の Size で指定する。(スクリプト上では、orthographicSize というプロパティ) これは、カメラが映す範囲の高さの半分の値。 なので、1136pxlの場合、568になる。 ただし、これはメートルであることに注意。 さっき、Pixels per Unitが100だったので、 実際に指定する値は 「5.68」 になる。 Pixels per Unitを1にして、dots by dotにしたほうが便利なのでは? →全体がでかくなり過ぎ(640m x 1.136km)て、あたり判定とか演算が面倒? とりあえず同じことだと思うので、このままでいいんじゃない? |
アニメーションクリップに入っているカーブを取得する方法。
とても発見しにくいが、AnimationUtilityというクラスにある。 AnimationClipCurveData[] curveData = AnimationUtility.GetAllCurves(srcClip); foreach (AnimationClipCurveData curveDatum in curveData) { AnimationCurve newCurve = curveDatum.curve; print("CURVE: " + curveDatum.type + "," + curveDatum.propertyName); という感じで使う。 |
DrawCallを減らすために、いくつかのメッシュ(ひとまずキューブ)をまとめて1つのオブジェクトにするスクリプトを作ってみる。
キューブその他のオブジェクトを作ると(GameObject->Create Others -> Cubeとか)、 コンポーネントとしては - Transform - Cube(Mesh filter) - Cube Collider - Mesh Renderer の4つがついたゲームオブジェクトが生成される。 TransformとColliderは置いといて、MeshFilterにまず注目。 見ると、Meshというプロパティがあり、Cubeというメッシュが入っている。 ここをクリックすると、プロジェクト内にあるメッシュの一覧が別画面で出る。ここから選んだメッシュがこのゲームオブジェクトになるわけ。 最初はたぶん、Cube,Sphere,Capsule,Plane,Cylinder の5つがある。 ここからメッシュを選んだらゲームに映るわけ。 公式のリファレンスを見てみる。 http://unity3d.com/support/documentation/ScriptReference/Mesh.html Meshクラスには、vertex配列がある。 同じ長さのnormal, tex coords0, tex coords1, color, tangent配列がある。(これらは任意) で、三角形はvertex配列へのインデックスとして表現する。 コンバインすること自体は、便利なことに関数が用意されてる。 http://unity3d.com/support/documentation/ScriptReference/Mesh.CombineMeshes.html もうこのサンプルをコピーして書くだけ。 マテリアルさえ一緒なら、見た目はまったくそのまま変わらないし、DrawCallも1回になるはずだ。 |