2017-06-18 5 views
0

私はC#で動作させようとしています。Unityでは、私のキャラクターコントローラーを「偽って」浮動させようとしていますが、重力はオフになっていますが、まだ何かが下方向に引っ張っています(Y方向)

は、だから私の考えは3つの事が起こることを引き起こして、添付OnTriggerEnter機能を持っている私の水のオブジェクトをヒットする私のCharacterControllerためのものです:(TreadWaterに実行されているアイドル/ウォーキングから

  1. 私のアニメーションの変更を/正常に動作し、ちょうど)剛体(チャーコントローラ)が
浮遊しているように見えるように、水の表面に剛体のY位置を設定
  • のオフ
  • ターン重力を微調整する必要がありますあまりにも及び、それが動作している間、すべてのアップデートをvoid Update()機能を使用して位置を設定しようとしました

    CharacterController controller; Animator Animator; bool WaterImpact; GameObject WaterProDaytime; public Rigidbody Model; void Start() { Animator = GetComponent<Animator>(); Model = GetComponent<Rigidbody>(); Model.velocity = Vector3.zero; Model.angularVelocity = Vector3.zero; } void OnTriggerEnter (Collider col) { if (col.gameObject.name == "WaterProDaytime") { WaterImpact = true; //PlayerController.gravity = 0; } Debug.Log (col.gameObject.name); Debug.Log (WaterImpact); } void Update() { if (WaterImpact) { transform.position = new Vector3 (transform.position.x, -1.4f, transform.position.z); //Debug.Log (PlayerController.gravity); //Debug.Log ("WaterHit"); } }

    、非常に急速に「ジッター」の文字を引き起こして反対の力があるように見えます。

    理想的には、反対側の力をすべてオフにして、transform.position.yを水の表面に固定することが理想的です。

    は2日間これを見て、いかなる助けをいただければ幸いですけど、私に簡単に行くUnityへの非常に新しく、C#

    乾杯

    編集したスクリプト下さい。

  • +0

    を助けコントローラがエディタで変換文字のスクリーンショットを投稿してください。あなたの 'OnTriggerEnter'も機能しますか? 'Debug.Log'それを' if'ステートメントの外側に置いて、結果を教えてください。 – Programmer

    +0

    OnTriggerEnterはうまく動作し、アニメーションセットの変更をトリガし、 'PlayerController.gravity = 0; 'を使用すると重力を' 0 'に変更します.' PlayerController'は重力が12と定義された別のスクリプトです@Programmer –

    +0

    あなたの重力は12に戻りますか?それはただちに0と12の間を急速に切り替えるのではないのですか? –

    答えて

    1

    単にthis.GetComponent<Rigidbody>().useGravity = true;行によって引き起こされる可能性がありますか?
    あなたの説明のポイント2.から、それはthis.GetComponent<Rigidbody>().useGravity = false;になるはずです。

    this.GetComponent<Rigidbody>()の代わりにGetComponent<Rigidbody>()に電話することもできますのでご注意ください。

    最後のポイント:物理を扱うときは、常に付属のエンジンツールを使用してください。 transform.position = new Vector3 (transform.position.x, -1.5f, transform.position.z);オブジェクトの位置を任意に変更すると、線が物理的に混乱することがあります。 GetComponent<Rigidbody>().MovePosition(new Vector3 (transform.position.x, -1.5f, transform.position.z));を呼び出す方がはるかに安全です。

    希望これは、

    +0

    *ほとんどのものについては、 'this.'を取り除くことができます。メソッドパラメータまたはローカル変数のいずれかが同じ名前を持っています。 – Draco18s

    +0

    私はすべての重力の変更をオフにして、夜間放置しました(私は何かに触れなかったことを誓っています)。そして今朝もう一度試してみると、それは働いていて、働いていました。 しかし、 'GetComponent ().MovePosition(new Vector3(transform.position.x、-1.5f、transform.position.z)); 'に提案したように変換メソッドを変更しようとしたとき、私のコントローラのY位置は正しくありますか? @Kardux –

    +0

    @ Draco18s合意した 'this'はそのような状況で使うことができますが、このキーワードを忘れてしまったので、悪いデザインになっています_あなたのコードを混乱させる可能性があります...剛体' MovePosition() 'メソッドについて、あなたのシーンにある他のコライダーが原因かもしれません:コントローラーコライダーを無効にして呼び出してみてください。Unityが閉じられたり再オープンされたときの作業についても、悲しいことです。常に良いことです疑義が生じた場合に再起動しようとします。 – Kardux

    関連する問題