- 需求:将如下圖檔裡面的字母取出來顯示一個字母
![](https://img.laitimes.com/img/__Qf2AjLwojIjJCLyojI0JCLiAzNfRHLGZkRGZkRfJ3bs92YsYTMfVmepNHLzEERNl3Zq5UMJpHWwYUbiBnTzwEMW1mY1RzRapnTtxkb5ckYplTeMZTTINGMShUYfRHelRHLwEzX39GZhh2css2RkBnVHFmb1clWvB3MaVnRtp1XlBXe0xyayFWbyVGdhd3LcV2Zh1Wa9M3clN2byBXLzN3btg3Pn5GcuYTM3ITOyETM2EDNwAjMwIzLc52YucWbp5GZzNmLn9Gbi1yZtl2Lc9CX6MHc0RHaiojIsJye.png)
1. 圖檔設定如圖:
2. 設定RawImage物體:
3. 圖檔内每個字母的大小為128*128 整個圖檔大小1024*1024,計算設定UVRect寬高為:0.125,0.125.
4. 代碼如下:
using System;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.EventSystems;
using UnityEngine.UI;
public class Test : MonoBehaviour,IPointerClickHandler {
public Texture texture;//圖檔 圖檔左上角A為(0,0)索引值
private float perSize = 0.125F;//每個字母大小
private int colunCount = 8;//一行8個字母
private int letterCount = 52;//大小寫字母一共52個
//滑鼠點選随機取一個字母顯示
public void OnPointerClick(PointerEventData eventData)
{
//随機取字母索引值
int count = (int)UnityEngine.Random.Range(0, letterCount);
Debug.Log("擷取字母:" + count + "==" + (((char)(65 + count - (count / 26) * 26))).ToString());
//計算字母在圖檔内第幾行
int row = (int)count / (int)colunCount;
//計算字母在圖檔内第幾列
int column = count - row * colunCount;
Debug.Log(string.Format("第{0}行第{1}個", row, column));
//設定UV資料
GetComponent<RawImage>().uvRect = new Rect(column * perSize, 0.875f - row * perSize, perSize, perSize);
}
}