Unity3d はドアの開閉アニメーションを作成し、ドアを開くためのキーを収集します

最初に効果を表示します。

Unity3d はドアの開閉アニメーションを作成し、ドアを開くためのキーを収集します

最初のステップでは、Hirarchy パネルで 3 つの立方体を作成し、特定の比率に従ってそれらを調整してドア フレームを完成させます。次に、空のオブジェクトを作成して Doorframe と名付け、3 つの立方体を結合してドア フレームとして全体:

 次に、キューブを作成してサイズを調整します.適切なドアをドア枠に移動する前に、空のオブジェクト(doorcenter)を作成し、空のオブジェクトの位置をドアの右端の中央に移動し、ドアを次のように使用しますドアセンターの子 ここでの操作は、後続のドアを開くアニメーションへの道を開くことです。

ドアは、ドアの片側の軸を中心に回転する必要があります.回転を補助する空のオブジェクトが設定されていない場合、ドアは自己生成された中心を中心に回転し、目的の効果が得られません.

 次に、ドアが開くアニメーションを作成します。

[ウィンドウ] -> [アニメーション] -> [アニメーション] をクリックすると、[アニメーション] パネルが表示されます。[階層] パネルで doorcenter を選択します。

[作成] をクリックすると、名前を付けた後に自動的に生成されます。

 左側はアニメーションの編集と理解でき、右側はアニメーションの状態などを設定するために使用されます。ドアをクリックすることに注意してください。Loop Time (ループ再生) のチェックを外します。

表示される [アニメーション] パネルで、フレーム レートとして 30 を入力します。

 次に、上のプレビューの右側にある赤い点をクリックして録画を開始し、ドアセンターを選択し、ショートカット キー E を押します。緑色の軸をクリックして回転させます。回転角度は任意です。再生ボタンをクリックして効果を表示します。 、ドアの開く速度が速すぎる場合は、ドラッグします

時間間隔は 2 秒で、全体は次のようになります。 

 次にアニメーションマシンを開きます 

 以前に編集したアニメーション化されたドアがパネルで自動的に生成されます. まず、ドアをクリックして削除し、[状態の作成] を右クリックして [空] に名前を付けます。開くには鍵を見つける必要があります.次に、完成したアニメーションをホームのパネルにドラッグし、アイドルを右クリックします->トランジションを作成してドアにリンクします.

 [パラメーター] パネルをクリックしてアニメーションを再生する条件を設定し、ここで [トリガー] を選択します。ドアが開くアニメーションは 1 回だけ再生する必要があり、opening という名前を付けます。

 次に、アイドルとドアの間の接続をクリックし、右側のインスペクターでチェックを外します

 同時に、条件で + をクリックしてトリガーを設定します。

 ドアのセクションは以上です。鍵を素早く解き、立方体を作成し、Sphere Collider コンポーネントを追加します。Edit Collider をクリックして衝突範囲を調整し (できるだけ大きく)、Is Trigger をチェックします。

 キーコードを書く:

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

public class keyhold : MonoBehaviour
{
    // Start is called before the first frame update
    public Transform player;//获取玩家组件
    private void OnTriggerEnter(Collider other)//这里Other指的是与钥匙接触的物体(即玩家)
    {
        if(other.transform==player)
        {
            other.GetComponent<player>().IsKeyhold = true;//采用GetComponent方法获取玩家脚本中的bool值并且进行修改
            Destroy(gameObject);
        }
    }
}

ドアの場合、空のオブジェクト doorcenter を選択し、Box Collider コンポーネントを追加し、Is Trigger にもチェックを入れて、下の図に示すように衝突範囲を調整します。

 プレイヤーが鍵を入手する前提でコリジョンエリアに入り、ドアが自動的に開くことを願っています. プレイヤーが鍵を入手しない場合、応答はありません.

ドアのコード (doorcenter に追加):

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

public class DoorOpen : MonoBehaviour
{
    Animator animator;
    // Start is called before the first frame update
    public Transform player;
    private void Start()
    {
        animator = GetComponent<Animator>();
    }
    private void OnTriggerEnter(Collider other)
    {
        if(other.transform==player&&other.GetComponent<player>().IsKeyhold)//玩家拿到钥匙,进入碰撞区,播放动画
        {
            animator.SetTrigger("opening");
        }
    }
}

 上記のコードをプレーヤー コードに追加するだけです。

 最後に、プレイヤーをドアセンターとキーのプレイヤー位置にドラッグ アンド ドロップすれば完了です。

 

おすすめ

転載: blog.csdn.net/m0_64652083/article/details/129016982
おすすめ