2017-01-10 4 views
3

球の範囲内でのプレイヤーの動きを制限したい場合は、以下のようにプレイヤーの動きが範囲外になるようにスケマティックダイアグラムを表示し、球の範囲内で選手の境界を設定する

これを実装するためにC#コードを書くにはどうすればよいですか?

enter image description here

これは私の現在の段階です:

  1. は、これまで対象

マイコードを球にC#のコードはappendを作成した3D球体を作成します

public Transform player; 

void update(){ 
     Vector3 pos = player.position; 
} 
+0

問題が解決しましたか?その場合は、正しい回答として投稿済みの回答を選択することを検討してください。 – Kardux

答えて

3

あなたのプレイヤーの位置をどのように計算するのか分かりませんが、プレイヤーに新しいポジションを割り当てる前に、移動が適格かどうかをチェックして確認する前に、 新しい位置の距離を球の中心から確認してください@Miladが提案何

//so calculate your player`s position 
//before moving it then assign it to a variable named NewPosition 
//then we check and see if we can make this move then we make it 
//this way you don't have to make your player suddenly stop or move it 
//back to the bounds manually   

if(Vector3.Distance(sphereGameObject.transform.position, NewPosition)< radius) 
{ 
//player is in bounds and clear to move 
SetThePlayerNewPosition(); 
} 
+0

OK、お試しいただきますようお願い申し上げます。 – user3177358

1

は正しいですが、また、あなたができなくなります事実を含む、あなたの動きベクトルが少しでも球の外に出た場合、球の国境にある「スライド」へ:

Sphere vector explanation

0 (安っぽいグラフィックのスキルのために申し訳ありません...)

あなたは角度がプレイヤーの位置とXとの間に形成され得る球内面の「スライド」にできるようにしたい場合は、あなたが行うことができますベクトル、その後で、この角度を適用します。

public Transform player; 
public float sphereRadius; 

void LateUpdate() 
{ 
    Vector3 pos = player.position; 
    float angle = Mathf.Atan2(pos.y, pos.x); 
    float distance = Mathf.Clamp(pos.magnitude, 0.0f, sphereRadius); 
    pos.x = Mathf.Cos(angle) * distance; 
    pos.y = Mathf.Sin(angle) * distance; 
    player.position = pos; 
} 

だけ(私は私の例ではLateUpdate()に入れ理由です)、これはカウンタープレーヤーの動きスクリプトに影響を与えない使用して確認してください。

+0

こんにちは、Kardux:多くのお手伝いに感謝、それは正常に動作します。 – user3177358

関連する問題