私はゆっくりとUnity3Dを学んでいます。私は迷路を作ろうとしていますが、フィニッシュエリアに到達したときにイベントが発生する必要があります。
オブジェクトの場所を取得して、それがターゲット領域にあるかどうかを確認するにはどうすればよいですか?Javascriptを使用します。
助けてくれてありがとう!
私はゆっくりとUnity3Dを学んでいます。私は迷路を作ろうとしていますが、フィニッシュエリアに到達したときにイベントが発生する必要があります。
オブジェクトの場所を取得して、それがターゲット領域にあるかどうかを確認するにはどうすればよいですか?Javascriptを使用します。
助けてくれてありがとう!
終了領域をボックスとして扱うことができる場合は、終了領域の周囲のシーンにBoxColliderを追加し、そのisTrigger
プロパティをtrueに設定できます。次にOnTriggerEnter
、エンティティがエリアに入ると、エンティティへのコールバックを受け取ります。これを使用して、レベルなどを終了できます。
PeterGがUnityAnswersで述べているように:
リジッドボディがある場合は、Rigidbody.IsSleeping()を実行して、リジッドボディがスリープしているかどうかを確認できます。
Character Controllerを使用している場合は、CharacterController.velocity==Vector3.zero;かどうかを確認します。
または、最後の位置を記憶しているフレームごとにVector3を手動で保存できます。何かのようなもの:
function Update () {
curPos = position;
if(curPos == lastPos) {
print("Not moving");
}
lastPos = curPos;
}
ターゲットエリアでフィニッシュエリアを意味する場合は、いくつかの方法でこれを行うことができます
衝突を使用できます
簡単な方法:(1)飛行機を作成し、「finish」という名前のタグを作成します(2)次にプレーヤーを選択し、インスペクターのドロップダウン「タグ」をクリックします。「終了」を検索して選択します。また、ゲームオブジェクトにコライダーを追加する必要があります。
次に、新しいJavaScriptを作成し、このコードを追加します
function OnCollisionEnter(collision : Collision){
if(collision.gameObject.tag == "finish"){
//"STOP GAMEOBJECT FROM MOVING"
}
}
またはこの方法を使用します
このスクリプトをプレーヤーに配置します。このスクリプトは、おそらくあなたがしていることにコライダーを使用するのと同じくらい神です
var other : Transform;
function Update ()
{
var dist = Vector3.Distance(other.position, transform.position);
if (dist < 100)
{
//stop player movent here
// move player to exact finish position over time
}
}