質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

Unity3D

Unity3Dは、ゲームや対話式の3Dアプリケーション、トレーニングシュミレーション、そして医学的・建築学的な技術を可視化する、商業用の開発プラットフォームです。

Unity

Unityは、Unity Technologiesが開発・販売している、IDEを内蔵するゲームエンジンです。主にC#を用いたプログラミングでコンテンツの開発が可能です。

Q&A

解決済

2回答

1872閲覧

【Unity】平行移動+回転で移動した際に発生するブレを無くしたい

Y0241-N

総合スコア1066

C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

Unity3D

Unity3Dは、ゲームや対話式の3Dアプリケーション、トレーニングシュミレーション、そして医学的・建築学的な技術を可視化する、商業用の開発プラットフォームです。

Unity

Unityは、Unity Technologiesが開発・販売している、IDEを内蔵するゲームエンジンです。主にC#を用いたプログラミングでコンテンツの開発が可能です。

0グッド

0クリップ

投稿2019/10/30 05:14

解決したいこと

キャラクターの移動を一枚のスクリプトで行っています、移動の方法はAddForceで上下左右に平行移動させ、
これに回転を組み合わせています。
移動に関してはこちらの記事を参考にさせていただきました。
UnityでRigidBodyのAddForce()に速度制限をつけてすーっと動かしてすーっと止める

このスクリプトで左右の平行移動と回転を同時に行うと、若干ではあるのですがブレが発生してしまいます。
このブレが発生する原因を特定し、解消したいです。

色々と試した結果、他の物(カメラや他のスクリプトが原因かどうか)の影響は受けておらず、
この移動のスクリプトに問題があると思われるのですが、結局自力では解明できなかったので質問させていただきます。

カメラはUnityChanの子オブジェクトとして配置しているだけで制御していません。
このスクリプト以外は外しています。

参考GIF(わかりにくいですが、回転移動時に床の文字がブレています)
イメージ説明

Hierarchy
イメージ説明

###Script

using System.Collections; using System.Collections.Generic; using UnityEngine; public class Move : MonoBehaviour { [SerializeField] private float m_TurnSpeed = 3f;  // ユーザー入力からリグが回転する速度。 [SerializeField] private float m_TurnSmoothing = 0.0f; //カメラの追尾にどれだけディレイをかけるか private float m_LookAngle; // リグのy軸回転。 private Quaternion m_TransformTargetRot; private float h; private float v; public float moveSpeed; // 移動速度 public float moveForceMultiplier; // 移動速度の入力に対する追従度 private Rigidbody rb; private void Start () { m_TransformTargetRot = transform.localRotation; rb = GetComponent<Rigidbody> (); } void Update() { h = Input.GetAxis ("Horizontal"); v = Input.GetAxis ("Vertical"); Rotate(); } void FixedUpdate () { Moving(); } void Moving() { Vector3 moveVector = Vector3.zero; // 移動速度の入力 Vector3 Forward = this.transform.forward; Vector3 Right = this.transform.right; Forward.y = 0.0f; // 水平方向に移動させたい場合はy方向成分を0にする Right.y = 0.0f; moveVector = moveSpeed * (Right.normalized * h + Forward.normalized * v); rb.AddForce(moveForceMultiplier * (moveVector - rb.velocity)); } protected void Rotate() { var x = Input.GetAxis("Mouse X"); m_LookAngle += x*m_TurnSpeed; m_TransformTargetRot = Quaternion.Euler(0f, m_LookAngle, 0f); if (m_TurnSmoothing > 0) { transform.localRotation = Quaternion.Slerp(transform.localRotation, m_TransformTargetRot, m_TurnSmoothing * Time.deltaTime); } else { //今回の実行時はm_TurnSmoothingは0なのでここの処理を使用 transform.localRotation = m_TransformTargetRot; } } }

試したこと

もともと回転は別のスクリプトで分けていたのですが、この時から既にブレが発生していたので、
統合すれば解決するのではと思い、まとめてみるが変化なし。

回転をUpdateメソッドで行い、移動をFixedUpdateで行っていることが原因かと考え、
Update内でどちらも処理してみるが変化なし。

移動の方法に問題があるのかと思い、元々TransfromDirectionで移動処理を行っていたところ、
現在のAddForce形式に変更するが変化なし。

回転の方法に問題があるのでしょうか...?

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

自己解決

試行錯誤の結果問題は解決しましたが、はっきりとした原因は掴めていません。
恐らくですが、以前の制御形式では移動とカメラの回転処理が混在しており、その中でも
処理をUpadate内、FixedUpadate内それぞれに分散していたことが原因ではないかと思います。

なので移動に関する部分をUpadate内で行い、カメラの衝突検知や制御をFixedUpadate内で行ったところ、
横移動+回転で発生するブレが無くなり、スムーズに移動が描画されるようになりました。

投稿2019/11/01 04:16

Y0241-N

総合スコア1066

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

自信は無いのですが、

Edit>Project Settings>Quality>Anti AliasingをDisabledにする
文字盤(?)のテクスチャのFilter Modeを**Point (no filter)**にする

ことで解決できないでしょうか?

(いずれも描画時に境界線を見にくくする処理をOffにすると言う設定です。)

投稿2019/10/30 11:26

編集2019/10/30 11:27
KanazawaKureha

総合スコア368

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Y0241-N

2019/11/01 04:10

回答ありがとうございます。 返信が遅くなりましたが、今回の問題は描画処理ではなくスクリプトにあるので、この方法では根本的な解決には至りませんでした。 試行錯誤した結果、問題は解決したのですが、はっきりとした原因はわかっておらず、 恐らく移動とカメラの制御がUpadate内とFixedUpadate内それぞれに散文していたことが 原因ではないかと推測しています。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問