カーソルのあれこれ

Unityでマウスカーソルを変えたい場合に調べて分かったあれこれを。

まずはスクリプトで変更する方法。まあドキュメントを見れば大体はわかる。
http://docs-jp.unity3d.com/Documentation/ScriptReference/Cursor.SetCursor.html

それぞれの引数について説明すると、まずtextureは適当なTexture2Dのテクスチャを指定する。ただし、テクスチャをインポートするときにTexture TypeをCursorにしておかないと、なんか気持ち悪い画像になったりするので素直にそうした方がいいと思う。
また、カーソルをOSのものに戻したい場合はnullを渡せばよい。

次に順番は前後するがcursorModeについて。この引数はハードウェアカーソルを使うか、ソフトウェアカーソルを使うかというものでCursor.Auto(ハードウェア)かCursor.ForceSoftware(ソフトウェア)のどちらかを指定する。ハードウェアカーソルはOSがレンダリングして、ソフトウェアカーソルはUnity側がレンダリングするらしい。だから、ハードウェアカーソルを使っているなら、ゲームのフレームレートが落ちててもマウスカーソルだけはぬるっと動くはず。
ソフトウェアカーソルを選ぶ理由としては例えばWindowsだとカーソルの画像に32*32ピクセルまでしか使えないから、それより大きい画像を使いたいときなどに使うらしい。ちなみに、32*32ピクセルより小さい画像や大きい画像を使うと、自動的に縮小されたり拡大されたりするようだ。ただし、そうすると、hotspotで指定する座標が狂ってくるようなので、32*32ピクセルより小さな画像を使う場合は透明色で塗りつぶしてでも、無理矢理32*32ピクセルにしておいた方がいい気がする。
他にハードウェアカーソルを使うとどんな障壁があるかはよく分からない。

最後にhotspotについて。これはつまり、画像をマウスの座標に対してどの位置に表示するかというのをVector2で指定するという引数。このときに指定する数字は画像の左上を始点に何ピクセルずらすかというもので、例えば
Cursor.SetCursor(cursor, Vector2.zero, CursorMode .Auto)
とすればマウスカーソルの位置にその画像の左上を基準に描画されるし、照準をカーソルにしたいときなどマウスカーソルの位置を画像の中心にしたい場合は
Cursor.SetCursor(cursor, new Vector2(16, 16), CursorMode .Auto)
という風にするとよい(ただしこれは32*32ピクセルの画像を使っている場合)。
また、Vector2(1.1f, 1.1f)というように数値が小数のベクターを渡しても特にエラーは出ないが、多分意味ないと思う。

ここまでは、スクリプトで変更する場合だが、デフォルトでカーソルを設定することもできる。
メニューバーから Edit -> Project Settings -> Player を選択しPlayerSettingsを開けば、Default Cursorという欄があるのでそこにドラッグアンドドロップで画像を設定すれば変更できる。

参考
Cursor API – Unity Blog
Cursor.setCursor hotSpot to center of image - Unity Answers