C#

C# code
 avatar
unknown
abc
4 years ago
2.0 kB
4
Indexable
using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class SampleTest : MonoBehaviour
{
    public Texture2D texture;
    public Material m_Material;

 
    public float worldSize;
    public string textureName = "_MainTex";

 
    public Vector3 currentPos;
    public Vector2 currenUv;
    public Vector4 value;
    public Color colorValue;
    public Vector3 LeftDownPosition
    {
        get
        {
            Vector3 left = transform.position;
            left.x -= worldSize * 0.5f;
            left.z -= worldSize * 0.5f;
            return left;
        }
    }
    private void Update()
    {
        if (m_Material && texture)
        {
            m_Material.SetTexture("_MainTex", texture);
            if (Input.GetMouseButton(0))
            {
                var mousePos = Input.mousePosition;
                Ray ray = Camera.main.ScreenPointToRay(mousePos);
                Plane plane = new Plane(Vector3.up, Vector3.zero);
                plane.Raycast(ray, out var enter);
                currentPos = ray.GetPoint(enter);
                currenUv = GetUv(currentPos);
            }
            value = colorValue = texture.GetPixelBilinear(currenUv.x, currenUv.y);
        }

    }
 

    float Remap(float value, float From1, float To1, float From2, float To2)
    {
        return From2 + (value - From1) * (To2 - From2) / (To1 - From1);
    }

    public Vector2 GetUv(Vector3 worldPos)
    {
        var origin = LeftDownPosition;

        float u = Remap(worldPos.x, origin.x, origin.x + worldSize, 0f, 1f);
        float v = Remap(worldPos.z, origin.z, origin.z + worldSize, 0f, 1f);
        return new Vector2(u, v);
    }
    private void OnDrawGizmos()
    {
        Gizmos.color = Color.red;
        Gizmos.DrawWireSphere(currentPos,5f);
        Gizmos.DrawWireCube(transform.position, Vector3.one * worldSize - Vector3.up * worldSize);
    }

}
Editor is loading...