Есть ли способ получить круг шейдера в точках местности? - PullRequest
0 голосов
/ 19 марта 2020

Используя это, я могу нарисовать круговой шейдер на местности:

Shader "Custom/TerrainCircle"
{
    Properties
    {
       _MainTex("Texture", 2D) = "white" {}
       _MainColor("Main Color", Color) = (0, 1, 0)
       _CircleColor("Circle Color", Color) = (1, 0, 0)
       _Center("Center", Vector) = (0,0,0,0)
       _Radius("Radius", Range(0, 100)) = 10
       _Thickness("Thickness", Range(0, 100)) = 5
    }
        SubShader
       {
            CGPROGRAM
            #pragma surface surfaceFunc Lambert

            sampler2D _MainTex;
            fixed3 _MainColor;
            fixed3 _CircleColor;
            float3 _Center;
            float _Thickness;
            float _Radius;

            struct Input {
                float2 uv_MainTex;
                float3 worldPos;
            };

            void surfaceFunc(Input IN, inout SurfaceOutput o) {
                half4 c = tex2D(_MainTex, IN.uv_MainTex);
                float dist = distance(_Center, IN.worldPos);

                if (dist > _Radius && dist < (_Radius + _Thickness))
                    o.Albedo = _CircleColor;
                else
                    o.Albedo = c.rgb;

                o.Alpha = c.a;
            }
            ENDCG
       }
}

И моно-скрипт:

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

[ExecuteInEditMode]
public class CircleOnTerrain : MonoBehaviour
{
    public Material radiusMaterial;
    public float radius = 1;
    public Color color = Color.white;
    public Color circleColor = Color.blue;
    public float thickness = 1;

    void Update()
    {
        radiusMaterial.SetVector("_Center", transform.position);
        radiusMaterial.SetFloat("_Radius", radius);
        radiusMaterial.SetColor("_MainColor", color);
        radiusMaterial.SetColor("_CircleColor", circleColor);
        radiusMaterial.SetFloat("_Thickness", thickness);
    }
}

Результат:

Shader on terrain

Что я хочу сделать дальше, это переместить некоторый объект по кругу над местностью. Таким образом, круг шейдера будет похож на путь, по которому сфера движется дальше. Включая высоту местности, чтобы объект двигался вниз в соответствии с высотой местности, но путь - это круг.

Есть ли способ сделать это?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...