みーのぺーじ

みーが趣味でやっているPCやソフトウェアについて.Python, Javascript, Processing, Unityなど.

SpriteでLookAtがうまく動作しない時の回避策

Unityではtransform.LookAt(target)を使えば指定した方向を向くように向きを設定できますが,2Dのspriteではうまく指定した方向を向いてくれません (Unity 4.5.1で確認).

なので,LookAtを2Dで実装して回避するスクリプトをメモしておきます.

    # Boo script
    dv as Vector3 = target.position-transform.position
    angle as single = Mathf.Atan2(dv.y, dv.x) * Mathf.Rad2Deg
    transform.rotation.eulerAngles = Vector3(0, 0, angle)

targetは対象となるtransformです.transformは当たり前ですが自分のtransformです.Atan2で角度を計算して,eulerAnglesで指定しているだけです.

以下に,マウスでクリックしたところに餌を落として,それを魚が食べる簡単なサンプルを作りました.上記のスクリプトを使って魚の向きを餌の方向に指定しています.

サンプル

そのうちLookAt()がVector2にも拡張されることを期待して,今日もAtan2()のお世話になる.