using UnityEngine; using System.Collections; public class GenerateTexture : MonoBehaviour { public int widthHeight = 512; public Texture2D generatedTexture; private Material currentMaterial; private Vector2 centerPosition; void Start () { if (!currentMaterial) { currentMaterial = transform.renderer.sharedMaterial; if (!currentMaterial) Debug.LogWarning("Cannot find a material on: "+transform.name); } if (currentMaterial) { centerPosition = new Vector2(0.5f, 0.5f); generatedTexture = GenerateParabola(); //动态设置贴图 currentMaterial.SetTexture("_MainTex", generatedTexture); } } // 创建Texture2D private Texture2D GenerateParabola() { Texture2D proceduralTexture = new Texture2D (widthHeight, widthHeight); //贴图中心点坐标 Vector2 centerPixelPosition = centerPosition * widthHeight; for (int x = 0; x < widthHeight; x++) { for (int y = 0; y < widthHeight; y++) { Vector2 currentPosition = new Vector2(x, y); //计算当前坐标与中心点坐标距离并映射到0~1范围。 float pixelDistance = Vector2.Distance(currentPosition, centerPosition)/(widthHeight*0.5f); //对颜色值取反 pixelDistance = Mathf.Abs(1-Mathf.Clamp(pixelDistance, 0f, 1f)); Color pixelColor = new Color(pixelDistance, pixelDistance, pixelDistance, 1.0f); proceduralTexture.SetPixel(x, y, pixelColor); } } //应用新像素值 proceduralTexture.Apply(); return proceduralTexture; } }