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

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

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

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

Q&A

解決済

1回答

730閲覧

Unity キャラクターの視点の方向に腰を曲げたい

creatorsGame

総合スコア18

Unity3D

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

0グッド

0クリップ

投稿2020/01/13 03:56

編集2020/01/13 03:58

この記事を参考に以下の紫の矢印の方向に視点の上下の向きに腰が曲がるようにできたのですが、次は以下の画像の分かりずらいかもしれませんが、赤の矢印の方向に腰が曲がるようにしたいです。どうすれば良いでしょうか?
イメージ説明

C#

1using System.Collections; 2using System.Collections.Generic; 3using UnityEngine; 4 5public class Player : MonoBehaviour 6{ 7 //キャラクターコントローラー 8 private CharacterController cCon; 9 // キャラクターの速度 10 private Vector3 velocity; 11 // Animator 12 private Animator animator; 13 // 歩くスピード 14 [SerializeField] 15 private float walkSpeed = 1.5f; 16 // 走るスピード 17 [SerializeField] 18 private float runSpeed = 2.5f; 19 // 走っているかどうか 20 private bool runFlag = false; 21 // キャラクター視点のカメラ 22 private Transform myCamera; 23 // キャラクター視点のカメラで回転出来る限度 24 [SerializeField] 25 private float cameraRotateLimit = 30f; 26 // カメラの上下の移動方法。マウスを上で上を向く場合はtrue、マウスを上で下を向く場合はfalseを設定 27 [SerializeField] 28 private bool cameraRotForward = true; 29 // カメラの角度の初期値 30 private Quaternion initCameraRot; 31 // キャラクター、カメラ(視点)の回転スピード 32 [SerializeField] 33 private float rotateSpeed = 2f; 34 // カメラのX軸の角度変化値 35 private float xRotate; 36 // キャラクターのY軸の角度変化値 37 private float yRotate; 38 // マウス移動のスピード 39 [SerializeField] 40 private float mouseSpeed = 2f; 41 // キャラクターのY軸の角度 42 private Quaternion charaRotate; 43 // カメラのX軸の角度 44 private Quaternion cameraRotate; 45 // キャラが回転中かどうか? 46 private bool charaRotFlag = false; 47 // キャラクターの脊椎のボーン 48 [SerializeField] 49 private Transform spine; 50 // カメラのTransform 51 [SerializeField] 52 private Transform cameraPosition; 53 54 55 56 void Start() 57 { 58 if (Input.GetKeyDown(KeyCode.Escape)) 59 { 60 Cursor.visible = true; 61 Cursor.lockState = CursorLockMode.None; 62 } 63 //キャラクターコントローラの取得 64 cCon = GetComponent<CharacterController>(); 65 animator = GetComponent<Animator>(); 66 myCamera = GetComponentInChildren<Camera>().transform; // キャラクター視点のカメラの取得 67 initCameraRot = myCamera.localRotation; 68 charaRotate = transform.localRotation; 69 cameraRotate = myCamera.localRotation; 70 71 Cursor.visible = false; 72 Cursor.lockState = CursorLockMode.Locked; 73 } 74 void Update() 75 { 76 77 // キャラクターの向きを変更する 78 RotateChara(); 79 // 視点の向きを変える 80 RotateCamera(); 81 // ボーンをカメラの角度を向かせる 82 RotateBone(); 83 84 // キャラクターコントローラのコライダが地面と接触してるかどうか 85 if (cCon.isGrounded) 86 { 87 88 velocity = Vector3.zero; 89 90 velocity = (transform.forward * Input.GetAxis("Vertical") + transform.right * Input.GetAxis("Horizontal")).normalized; 91 92 // 走るか歩くかでスピードを変更する 93 float speed = 0f; 94 95 if ((Input.GetButton("Run"))) //&& Input.GetButton("Fire2") == false) 96 { 97 runFlag = true; 98 speed = runSpeed; 99 } 100 else 101 { 102 runFlag = false; 103 speed = walkSpeed; 104 } 105 velocity *= speed; 106 107 if (velocity.magnitude > 0f || charaRotFlag) 108 { 109 if (runFlag && !charaRotFlag) 110 { 111 animator.SetFloat("Speed", 2.1f); 112 } 113 else 114 { 115 animator.SetFloat("Speed", 1f); 116 } 117 } 118 else 119 { 120 animator.SetFloat("Speed", 0f); 121 } 122 } 123 velocity.y += Physics.gravity.y * Time.deltaTime; // 重力値を計算 124 cCon.Move(velocity * Time.deltaTime); // キャラクターコントローラのMoveを使ってキャラクターを移動させる 125 } 126 127 // キャラクターの角度を変更 128 void RotateChara() 129 { 130 // 横の回転値を計算 131 float yRotate = Input.GetAxis("Mouse X") * mouseSpeed; 132 133 charaRotate *= Quaternion.Euler(0f, yRotate, 0f); 134 135 136 // キャラクターの回転を実行 137 transform.localRotation = Quaternion.Slerp(transform.localRotation, charaRotate, rotateSpeed * Time.deltaTime); 138 } 139 140 141 // カメラの角度を変更 142 void RotateCamera() 143 { 144 145 float xRotate = Input.GetAxis("Mouse Y") * mouseSpeed; 146 147 // マウスを上に移動した時に上を向かせたいなら反対方向に角度を反転させる 148 if (cameraRotForward) 149 { 150 xRotate *= -1; 151 } 152 // 一旦角度を計算する 153 cameraRotate *= Quaternion.Euler(xRotate, 0f, 0f); 154 // カメラのX軸の角度が限界角度を超えたら限界角度に設定 155 var resultYRot = Mathf.Clamp(Mathf.DeltaAngle(initCameraRot.eulerAngles.x, cameraRotate.eulerAngles.x), -cameraRotateLimit, cameraRotateLimit); 156 // 角度を再構築 157 cameraRotate = Quaternion.Euler(resultYRot, cameraRotate.eulerAngles.y, cameraRotate.eulerAngles.z); 158 // カメラの視点変更を実行 159 cameraPosition.localRotation = Quaternion.Slerp(myCamera.localRotation, cameraRotate, rotateSpeed * Time.deltaTime); 160 } 161 162 163 void RotateBone() 164 { 165 // 腰のボーンの角度をカメラの向きにする 166 spine.rotation = Quaternion.Euler(spine.eulerAngles.x+ myCamera.localEulerAngles.x, spine.eulerAngles.y, spine.eulerAngles.z); 167 } 168 169 void LateUpdate() 170 { 171 // ボーンをカメラの角度を向かせる 172 RotateBone(); 173 174 // カメラの位置と角度を変更 175 myCamera.localRotation = cameraPosition.localRotation; 176 myCamera.position = cameraPosition.position; 177 } 178} 179

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

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

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

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

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

guest

回答1

0

自己解決

//腰のボーンの角度をカメラの向きにするを以下に変えてできました。

C#

1 // 腰のボーンの角度をカメラの向きにする 2 spine.rotation = Quaternion.Euler(spine.eulerAngles.x, spine.eulerAngles.y,spine.eulerAngles.z + myCamera.localEulerAngles.x);

投稿2020/01/13 07:27

creatorsGame

総合スコア18

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問