最初に効果を表示します。
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");
}
}
}
上記のコードをプレーヤー コードに追加するだけです。
最後に、プレイヤーをドアセンターとキーのプレイヤー位置にドラッグ アンド ドロップすれば完了です。