我有一个问题,我想要得到当前的光标,并获得它作为一个texture2D在统一。
当我说当前游标时,我指的是用户得到的当前游标。例如,如果用户将他的光标更改为cat,我希望在Unity中具有相同的cat游标。这就是为什么我不只是在网上搜索默认光标的原因。
我试着在谷歌上搜索这个,但我得到的只有这,它是在2009年发布的,代码不起作用(如果你想知道的话,它说“句柄不代表图标”)。
发布于 2017-10-25 09:08:23
发布于 2017-10-23 15:37:48
我想要遵循的步骤是:
我看到的问题是,这将改变从OS到OS,所以你将很难使它与所有的操作系统兼容。
我无法读取当前的活动光标,所以我的答案是不完整的。也许有人能完成缺失的事情:
//This is the part I am not sure how to complete
//String currentCursor =
//Here is where Windows store the cursors, you need to point to the one the
//user is using
String path = "C:\Windows\Cursors"+currentCursor;
//Here you load that image as a texture
Texture2D cursorTexture = new Texture2D(16, 16);
cursorTexture.LoadImage(File.ReadAllBytes(path));
public CursorMode cursorMode = CursorMode.Auto;
public Vector2 hotSpot = Vector2.zero;
//You apply the texture to the cursor in Unity
void Start()
{
Cursor.SetCursor(cursorTexture, hotSpot, cursorMode);
}也许您可以找到这里如何使用类似的方法完成第一步,但是我不知道。
发布于 2017-10-23 15:53:50
任何使用win32 API的解决方案都是依赖于平台的,不能在其他平台上工作。因此,您可以添加您自己的自定义游标管理器。
//container for cursor data
[System.Serializable]
public struct CustomCursor
{
public Texture2D Texture;
public Vector2 HotSpot;
public CursorMode Mode;
}
//container for all cursor you used in you project
[System.Serializable]
public class CursorsHolder
{
[SerializeField]
private CustomCursor defaultCursor;
[SerializeField]
private CustomCursor cursorA;
[SerializeField]
private CustomCursor cursorB;
[SerializeField]
private CustomCursor cursorC;
public CustomCursor DefaultCursor { get { return defaultCursor; } }
public CustomCursor CursorA { get { return cursorA; } }
public CustomCursor CursorB { get { return cursorB; } }
public CustomCursor CursorC { get { return cursorC; } }
public void InitializeDefault(CustomCursor defaultCursor)
{
this.defaultCursor = defaultCursor;
}
}
public interface ICursorHandler
{
Texture2D CurrentCursor { get; }
void SetCursor(CustomCursor newCursor);
}
//Manager that cached last setted cursor
public class CursorHandler
{
private CustomCursor currentCursor;
public CustomCursor CurrentCursor { get { return currentCursor; } }
public void SetCursor(CustomCursor newCursor)
{
currentCursor = newCursor;
Cursor.SetCursor(currentCursor.Texture, currentCursor.HotSpot, currentCursor.Mode);
Debug.LogFormat("{0}", currentCursor.Texture);
}
}
//Main script for cursor management usage
public class MyScript : MonoBehaviour
{
[SerializeField]
private CursorsHolder cursorsData;
ICursorHandler cursorHandler = new CursorHandler();
private void Awake()
{
cursorsData.InitializeDefault(new CustomCursor() { Texture = PlayerSettings.defaultCursor, HotSpot = Vector2.zero, Mode = CursorMode.ForceSoftware });
cursorHandler.SetCursor(cursorsData.DefaultCursor);
}
private void Update()
{
if (Input.GetKeyDown(KeyCode.A))
{
cursorHandler.SetCursor(cursorsData.CursorA);
}
if (Input.GetKeyDown(KeyCode.B))
{
cursorHandler.SetCursor(cursorsData.CursorB);
}
if (Input.GetKeyDown(KeyCode.C))
{
cursorHandler.SetCursor(cursorsData.CursorC);
}
if (Input.GetKeyDown(KeyCode.D))
{
cursorHandler.SetCursor(cursorsData.DefaultCursor);
}
}
}您不能忘记在播放机设置中分配默认游标。
https://stackoverflow.com/questions/46891775
复制相似问题