Evitar que se mueva un personaje en el mapa cuando pinchamos en un botón de la interfaz

Imagina un juego como Diablo en el que mueves un personaje en pantalla haciendo clic en el mapa, en Unity3D me he encontrado que al hacer clic en un botón de la interfaz el personaje se mueve se hacia ese punto por lo que se hace raro.

Si estás haciendo el juego solo para PC puedes ignorar que el personaje se mueva cuando haces clic en un botón de la interfaz con este código:

if( !EventSystem.current.IsPointerOverGameObject() ){
    // código para mover el personaje
}

Si estás haciendo el juego para PC, webgl o móvil el código anterior no te funcione por lo que te recomiendo usar esta función.

private bool IsPointerOverUIObject() {
    PointerEventData eventDataCurrentPosition = new PointerEventData(EventSystem.current);
    eventDataCurrentPosition.position = new Vector2(Input.mousePosition.xInput.mousePosition.y);
    List<RaycastResultresults = new List<RaycastResult>();
    EventSystem.current.RaycastAll(eventDataCurrentPositionresults);
    return results.Count > 0;
}

////////////////////

if( !IsPointerOverUIObject() ){
    // código para mover el personaje
}

Fuente

Chuleta GIT