using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.EventSystems; namespace Sougou.Scripts.SougouKeyboard { public class testClick : MonoBehaviour { // Start is called before the first frame update void Start() { } // Update is called once per frame void Update() { Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition); RaycastHit hitInfo; if (Input.GetMouseButtonDown(0)) { //Debug.Log("mouse position:" + Input.mousePosition.ToString()); if (Physics.Raycast(ray, out hitInfo)) { string name = hitInfo.collider.gameObject.name; //if (name == "KeyBoard-LAYOUT") { GameObject kbd = hitInfo.collider.gameObject; Vector3 vecKbd = kbd.transform.InverseTransformPoint(hitInfo.point); Vector2 pixelUV = hitInfo.textureCoord; Renderer rend = hitInfo.transform.GetComponent<Renderer>(); Texture2D tex = rend.material.mainTexture as Texture2D; Vector2 pixelOrg; Vector2 texSize = new Vector2(813, 345); pixelOrg.x = pixelUV.x * texSize.x; pixelOrg.y = (1 - pixelUV.y) * texSize.y; Debug.Log("ray click " + name + ": 3d point=" + vecKbd.ToString() + " uv=(" + pixelUV.x + "," + pixelUV.y + ") org=(" + pixelOrg.ToString() + ")" + " w=" + texSize.x + ",h=" + texSize.y); } } } } public void Click() { Debug.Log("click kbd"); } private void LogEvent(string prefix, PointerEventData eventData) { Debug.Log(prefix + ": " + eventData.pointerCurrentRaycast.gameObject.name + " x=" + eventData.position.x + ",y=" + eventData.position.y); } } }

搜狗输入法测试click。