オブジェクトの頂点だけを表示する

投稿者: | 2020-02-11


球の頂点だけを表示してみます。前の記事で作った拡大縮小のシェーダーグラフを使って、球が点の集まりになって拡散したり集まってきて元の球に戻るというのを繰り替えすスクリプトを作ります。

シェーダーグラフは、マスターのAlbedoとEmissionに向けてそれぞれColorノードを新しく作って、右クリックからConvert To Propertyでインスペクタやスクリプトから変更できるようにしました。

これで、マテリアルでSphereのデフォルトの色を設定できます。
Sphereに新しくスクリプトを付けて、点表示になっているときの色も変更できます。

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

public class meshFilterScript : MonoBehaviour
{
    public Color color; // 点表示のときの色


    Color albedoColor; // 元のAlbedoの色
    Color emisColor; // 元のEmisshonの色

    MeshFilter meshFilter;
    MeshRenderer meshRenderer;
    float n;

    // Start is called before the first frame update
    void Start()
    {
        meshFilter = GetComponent<MeshFilter>();
        meshRenderer = GetComponent<MeshRenderer>();
        n = 0f;
        albedoColor = meshRenderer.material.GetColor("Color_38C26CA1");
        emisColor = meshRenderer.material.GetColor("Color_46C0EB50");

    }

    // Update is called once per frame
    void Update()
    {

        if (Input.GetMouseButtonDown(0))
        {

            meshFilter.mesh.SetIndices(meshFilter.mesh.GetIndices(0), MeshTopology.Points, 0); // Sphereを点で表示
            meshRenderer.material.SetColor("Color_38C26CA1", color);
            meshRenderer.material.SetColor("Color_46C0EB50", color);

            StopCoroutine("Expansion");
            StartCoroutine("Expansion", 1);
        }
        else if (Input.GetMouseButtonUp(0))
        {
            StopCoroutine("Expansion");
            StartCoroutine("Expansion", -1);
        }
        
    }

    IEnumerator Expansion(int i)
    {
        float o = 0.1f * i;

        while (true)
        {

            n += o; // 面の表面の向いている方向にかけあわせる値を増減する
            meshRenderer.material.SetFloat("Vector1_9B68B35D", n); // その値をマテリアルに渡す
            
            yield return new WaitForSeconds(0.05f);

            if (n > 10f) // ある値より大きくなれば終了
            {
                yield break;
            }
            else if (n <= 0f) // Sphereが元の大きさ以下に戻れば、デフォルトに戻して終了
            {
                n = 0;
                meshRenderer.material.SetFloat("Vector1_9B68B35D", 0);
                meshRenderer.material.SetColor("Color_38C26CA1", albedoColor); // 色を戻す
                meshRenderer.material.SetColor("Color_46C0EB50", emisColor);
                

                meshFilter.mesh.SetIndices(meshFilter.mesh.GetIndices(0), MeshTopology.Triangles, 0); // Sphereの面を表示

                yield break;
            }
        }

    }
}

MeshFilterコンポーネントを取得して、Mesh.SetIndicesメソッドでトポロジーを変えられます。他にも面を四角形にしたり辺だけを表示したりできます。
https://docs.unity3d.com/jp/460/ScriptReference/MeshTopology.html

コルーチンの中で、シェーダーグラフのNormal Vectorにかけあわせる値を増加させてから足す処理を繰り返しています。コルーチンの引数に-1を入れると、かけあわせる値を増加させる値がマイナスになってSphereは縮小します。

コメントを残す

メールアドレスが公開されることはありません。