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

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

新規登録して質問してみよう
ただいま回答率
85.35%
Unity3D

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

Unity

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

Q&A

解決済

1回答

9885閲覧

Unity3D 滑らかにキャラの向きを変える

Higawind

総合スコア17

Unity3D

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

Unity

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

0グッド

0クリップ

投稿2020/05/15 09:45

編集2020/05/15 10:31

前提・実現したいこと

RigidBodyを使用したキャラクター移動において
カクカクとした向き変更ではなく、360度滑らかにキャラの向きを変えられるようにしたい

8方向移動で方向転換をする際にパッパッと向きが変わるのではなく、ぬるりと向きが変わるようにしたいです

発生している問題・エラーメッセージ

カクカクとした向きの変更になってしまう

該当のソースコード

using UnityEngine; using System.Collections; public class CharacterMove : MonoBehaviour { float inputHorizontal; float inputVertical; Rigidbody rb; float moveSpeed = 3f; Vector3 lastmov_f; Animator anim; void Start() { rb = GetComponent<Rigidbody>(); anim = this.gameObject.GetComponent<Animator>(); } void Update() { inputHorizontal = Input.GetAxisRaw("Horizontal"); inputVertical = Input.GetAxisRaw("Vertical"); } void FixedUpdate() { // カメラの方向から、X-Z平面の単位ベクトルを取得 Vector3 cameraForward = Vector3.Scale(Camera.main.transform.forward, new Vector3(1, 0, 1)).normalized; // 方向キーの入力値とカメラの向きから、移動方向を決定 Vector3 moveForward = cameraForward * inputVertical + Camera.main.transform.right * inputHorizontal; // 移動方向にスピードを掛ける。ジャンプや落下がある場合は、別途Y軸方向の速度ベクトルを足す。 //rb.velocity = moveForward * moveSpeed + new Vector3(0, rb.velocity.y, 0); //Debug.Log(moveForward); rb.AddForce(new Vector3(inputHorizontal, 0, inputVertical) + moveSpeed * moveForward * 2, ForceMode.Impulse); if (moveForward != new Vector3(0, 0, 0)) { anim.SetFloat("InputMagnitude", 1.0f); } else { anim.SetFloat("InputMagnitude", 0.0f); } // キャラクターの向きを進行方向に if (moveForward != Vector3.zero) { transform.rotation = Quaternion.LookRotation(moveForward); } } }

補足情報(FW/ツールのバージョンなど)

Unity 2019.3.0f6

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

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

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

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

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

mattrick

2020/05/15 09:51

入力装置は何ですか? キーボード入力だと8方向になるのは当たり前だと思いますが・・・ アナログスティックでないと360度の移動は出来ないのでは?
Higawind

2020/05/15 10:30

キーボード入力です すみません、私の考えに問題がありました... 8方向移動でOKです。しかし、方向転換をする際にパッパッと向きが変わるのではなく、ぬるりと向きが変わるようにしたいです 何か方法があればご教授お願いいたします。
guest

回答1

0

ベストアンサー

Slerpを使って回転を補完すると良いと思います。

Quaternion targetRotation = Quaternion.LookRotation(moveForward - transform.position); transform.rotation = Quaternion.Slerp(transform.rotation, targetRotation, Time.deltaTime);

こちらのサイトを参考にしました。
https://tama-lab.net/2017/06/unity%E3%81%A7%E3%82%AA%E3%83%96%E3%82%B8%E3%82%A7%E3%82%AF%E3%83%88%E3%82%92%E5%9B%9E%E8%BB%A2%E3%81%95%E3%81%9B%E3%82%8B%E6%96%B9%E6%B3%95%E3%81%BE%E3%81%A8%E3%82%81/

投稿2020/05/15 10:57

mattrick

総合スコア135

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

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

Higawind

2020/05/15 12:22

回答ありがとうございます。 ちゃんと回転するようになりました! ありがとうございます、これにて解決といたします。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問