今UnityでFPSゲームを開発していて、マウスを左右に動かしたらプレイヤーがY軸に回転し、マウスを上下に動かしたらカメラが指定した角度までx軸に回転するようにしたのですが、これだと銃口やプレイヤーの手の位置などがそのままなのでマウスを上下に移動させるとカメラだけ動いて不自然になってしまいます。なので、 マウスを上下に移動させるとプレイヤーのspineボーンをx軸に回転させるようにしたいです。どう変えれば良いでしょうか? なお、spineボーンはプレイヤーの腰のボーンのことです。
参考にした動画
参考にしたサイト
C#
1using System.Collections; 2using System.Collections.Generic; 3using UnityEngine; 4 5public class PlayerCamera : MonoBehaviour 6{ 7 public float mouseSensitivity = 100f; 8 public Transform playerBody; 9 float xRotation = 0f; 10 [SerializeField] 11 private Transform spine; 12 void Start() 13 { 14 Cursor.lockState = CursorLockMode.Locked; 15 } 16 17 void LateUpdate() 18 { 19 float mouseX = Input.GetAxis("Mouse X") * mouseSensitivity * Time.deltaTime; 20 float mouseY = Input.GetAxis("Mouse Y") * mouseSensitivity * Time.deltaTime; 21 xRotation -= mouseY; 22 xRotation = Mathf.Clamp(xRotation, -90, 90); 23 transform.localRotation = Quaternion.Euler(xRotation, 0f, 0f); 24 playerBody.Rotate(Vector3.up * mouseX); 25 //spine.rotation = Quaternion.Euler(spine.eulerAngles.x + xRotation, spine.eulerAngles.y, spine.eulerAngles.z); 26 } 27} 28
自分で調べて試した結果どうなったかを記載してください。
なお、アニメしているボーンを動かすなら「Update」ではなく「LateUpdate」でないと反映されないのではないかと思います。
ありがとうございます。カメラをプレイヤーの頭の子として設置し、以下のコードに修正したらできました。
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class PlayerCamera : MonoBehaviour
{
public float mouseSensitivity = 100f;
public Transform playerBody;
float xRotation = 0f;
[SerializeField]
private Transform spine;
void Start()
{
Cursor.lockState = CursorLockMode.Locked;
}
void LateUpdate()
{
float mouseX = Input.GetAxis("Mouse X") * mouseSensitivity * Time.deltaTime;
float mouseY = Input.GetAxis("Mouse Y") * mouseSensitivity * Time.deltaTime;
xRotation -= mouseY;
xRotation = Mathf.Clamp(xRotation, -90, 90);
playerBody.Rotate(Vector3.up * mouseX);
spine.rotation = Quaternion.Euler(spine.eulerAngles.x + xRotation, spine.eulerAngles.y, spine.eulerAngles.z);
}
}
回答1件
あなたの回答
tips
プレビュー