結果を示す
フレーム全体
各地域の内容
エリア1
インタラクティブ キューブと草の頂点の間の距離を計算します
これは、立方体の中心から草の頂点までの距離として理解できます。距離は次のとおりです。 0 から 0 までの整数 プロセスは次のとおりです
エリア2
距離を特定の値で除算します。この値はインタラクション範囲であり、白いバーの範囲を右に移動するのと同じです。
次に、飽和ノードを使用して範囲を制限します。値を 0 ~ 1 に設定します。
エリア3
まず、前のステップでは値を 0 ~ 1 に制限しました。このステップは逆です。直感的に説明すると、黒と白のバーを入れ替えます。立方体に近づくほど、その部分は白くなり、影響が強くなります。草の頂点シェーダ上。
エリア4
草の頂点ベクトルを移動するには移動方法が必要で、草の頂点位置から立方体のワールド座標を引いて両者の方向を求めます。
次に、エリア 3 で計算された影響を乗算すると、頂点に近づくほどオフセットが大きくなる効果が得られます。
エリア5
この手順は複雑に見えますが、実際は非常に簡単です。エリア 4 で取得した頂点オフセットを草原の頂点座標に追加します。草は y 軸に沿って移動する必要がないため、x 軸を追加するだけで済みます。 - 軸と Z 軸。
エリア6
草が動くときは草の根元を動かす必要がないので頂点カラーを使います、つまり草モデルを作るときの頂点カラー(テクスチャの色ではないことに注意)はルートの頂点に追加されます。黒色で操作可能です。部分は白色です。Lerp を使用して、移動する必要のない領域と移動する必要がある領域の間をスムーズに移行できます。 . もちろん、ここでの計算に頂点座標を使用することもできます。
エリア7
最後にテクスチャを与える必要があります
グラフ設定
最後に、立方体の場所をマテリアルに伝えるスクリプトを作成する必要があります。
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class TrackPosition : MonoBehaviour
{
public Material grassMat;
private void Update()
{
grassMat.SetVector("_TrackerPosition_v3", transform.position);
}
}
次に、それを立方体に掛けて、マテリアルボールをプロパティにドラッグします。
工程下载gitee地址