Unity (ポケモン スタイル) の 2D ゲームに問題があり、ゲームtransform.position
オブジェクトの移動に使用しています。
プレイヤーと彼を追う敵がいます。すべて問題ありません。しかし、敵が衝突すると、互いに押し合い始めます
敵とプレイヤーが衝突したときに誰も押されないようにする必要があります。
- 敵にキネマティックを使用しようとしましたが、プレイヤーはそれらを押すことができます。
- プレイヤーに大量の質量を追加しようとしましたが、彼は敵を押すことができます.
- とのコードで当たり判定を試みたのです
OnCollision
が、敵の移動をキャンセルすると元に戻りません。
- - アップデート - -
衝突が必要ですが、それらの間をプッシュすることなく、問題を説明するビデオがあり ます https://www.youtube.com/watch?v=VkgnV1NOxlw
記録のために、私は A* パスファインディング スクリプト ( http://arongranberg.com/astar/ ) を使用しています。ここでは、敵がスクリプトを移動します。
void FixedUpdate () {
if(path == null)
return;
if(currentWayPoint >= path.vectorPath.Count)
return;
Vector3 wayPoint = path.vectorPath [currentWayPoint];
wayPoint.z = transform.position.z;
transform.position = Vector3.MoveTowards (transform.position, wayPoint, Time.deltaTime * speed);
float distance = Vector3.Distance (transform.position, wayPoint);
if(distance == 0){
currentWayPoint++;
}
}
- - アップデート - -
最後に、ターゲットが近づいて停止したときに、rigidbody2D.isKinematic プロパティを true に変更して、期待どおりの結果を取得します。
ここにビデオがあります https://www.youtube.com/watch?v=0Zm0idUU75s
そして敵の移動コード
void FixedUpdate () {
if(path == null)
return;
if(currentWayPoint >= path.vectorPath.Count)
return;
float distanceTarget = Vector3.Distance (transform.position, target.position);
if (distanceTarget <= 1.5f) {
rigidbody2D.isKinematic = true;
return;
}else{
rigidbody2D.isKinematic = false;
}
Vector3 wayPoint = path.vectorPath [currentWayPoint];
wayPoint.z = transform.position.z;
transform.position = Vector3.MoveTowards (transform.position, wayPoint, Time.deltaTime * speed);
float distance = Vector3.Distance (transform.position, wayPoint);
if(distance == 0){
currentWayPoint++;
}
}