個人的勉強メモ置き場

プログラミングど素人のメモ置き場

カーソルをデフォルトから変更する

f:id:zykb:20200804012213g:plain

Unityの設定からカーソルを変更する


編集 → プロジェクト設定 → Playerからデフォルトのカーソルに用意した素材をつける
カーソル素材のテクスチャタイプをカーソルに変更するのを忘れずに

f:id:zykb:20200804012733p:plain

この場合はゲームスタート時からずっと指アイコンとなるので、特定条件下でのみ変更したい場合はスクリプトから変更する

スクリプトからカーソルを変更する


スクリプトから変更する場合には
Cursor.SetCursor(Texture2D, hotspot, CursorMode)を使う

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class CursorSelect : MonoBehaviour
{
    public Texture2D handCursor;

    void Update()
    {
        if(Input.GetMouseButtonDown(0))
        {
            Cursor.SetCursor(handCursor, Vector2.zero, CursorMode.Auto);
        }
    }
}


これを適当なGameObjectにアタッチしてインスペクターからカーソル素材をつければOk


f:id:zykb:20200804020732g:plain

スクリプトからカーソルを変更することができた

特定オブジェクト上でのみカーソルを変更する


前回のコレに追加して紙ごみの上でのみカーソルを変更してみる

zykbgame.hateblo.jp

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.EventSystems;

public class CursorSelect : MonoBehaviour, IPointerEnterHandler, IPointerExitHandler
{
    public Texture2D handCursor;

    public void OnPointerEnter(PointerEventData eventData)
    {
        Cursor.SetCursor(handCursor, new Vector2(handCursor.width / 2, handCursor.height / 2), CursorMode.Auto);
    }

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


OnPointerEnterとOnPointerExitでマウスがゲームオブジェクト範囲内外での挙動を定義できる

OnPointerEnter
ポインターがこの EventTrigger に関連したオブジェクトに入るとき、EventSystem に呼び出されます。

OnPointerExit
ポインターがこの EventTrigger に関連したオブジェクトを出るとき、EventSystem に呼び出されます。

また、hotspotではテクスチャの左上からのオフセット距離を設定できるのでVector2.zeroよりもカーソルの中心を画像の真ん中に設定するといいかもしれない。特にFPSゲームのレティクルとか


f:id:zykb:20200804023917g:plain