2016-10-16 12 views
0

私は、表面上を転がることができるオブジェクト「ボール」を持っています。オブジェクト "プラットフォーム"もあります。だから、ボールがプラットフォーム上で止まるときに限り、私は一定の距離を上げる必要があります。Unity 3D。

Script on C#。

答えて

0

Honsetly - 私はUnity APIの何かについてはわかりません:)しかし、私は利用可能なプロパティ "位置"を持っている必要があることを知っています。だからあなたの問題を解決する方法の一つ - すべての更新(以前の位置と比較して)のボールの位置を確認し、その位置が安定している(同じ)としばらく(ある時間) - プラットフォームを移動する。あなたがここに2つのことを確認する必要が

private Vector3 lastPosition; 
private stableTime = 0; 

public float distThreshold = 0.1; 
public float timeThreshold = 0.1; 

void FixedUpdate() { 
    if (lastPoistion == null || Vector3.Distance(ball.position, lastPoistion) > distThreshold) { 
     lastPosition = ball.position; 
     stableTime = 0; 
    } 
    else 
     stableTime += Time.deltaTime; 

    if (stableTime > timeThreshold) 
     platform.MovePoistion() 
} 
+0

私はポジションを保存する必要があるとは思わないが、静止しているかどうかをチェックしてから、2つのオブジェクトのメッシュが接触しているときだけトリガするものはありませんか? –

0

:よう

何か。

  • ボールが停止していますか?
  • ボールは単純に(ボールオブジェクトに割り当てられたspeedプロパティを使用して)それの現在の速度を追跡するため停止しているかどうかを確認するためのプラットフォーム上で

ボールです。私はプレーヤーがボールをコントロールしているので、おそらくすでにこれを持っていると仮定していますか?その場合は、speed == 0にチェックしてください。

ボールがプラットフォーム上にあるかどうかを確認するには、コライダーを使用する必要があります。 2次元または3次元物理(あなたが使用しているものを指定していない)を見て、適切なコライダーをプラットフォームとボールの両方に適用します。 2つのオブジェクト間の衝突をプログラムでチェックできるようになりました。オブジェクトの衝突に関するチュートリアルはたくさんありますのでここでは触れませんが、thisは開始するのに適しているかもしれません。

関連する問題