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

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

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

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

Q&A

解決済

1回答

3180閲覧

Unity キャラクターに重力を与えると倒れてしまう

taiyou1116

総合スコア1

Unity

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

0グッド

0クリップ

投稿2021/07/08 14:40

編集2021/07/08 14:43

CharacterControllerで移動、cinemachineを使いカメラの挙動を取っています。
ジャンプを使いたいと思い、重力の処理を加えましたが起動するとキャラが倒れてしまいます。

C#

1using System.Collections; 2using System.Collections.Generic; 3using UnityEngine; 4 5public class TestMove : Photon.Pun.MonoBehaviourPun 6{ 7 CharacterController character; 8 Animator animator; 9 //Quaternion targetRotation; 10 Vector3 velocity; 11 Vector3 colect; 12 public float gravity = 10f; 13 public float speed = 10f; 14 public float rayDistance = 0.3f; 15 public bool isGround = false; 16 void Awake() 17 { 18 character = GetComponent<CharacterController>(); 19 animator = GetComponent<Animator>(); 20 } 21 void Update() 22 { 23 if(!photonView.IsMine) 24 { 25 return; 26 } 27 //targetRotation = transform.rotation; 28 var x = Input.GetAxisRaw("Horizontal"); 29 var z = Input.GetAxisRaw("Vertical"); 30 var horizontalRotation = Quaternion.AngleAxis(Camera.main.transform.eulerAngles.y,Vector3.up); 31 velocity = horizontalRotation * new Vector3(x * speed,0,z * speed); 32ここに重力の処理を加えました↓ 33 velocity.y -= gravity * Time.deltaTime; 34 35 character.Move(velocity * Time.deltaTime); 36 if(velocity.magnitude > 0.5f) 37 { 38 transform.rotation = Quaternion.LookRotation(velocity,Vector3.up); 39 } 40 41 animator.SetFloat("Speed",Mathf.Abs(z)); 42 animator.SetFloat("Run",Mathf.Abs(x)); 43 44 } 45} 46

以下のような感じになってしまいます。
カメラの向きの力を考慮することで解消するのかと思っていますが、どのように修正するべきかわかりません。よろしくお願いします。イメージ説明

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

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

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

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

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

stdio

2021/07/08 22:12

Unityにはプログラムからではなく設定画面から重力(Rigidbody)を付与することが出来るのですが、そちらの方から設定しましたか?
taiyou1116

2021/07/09 01:11

すみません、言葉不足でした。 Rigidbodyで重力を付けても、ジャンプを行った際にキャラのRotation のxが45度傾いてしまうため根本的に、スクリプトのどの部分がこのような回転を引き起こしているか知りたいです。
stdio

2021/07/09 01:25

`var horizontalRotation = Quaternion.AngleAxis(Camera.main.transform.eulerAngles.y,Vector3.up);` `velocity = horizontalRotation * new Vector3(x * speed,0,z * speed);` の値を確認した方がいいと思います。予想ですが、その2つのベクトルが原因で、`transform.rotation = Quaternion.LookRotation(velocity,Vector3.up);`を通った時にその向きに向こうとしているのだと思います。
guest

回答1

0

自己解決

transform.rotation = Quaternion.LookRotation(velocity,Vector3.up);
この部分が問題だったようです。velocityのyの値に重力(-の値)をいれると下方向を向いてしまうということでした。なので、新しくvelocity.yの値だけ0のVector3型の変数を作ることで解決しました。

投稿2021/07/09 12:08

taiyou1116

総合スコア1

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.47%

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

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

質問する

関連した質問