Unity3D: 重要なクラス - ギズモとハンドル

推奨: NSDT シーン エディターを 3D ツールチェーンに 追加します。
3D ツールセット: NSDT Jianshi デジタル ツイン

重要なクラス - ギズモとハンドル

Gizmos クラスと Handles クラスは、シーン ビューとゲーム ビューで線と形状だけでなく、インタラクティブなハンドルとコントロールを描画するために使用されます。これら 2 つのクラスを組み合わせることで、これらのビューに表示されるコンテンツを拡張し、任意の方法で項目を編集するための対話型ツールを構築する方法が提供されます。たとえば、インスペクターに数字を入力する代わりに、ゲーム内のノンプレイヤー キャラクターの周囲にドラッグ可能な円ギズモを作成し、プレイヤーの声が聞こえたり見えたりする領域を表すことができます。

このページでは、Gizmos クラスと Handles クラスの概要を説明します。Gizmos クラスと Handles クラスの各メンバーに関する完全なドキュメントと詳細なリファレンスについては、「Gizmos および Handles スクリプト リファレンス」ページを参照してください。

ギズモ

Gizmos クラスを使用すると、線、球、立方体、アイコン、テクスチャ、グリッドをシーン ビューに描画でき、プロジェクトの開発中にデバッグ、セットアップ支援、またはツールとして使用できます。

たとえば、ゲーム オブジェクトの周囲に 10 ユニットの黄色のワイヤフレーム キューブを描画するには、次のコードを使用します。

using UnityEngine;
public class GizmosExample : MonoBehaviour
{
    void OnDrawGizmosSelected()
    {
        // 在变换位置绘制一个黄色立方体
        Gizmos.color = Color.yellow;
        Gizmos.DrawWireCube(transform.position, new Vector3(10, 10, 10));
    }
}

これは、指向性ライト ゲームオブジェクトの上にキューブを配置したときにどのように見えるかです。

その位置の周りに立方体のギズモを描画する追加のスクリプトが適用されたライト ゲームオブジェクト

Gizmos の使用方法に関する完全なドキュメントについては、「Gizmos Scripting Reference」ページを参照してください。

ハンドル

ハンドルはギズモに似ていますが、対話性と操作の点でより多くの機能を提供します。シーン ビューでアイテムを操作するために Unity 自体が提供する 3D コントロールは、ギズモとハンドルの組み合わせです。組み込みのハンドル GUI には、変換コンポーネントによるオブジェクトの位置決め、拡大縮小、回転などの使い慣れたツールが多数あります。ただし、カスタム コンポーネント エディターで使用する独自のハンドル GUI を定義できます。このような GUI は、手続き的に生成されたシーン コンテンツ、「非表示」アイテム、およびウェイポイントや位置マーカーなどの関連オブジェクトのグループを編集するのに役立ちます。

たとえば、シーン ビューで「シールド エリア」を変更するための矢印ハンドルを備えた円弧エリアを作成する方法は次のとおりです。

using UnityEditor;
using UnityEngine;
using System.Collections;

//项目中应已包含了此类
public class WireArcExample : MonoBehaviour
{
    public float shieldArea;
}

// 使用附加到圆盘的 ScaleValueHandle 创建一个 180 度的线弧,
// 允许您修改 WireArcExample 中的 "shieldArea" 的值
[CustomEditor(typeof(WireArcExample))]
public class DrawWireArc : Editor
{
    void OnSceneGUI()
    {
        Handles.color = Color.red;
        WireArcExample myObj = (WireArcExample)target;
        Handles.DrawWireArc(myObj.transform.position, myObj.transform.up, -myObj.transform.right, 180, myObj.shieldArea);
        myObj.shieldArea = (float)Handles.ScaleValueHandle(myObj.shieldArea, myObj.transform.position + myObj.transform.forward * myObj.shieldArea, myObj.transform.rotation, 1, Handles.ConeHandleCap, 1);
    }
}

円弧ハンドルとスケールハンドルの例

ハンドルの使用方法に関する完全なドキュメントについては、ハンドル スクリプトのリファレンス ページを参照してください。

おすすめ

転載: blog.csdn.net/jianshi2023/article/details/130697883