GraphicRaycasterの上書きで解決しました。
参考:Unity UI and Render Texture (Pixel Perfect)
C#
1using UnityEngine;
2using UnityEngine.UI;
3using UnityEngine.EventSystems;
4
5public class CustomGraphicRaycaster : GraphicRaycaster {
6 public RectTransform renderImage;
7 public override void Raycast (PointerEventData eventData, System.Collections.Generic.List<RaycastResult> resultAppendList)
8 {
9 if ( base.eventCamera==null || base.eventCamera.targetTexture == null)
10 {
11 base.Raycast(eventData, resultAppendList);
12 return;
13 }
14
15 //通常のレイキャストで変換される範囲
16 Rect textureRect = new Rect(0,0,base.eventCamera.targetTexture.width,base.eventCamera.targetTexture.height);
17
18 //見た目上のキャンバスサイズ
19 Vector3[] v = new Vector3[4];
20 renderImage.GetWorldCorners(v);
21 Rect renderImageRect = new Rect(
22 v[0].x,
23 v[0].y,
24 v[2].x-v[0].x,
25 v[1].y-v[0].y);
26
27 //変換
28 Vector2 normalized = Rect.PointToNormalized (renderImageRect, eventData.position);
29 eventData.position = Rect.NormalizedToPoint (textureRect, normalized);
30
31 base.Raycast(eventData, resultAppendList);
32 }
33}