[Help] Unity 5.4 Locked Cursor can't interact with UI through event trigger.

Hi everyone,
I’m running into a problem here:
In my game, I put a function UI to gameobjects and need my first person controller’s crosshair interact with this UI to perform functions from my scripts.
For the world space UI can not maintain a certain size of the UI images, I used camera.WorldToScreenPoint to pin my function UI to the object’s position on screen and maintain the UI’s size.
I’m using event trigger to call functions when pointer enter and exit.
It all works when the cursor is not locked and all functions can be called as designed.
But in the actual result I need the cursor to be locked in the middle of screen and a crosshair image UI represents the cursor’s location(cursor itself is invisible by default when locked).
Then I found this totally will not work when the cursor is locked, no event can be triggered when the crosshair (where the cursor should be pinned on) enters the function UI.

I’ve searched many threads and unity answers, there seems to have no easy solution to this problem and I’m not a veteran coder.
I found that it was intended to block interactions with UI from locked cursor when unity updated to 5.4.
But I really need this function to set my own system up.

Anyone has any ideas to workaround this problem?
Like if I can write my own lock cursor function and only pin the cursor in center of screen but maintain the interaction abilities?
Or if I can set an UI or gameobject as a pointer that can send message to event trigger to allow this custom pointer use the pointer enter and pointer out triggers?

Really appreciate any ideas or suggestions here!

I had that problem, I’m sure this will work even in 2017.2:
You need to create your own Input module to allow that behaviour, like this:

namespace UnityEngine.EventSystems
{
public class MySimpleInputModule : PointerInputModule
{
public bool forceHandlePointerExitAndEnter = true;

protected override void ProcessMove(PointerEventData pointerEvent)
{
if (!forceHandlePointerExitAndEnter)
base.ProcessMove(pointerEvent);
else
{
var currentRaycastResult = pointerEvent.pointerCurrentRaycast.gameObject;
HandlePointerExitAndEnter(pointerEvent, currentRaycastResult);
}
}
}
}

You can unlock cursor, but make it invisible (using .visible) when it’s entering your UI. Then lock it again.