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

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

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

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

Unity

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

Q&A

解決済

1回答

2673閲覧

進行方向に向き続けるように

RYU_L

総合スコア1

C#

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

Unity

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

0グッド

0クリップ

投稿2022/01/04 14:51

前提・実現したいこと

ユニティでキャラクターを進行方向に向くようにしたいのですが、移動ボタンを離すと向きが初期状態に戻ってしまいます
プログラムは初心者で、プログラムは過去にCを少しかじった程度です、Unityの教科書やユニティちゃんが教える!初心者向けUnity講座
見たり、ネットのコードをコピーして、どこがどの動作してるのとか見ながら、コメントを書いて勉強しつつコードの追加というやり方で独学しています
回転情報の保持して更新していかないといけないのはなんとなくわかるのですが、具体的にどうしていったらいいのかがわからず

それとエラーメッセージではないのですが下記のログが出続けてしまうのもよく分かっておりません
元々イラストや3Dの勉強していた身ですので絵的なイメージしやすい説明していただけると助かります
何卒よろしくお願いします

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

Look rotation viewing vector is zero UnityEngine.Quaternion:LookRotation (UnityEngine.Vector3) SHIGURU_move:Update () (at Assets/SHIGURU_move.cs:59)

該当のソースコード

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class SHIGURU_move : MonoBehaviour
{
private float Speed = 50F;

private float jumpSpeed = 100f;

public float Mass = 50f;

public float Gravity = -9.8f;

[SerializeField]
AnimationCurve curve;

// movedirection移動方向用変数=zeroでverctor3の(x,y,z)の3軸の数値を0にしてる
private Vector3 MoveDirection = Vector3.zero;

private CharacterController controller;

void Start()
{
//つけられてるコンポーネントの情報(x.y.z)を参照
controller = GetComponent<CharacterController>();
}

// Update is called once per frame
void Update()
{

//もしcontrollerの座標がisGrounded(地面に)ついていたら if (controller.isGrounded) { //=newで新しい追加情報?を与えて(Input.GetAxis("横"), 0.0f, Input.GetAxis("前後")) MoveDirection = new Vector3(Input.GetAxis("Horizontal"), 0.0f, Input.GetAxis("Vertical")); //=で新しくさっき格納した(Input.GetAxis("Horizontal"), 0.0f, Input.GetAxis("Vertical"));に入力ボタンでの移動スピードの情報を追加 //さっきの文にInput.GetAxis("Vertical") * Speedでも可能だった、見やすさ重視? MoveDirection = MoveDirection * Speed; //進行方向に向きを直す transform.rotation = Quaternion.LookRotation(MoveDirection); //ジャンプ if (Input.GetButton("Jump")) { jumpSpeed += 1.5f; // Mathf.Clampは(現在, 最小, 最大)で最小か最大を超えようとしたとき、最小か最大の値が左辺にあてはめられる jumpSpeed = Mathf.Clamp(jumpSpeed, 100, 250); } if (Input.GetButtonUp("Jump") || jumpSpeed == 250f) { //transform.Translate(0, 10, 0); //変数MoveDirextionのどこに力を加えるかを.yで上下に指定 xだと横 MoveDirection.y = jumpSpeed * curve.Evaluate(Time.deltaTime); Debug.Log(jumpSpeed); //ジャンプ後 力を初期値に jumpSpeed = 100f; } } //重力のかかる方向Y=Y方向の飛ぶ力から - (重力*時間=落下速度で力を引いてる MoveDirection.y = MoveDirection.y + (Gravity * Mass * Time.deltaTime); //controllerにMove機能(格納されてる各方向への移動する力とボタン情報 * 時間)重力による摩擦係数? controller.Move(MoveDirection * Time.deltaTime); }

}

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

Microsoft Visual Studio Community 2019
Version 16.7.7
VisualStudio.16.Release/16.7.7+30621.155
Microsoft .NET Framework
Version 4.8.04084

インストールされているバージョン:Community

Visual C++ 2019 00435-60000-00000-AA328
Microsoft Visual C++ 2019

C# ツール 3.7.0-6.20514.1+600c0dadd199296df3ed07dfabdc014563a77f7c
IDE で使用する C# コンポーネント。プロジェクトの種類や設定に応じて、異なるバージョンのコンパイラを使用できます。

IntelliCode 拡張機能 1.0
IntelliCode Visual Studio 拡張機能の詳細情報

Microsoft JVM Debugger 1.0
Provides support for connecting the Visual Studio debugger to JDWP compatible Java Virtual Machines

Microsoft MI-Based Debugger 1.0
Provides support for connecting Visual Studio to MI compatible debuggers

Microsoft Visual C++ ウィザード 1.0
Microsoft Visual C++ ウィザード

Microsoft Visual Studio VC パッケージ 1.0
Microsoft Visual Studio VC パッケージ

NuGet パッケージ マネージャー 5.7.0
Visual Studio 内の NuGet パッケージ マネージャー。NuGet の詳細については、https://docs.nuget.org/ にアクセスしてください

ProjectServicesPackage Extension 1.0
ProjectServicesPackage Visual Studio Extension Detailed Info

Visual Basic ツール 3.7.0-6.20514.1+600c0dadd199296df3ed07dfabdc014563a77f7c
IDE で使用する Visual Basic コンポーネント。プロジェクトの種類や設定に応じて、異なるバージョンのコンパイラを使用できます。

Visual Studio Code デバッグ アダプターのホスト パッケージ 1.0
Visual Studio Code デバッグ アダプターを Visual Studio でホストするための相互運用レイヤー

Visual Studio Tools for Unity 4.7.1.0
Visual Studio Tools for Unity

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

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

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

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

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

guest

回答1

0

ベストアンサー

エラーの原因はLookRotationに Vector3.zero ( =Vector3(0,0,0) ) が指定されてしまうからです。
コードでは GetAxis で移動の軸の値を取得していますが、キャラの停止でこのX軸Z軸がゼロになるわけです。
キャラの向きは移動方向から得ていますから、移動しなくなれば指標がなくなり、キャラがどちらを向いてよいのかわからなくなります。
そのため、直前に向いていた方向を何らかの方法で保持していなければなりません。

具体的には MoveDirection の前に、例えばTargetDirectionのような変数を設け、いったんそこに移動方向を入れて置き、その値が Vector3.zero の場合 MoveDirectionの値を変更しないとすればよいです。

TargetDirection = new Vector3(Input.GetAxis("Horizontal"), 0.0f, Input.GetAxis("Vertical")); if( TargetDirection != Vector3.zero ) { MoveDirection = TargetDirection; }

こうすればキャラが停止しても向きは変わらなくなります。

※インデントのないソースコードはとても見づらいので <code>ボタンで括って提示してください。

投稿2022/01/05 01:12

monmoko

総合スコア202

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

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

RYU_L

2022/01/05 10:31

ありがとうございます。ちょっと時間かかりましたが、解決しました コードの提出は次回以降気を付けます
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.49%

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

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

質問する

関連した質問