デフォルトだとタッチ操作が必要になる。環境によってはタッチ操作用の磁石がないので修正。
まずタイマー用の変数と、クリック動作させるかのパラメーターを追加。
float clickTimer = 0f;
float clickTimerMax = 1f;
public float ClickTimer
{
get
{
return clickTimer;
}
set
{
clickTimer = value;
}
}
public float ClickTimerMax
{
get
{
return clickTimerMax;
}
set
{
clickTimerMax = value;
}
}
[SerializeField]
bool GazeTimeClickMode;
あとはUpdateCurrentObjectを書き換えて、タイマーカウント終了時にExecuteEventsでクリックさせる。
private void UpdateCurrentObject()
{
// Send enter events and update the highlight.
var go = pointerData.pointerCurrentRaycast.gameObject;
HandlePointerExitAndEnter(pointerData, go);
// Update the current selection, or clear if it is no longer the current object.
var selected = ExecuteEvents.GetEventHandler<ISelectHandler>(go);
if (selected == eventSystem.currentSelectedGameObject)
{
ExecuteEvents.Execute(eventSystem.currentSelectedGameObject, GetBaseEventData(),
ExecuteEvents.updateSelectedHandler);
if (GazeTimeClickMode && selected != null)
{
ClickTimer = ClickTimer - Time.fixedDeltaTime;
if (ClickTimer <= 0f)
{
pointerData.pointerPress =
ExecuteEvents.ExecuteHierarchy(go, pointerData, ExecuteEvents.pointerDownHandler)
?? ExecuteEvents.GetEventHandler<IPointerClickHandler>(go);
ExecuteEvents.Execute(pointerData.pointerPress
, pointerData, ExecuteEvents.pointerClickHandler);
ClickTimer = ClickTimerMax;
}
}
}
else
{
ClickTimer = ClickTimerMax;
eventSystem.SetSelectedGameObject(selected, pointerData);
}
}
調べるのが大変だった・・・