Unity3D ノート 2

変身

Transform->reset はオブジェクトの位置、回転角度、サイズをリセットします。

Ctrl+D でコンポーネントをコピーします

Ctrl+矢印キーでステップに応じて移動します

以前は、コンポーネントの動きは力を加えることによって制御されていました。

また、transform.Translate(Vector3(x,y,z)); を通じてコン​​ポーネントの位置を変更することもできます。

しかし、transform.Translate(Vector3(x,y,z)) を update() に配置すると、非常に高速に動作することがわかります。

コンポーネントを介してオブジェクトを制御する

コンポーネント

コンポーネント エンティティにはマウントされるという性質があります。つまり、任意のコンポーネントを使用してゲーム オブジェクト自体を参照できます。

コンポーネントにアクセスする

ゲーム オブジェクトに実装されるコンポーネントは、コンポーネント インスタンス、またはコンポーネント オブジェクトです。

GetComponent 関数は、別のコンポーネント オブジェクトを取得するために使用されます。通常は、コンポーネント オブジェクトの参照変数を保存する変数を使用します。

コンポーネント オブジェクトによってサポートされる操作は、変数を参照することによって実装できます。たとえば、剛体の質量の取得などです。

Rigidbady の AddForce は、剛体コンポーネントの参照変数を通じて呼び出すこともできます。

スクリプト コンポーネントもコンポーネントなので、GetComponent を使用して取得することもできます。スクリプト コンポーネントを取得するには、コンポーネント名はスクリプトのクラス名です。

存在しないコンポーネント名を取得する関数はnull(空参照)を返すため、操作するとnullにより実行例外が発生します。

void start(){
    // 刚体组件
    Rigidbody rb = GetComponent<Rigidbody>();
    
    //改变物体质量为10千克
    rb.mass=10f;

    // 施加一个力大小为10牛顿
    rb.AddForce(Vector3.up * 10f);    
}

他のゲームオブジェクトにアクセスする

実際の開発では、スクリプトは現在マウントされているオブジェクトを操作するだけでなく、他のオブジェクトを参照することもあります。

プレイヤー キャラクターを追いかける敵キャラクターは常にプレイヤー オブジェクトへの参照を保持し、いつでもプレイヤーの位置を決定できるようにします。

変数を使用してゲームオブジェクトを参照する

初期値を設定せずにパブリック GameObject 変数をスクリプトに追加します。

変数は検査ウィンドウに表示され、デフォルト値は None です。

オブジェクトまたはプレハブを変数のテキスト ボックスにドラッグして、初期値を割り当てます。

他のオブジェクトを参照する場合、変数のタイプを GameObject またはコンポーネントにするだけでなく、コンポーネントを含むゲーム オブジェクトをこの変数にドラッグすることもできます。

複数のゲームオブジェクトを配列またはリストに保存できます

public class test : MonoBehaviour
{
    public GameObject player;
    void Start()
    {
        // 读取player的位置,并设置本物体的位置在他后方
        transform.position = player.transform.position - Vector3.forward * 10f;
    }
}

サブオブジェクトの検索

(1) 親オブジェクトの変換コンポーネントを使用して子オブジェクトを検索します。

(2) 7 行目のコメントのように、transform.Find メソッドを使用してサブオブジェクトを検索します。

using UnityEngine;

public class WaypointManager : MonoBehaviour{
    public Transform[] waypoints;

    void Start(){
        // transform.Find("Gun");
        waypoints = new Transform[transform.childCount];
        int i = 0;
        //用foreach循环访问所有子物体
        foreach (Transform t in transform){
            waypoints[i++] = t;
        }
    }
}

タグまたは名前でオブジェクトを検索する

(1) GameObject.Find メソッドは名前でオブジェクトを検索し、文字列パラメータで名前を指定します。

(2) GameObject.FindWithTag または GameObject.FindGameObjectWithTag メソッドはタグを通じてオブジェクトを検索します

共通イベント機能

基本アップデートイベント

Update はフレームごとに呼び出され、フレームごとに実行されるロジックがここに配置されます。

FixedUpdate 安定性を確保するための物理システム専用の修正アップデート

LateUpdate は、ゲーム ロジックの各フレームの終了時、レンダリング前に、カメラ位置の更新などのために呼び出されます。

void LateUpdate(){
    //在帧的最后阶段,将摄像头转向玩家角色的位置。这样摄像机的旋转会更流畅
    Camera.main.transform.LookAt(target.tranform)
}

初期化イベント

start update が初めて呼び出される前に呼び出されます

Awake は、ゲーム インスタンスがロードされるときに呼び出されます。

時間とフレームレート

ゲームが動くとき、Time.deltaTime の演算を掛け合わせることで、オブジェクトの動きは「フレームあたりの距離」ではなく、秒あたりの距離となり、均一に見える効果を実現します。時間。

