2012-01-30 11 views
1

私はモバイル機器でリリースする予定の水平横スクロールシューティングゲームを作成しています。ようにどのように私は船を設定することができます:それが衝突を ユニティ3Dの水平シューターのキャラクターコントローラー

  • 右自由に(垂直/水平方向の速度を変化させた)/左/ /上下に移動し、障害物に対して停止することができ

    • (すなわち障害物との衝突IF STOP)水平面(ダウン+右入力に対する
    • 斜行)が右障害物を通過することができないなければならない床

    押し付け移動する必要があります。

    私は速度に基づいて位置を調整するだけのカスタムキャラクターコントローラーを作成しました。私はどのように衝突を検出し、障害物を通って移動するのを避けることができないのか分かりません。この簡単な要件を達成するための簡単な方法が必要です。

    注:明確にするために、カメラは船に追随し、自動的にはスクロールしません。プレイヤーは入力ボタンを放すことで船を止めることができます。

  • 答えて

    0

    transform.Translateを使用して自分自身のvelocityベクターを保存していました。これは明らかにあらゆる衝突検出を無視しており、カスタム衝突検出の実装を必要としていました。

    代わりにRigidbodyコンポーネントには、独自のvelocity変数が含まれています。その速度値は簡単に変更することができ、オブジェクトは自動的に翻訳して障害物に衝突します。ここに例があります:

    using UnityEngine; 
    using System.Collections; 
    
    public class CharacterController : MonoBehaviour { 
    
        public Vector2 maximumSpeed = new Vector2(1.0f, 1.0f); 
    
        void Start() { 
    
        } 
    
        void Update() { 
         Rigidbody rigidbody = GetComponent<Rigidbody>(); 
    
         Vector2 velocity = new Vector2(); 
    
         velocity.x = Input.GetAxis("Horizontal") * maximumSpeed.x; 
         velocity.y = Input.GetAxis("Vertical") * maximumSpeed.y; 
    
         rigidbody.velocity = velocity; 
        } 
    
    } 
    

    これは非常にうまくいくようです。コメントは高く評価されます:-)

    +2

    おそらくプレイヤーによって制御されるエンティティに適しているもう1つの解決策は、同様の機能を提供するが、エンティティがプレーヤによって制御されているという事実を考慮に入れるためにいくつかの "ゆるやかな"ロジックを持つ 'CharacterController'コンポーネントを使用することです純粋な物理エンティティになることに)。あなたの速度/慣性では、あなたはあなたが持っているソリューションに最も適しているかもしれません。 –

    +0

    @ダン・チャーズ私はそれを試してみます。 'CharacterController'の方がうまくいくのでしょうか? –

    1

    まず、colliderコンポーネントを障害物とキャラクターコントローラーに追加してください。それはあなたの船が障害物を通過するのを止めるのに十分なはずです。

    +0

    shipオブジェクトには球形の衝突があります。私はそのコライダーをどのように動作させるかについては不明です。私のカスタムコントローラのスクリプトは、速度を使ってオブジェクトを変換するだけです。私は衝突を検出して動きを止める方法を知らない。 –

    +0

    ColliderのIsTriggerチェックボックスを有効にしないように注意してください。 – Kay

    +0

    @ Kay 'IsTrigger'チェックボックスはチェックされていません。私の主な問題(私は思う)は、私のキャラクターコントローラに衝突検出ロジックがないということです。私はこれがどのように実装されるのか分かりません。 –