Input」タグアーカイブ

Unityでマウスカーソルの画像を変更する方法

マウスカーソルの画像を(一時的に)変更したい場合はCursor.SetCursorを使うと実装できるみたいです。

使い方

例えば、カーソルが特定のエリアにある時にカーソル画像を変更したい場合は次のような感じです。

public class Example : MonoBehaviour, IPointerEnterHandler, IPointerExitHandler
{
  public Texture2D cursorTexture;

  public void OnPointerEnter(PointerEventData eventData)
  {
    Cursor.SetCursor(cursorTexture, Vector2.zero, CursorMode.Auto);
  }

  public void OnPointerExit(PointerEventData eventData)
  {
    Cursor.SetCursor(null, Vector2.zero, CursorMode.Auto);
  }
}

これとUI.Buttonを組み合わせれば、ボタン上にカーソルが来た時にカーソル画像を変更したりできるみたいです。

リンク

Unity – Scripting API: Cursor.SetCursor(Texture2D,CursorMode)
https://docs.unity3d.com/ScriptReference/Cursor.SetCursor.html

UnityでInput.GetKeyを使った操作

Unityでキーボード・ゲームパッドを使ってキャラクターを操作したい場合、

if (Input.GetKey("forward")) {
  transform.position += Vector3.forward * Time.deltaTime;
}

のような感じでスクリプトを書くと思います。

ここで使う"forward"とかの文字列は

[Edit] » [Project Settings]

にある「Input」の項目から設定できるそうです。

文字列を変更したり、感度を設定したりもできるので、入力関係で細かく設定したい場合は試してみてください。

ScreenToWorldPointでクリックした位置のWorld座標が取得できない場合

マウスでクリックした位置に対応するWorld座標を取得したい場合、Camera.ScreenToWorldPointを使うと思いますが、たまに正しい値が取得できないことがあります。

Camera.main.ScreenToWorldPoint (Input.mousePosition);

そういう場合は、CameraのProjectionOrthographicに設定してみるとうまくいくこともあるみたいです。

ちなみに、Perspectiveで正しい値が取得できない理由はよく分かりませんでした。

リンク

Unity で ScreenToWorldPoint が常に同じ座標を返す件 – nirasan’s tech blog
http://nirasan.hatenablog.com/entry/2014/03/28/093924

Unity – Scripting API: Camera.ScreenToWorldPoint
https://docs.unity3d.com/ScriptReference/Camera.ScreenToWorldPoint.html