Time.fixedDeltaTime を使用して物理的な更新間隔を取得します。デフォルト値は 0.02 で、変更できます。

その他のイベント

上記のイベントに加えて、OnTriggerXXXX、OnCollisionXXXX、OnEnable など、46 の既知のイベントがあります。

オブジェクトの作成と破棄

Instantiate(GameObject gameObject) は gameObject を通じてオブジェクトを作成します。gameObject は通常プレハブです

Destroy(GameObject gameObject, float s) は、s 秒後にゲーム オブジェクト gameObject を破棄します。

Destroy は、マウントされたコンポーネントを削除するためにも使用できます

スクリプトコンポーネントのライフサイクル

MonoBehavior を継承するスクリプトはコンポーネントとして使用する必要があり、オブジェクトにマウントでき、Unity イベントを処理できます。

スクリプト コンポーネントのライフ サイクルは、初期化 (Awake、Start など)、エディター、物理演算 (FixedUpdate、OnTriggerXXXX、OnCollisionXXXX など)、入力 (OnMouse)、ゲーム ロジック (Update、Latedate)、シーン レンダリング、補助を経ます。ワイヤーフレーム レンダリング、GUI レンダリング、フレームの終了、一時停止、破棄の手順

ラベル

オブジェクトの検索と指定に使用されます

オブジェクトにラベルを設定できる

新しいタグを作成できます

タグは作成後に変更できません。削除して再作成することのみ可能です。

ゲームオブジェクトにはタグを 1 つだけ割り当てることができます

Unity 既成タグ: Untagged (タグなし)、Respawn (誕生)、Fillish (完成)、EdiorOnly (エディターのみ)、MainCamera (メインカメラ)、Player (プレイヤー)、GameController (ゲーム コントローラー)

静的オブジェクト

検査メニューには、静的チェックボックス (静的) と、オブジェクトが静的かどうかを指定する各オブジェクト名の右側のメニューがあり、静的フラグ メニューを使用して、各サブシステムで目的を絞った方法でオブジェクトを設定できます。静的ですか

静的メニューのサブシステムには次のものが含まれます。

  • ライトマップ静的: シーン内の高度な照明プロパティ

  • Occlude Static: 特定のカメラの下でのオブジェクトの可視性に基づいてレンダリングを最適化します。

  • 静的バッチ処理: 複数のオブジェクトを 1 つに結合してレンダリングします。

  • 静的ナビゲーション: 経路探索システムのグリッド リンク

  • オフメッシュリンクの生成: 経路探索システムのメッシュリンク

  • Reflection Probe Static: リフレクション プローブの最適化

詳細については、関連ドキュメントを参照してください。

階層

カメラがシーン内のオブジェクトの一部のみをレンダリングできるようにするために使用されます。

ライトがオブジェクトの一部のみを照らすようにするために使用されます。

衝突検出と放射線検出に使用されます。

新しいレベルを作成できます

オブジェクトにはレベルを割り当てることができます

シーンの一部のみをレンダリングする

レベルはカメラのカリング マスクと組み合わせて使用​​され、特定のレベルのオブジェクトを選択的に表示します。

Unity の多くのドロップダウン メニューでは、[なし] はすべてのオプションがオフになることを意味し、[すべて] はすべてのオプションがオンになることを意味します。

UI システムがスクリーン スペース キャンバスを使用する場合、カメラ カリング マスクの影響を受けません。

選択的X線撮影

レベルを使用すると、レイ検出で特定のコライダーを無視できるようになります

場合によっては、プレーヤー レイヤ内のオブジェクトとのみ衝突し、他のオブジェクトを無視するレイを放出することが必要になることがあります。

Physics.Racast メソッドは光線を放射するために使用され、パラメータ LayerMask を運ぶことができます。

  • LayerMask はビットマーカーをマスクとして使用するパラメータです

  • ビットをマーカーとして使用するのはバイナリ関連の手法であり、原則として int 型変数は 32 ビットで構成されており、各ビットは 0 か 1 しか取れません。 0か1。

  • layerMask のすべてのビットが 1 の場合、すべてのレイヤーと衝突します。layerMask が 0 の場合、どのレイヤーとも衝突しません。

// 将1左移一位
int layerMask = 1 << 8;
// 将layerMask设置为只有从右数第8为是1,其余位是0,则只会和Layer 8 Player层发生碰撞
if (Physics.Raycast(transform.position, Vector3.forward, Mathf.Infinity, layerMask))
    Debug.Log("The ray hit the player");

逆に、プレイヤーのゲーム キャラクターが検出光線を発する場合は、プレイヤーのゲーム キャラクター以外のすべてのオブジェクトと衝突する必要があります。

void CameraRot()
{
    if(CanContrl)
    {
        //dian
    }
}

おすすめ

転載: blog.csdn.net/qq_51943845/article/details/129309720