网演高层钦州
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 

220 lines
6.5 KiB

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
using AX.InputSystem;
using System;
/// <summary>
/// 鼠标指针管理类【单利模式】(游戏中,不同状态对于不同指针)
/// </summary>
public class CursorManager : MonoBehaviour
{
/// <summary>
/// 私有静态成员
/// </summary>
private static CursorManager instance;
private GameObject cursor;
private GameObject replayCursor;
private Transform cursorParent;
private DateTime t1;
private DateTime t2;
/// <summary>
/// 外部访问,公共静态成员(单例)
/// </summary>
public static CursorManager GetInstance
{
get { return instance; }
}
void Start()
{
//赋值单例
instance = this;
Cursor.visible = false;
cursorParent = GameObject.Find("Canvas").transform;
cursor = Instantiate(cursorNormal, cursorParent) as GameObject;
//添加层控制
Canvas c;
if (!cursor.GetComponent<Canvas>())
{
c = cursor.AddComponent<Canvas>();
}
else
{
c = cursor.GetComponent<Canvas>();
}
c.overrideSorting = true;
c.sortingOrder = 30002;
if (GameSettings.othersSettings.playState == PlayState.Playing)
{
cursor.SetActive(false);
}
}
private void Update()
{
SetNormal();
Cursor.visible = false;
if (GameSettings.othersSettings.playState != PlayState.None)
{
if (GameSettings.othersSettings.playState == PlayState.Playing)
{
if (replayCursor)
{
replayCursor.SetActive(true);
}
if (!cursor.activeSelf)
{
if (Input.GetAxis("Mouse X") != 0 || Input.GetAxis("Mouse Y") != 0)
{
cursor.SetActive(true);
t1 = DateTime.Now;
}
}
else
{
t2 = DateTime.Now;
if ((t2 - t1) >= new TimeSpan(0, 0, 0, 3, 0))
{
if (Input.GetAxis("Mouse X") == 0 && Input.GetAxis("Mouse Y") == 0)
{
cursor.SetActive(false);
}
}
}
}
else
{
if (replayCursor)
{
replayCursor.SetActive(false);
}
if (cursor)
{
cursor.SetActive(true);
}
}
}
}
/// <summary>
/// 正常状态指针图
/// </summary>
public GameObject cursorNormal;
public Sprite cursorNormalSprite;
/// <summary>
/// 单击状态指针
/// </summary>
// public Sprite cursorClick;
public Sprite cursorClickSprite;
/// <summary>
/// 对话状态指针图
/// </summary>
//public Texture2D cursorNpcTalk;
/// <summary>
/// 攻击状态指针图
/// </summary>
//public Texture2D cursorAttack;
/// <summary>
/// 锁定状态指针图
/// </summary>
//public Texture2D cursorLockTarget;
/// <summary>
/// 拾捡物品状态指针图
/// </summary>
//public Texture2D cursorPick;
/// <summary>
/// 指针默认点击热点位置(指针左上角)
/// </summary>
//private Vector2 hotspot = Vector2.zero;
/// <summary>
/// 指针类型(Auto:自动选择)
/// </summary>
//private CursorMode mode = CursorMode.Auto;
public Sprite AutoLiftArm;
/// <summary>
/// 设置默认指针显示图
/// </summary>
public void SetNormal()
{
//cursor.GetComponent<RectTransform>().anchoredPosition = new Vector2(Input.mousePosition.x, Input.mousePosition.y - Screen.height);
Vector3 pos;
if (RectTransformUtility.ScreenPointToWorldPointInRectangle((RectTransform)cursorParent, Input.mousePosition, cursorParent.gameObject.GetComponent<Canvas>().worldCamera, out pos))
{
cursor.GetComponent<RectTransform>().position = pos;
}
//光标始终悬浮在UI上
cursor.transform.SetAsLastSibling();
cursor.GetComponent<Image>().sprite = cursorNormalSprite;
}
public void SetAutoLiftArm()
{
cursor.GetComponent<Image>().sprite = AutoLiftArm;
}
/// <summary>
/// 点击UI时的指针图
/// </summary>
public void SetClick(CmdArgs arg)
{
//if (!replayCursor)
//{
// replayCursor = Instantiate(cursorNormal, cursorParent) as GameObject;
// replayCursor.GetComponent<Image>().sprite = cursorClick;
// replayCursor.GetComponent<RectTransform>().anchoredPosition = new Vector2(arg.currentCursorPos.x, arg.currentCursorPos.y - Screen.height);
//}
//else
//{
// replayCursor.GetComponent<Image>().sprite = cursorClick;
// replayCursor.GetComponent<RectTransform>().anchoredPosition = new Vector2(arg.currentCursorPos.x, arg.currentCursorPos.y - Screen.height);
//}
if (!replayCursor)
{
replayCursor = Instantiate(cursorNormal, cursorParent) as GameObject;
Canvas c;
if (!replayCursor.GetComponent<Canvas>())
{
c = replayCursor.AddComponent<Canvas>();
}
else
{
c = replayCursor.GetComponent<Canvas>();
}
c.overrideSorting = true;
c.sortingOrder = 30001;
replayCursor.GetComponent<Image>().sprite = cursorClickSprite;
Vector3 pos;
if (RectTransformUtility.ScreenPointToWorldPointInRectangle((RectTransform)cursorParent, arg.currentCursorPos, cursorParent.gameObject.GetComponent<Canvas>().worldCamera, out pos))
{
replayCursor.GetComponent<RectTransform>().position = pos;
}
}
else
{
replayCursor.GetComponent<Image>().sprite = cursorClickSprite;
Vector3 pos;
if (RectTransformUtility.ScreenPointToWorldPointInRectangle((RectTransform)cursorParent, arg.currentCursorPos, cursorParent.gameObject.GetComponent<Canvas>().worldCamera, out pos))
{
replayCursor.GetComponent<RectTransform>().position = pos;
}
}
}
}