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

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

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

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

Unity3D

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

Unity

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

Q&A

2回答

5791閲覧

Unityの3Dゲームでjoystickを使って視点変更をしたいです

colors

総合スコア13

C#

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

Unity3D

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

Unity

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

0グッド

0クリップ

投稿2019/04/23 15:03

UnityでJoystickを使って視点変更を行いたいのですがうまくいきません。joystickを左下と右下に二つ作って、片方で移動、片方で視点変更という風にしたいです。移動の方はすでにできているのですが、視点が変えられないので横に曲がったりができません。(FPSが移動用のスクリプトです。StandardAssetsのコードを少し変えたものなので、無駄が多いと思います。すみません。主にvoid Updateのところを追加しました。視点変更用のスクリプトはFPSとほとんど変わらないので省きます。また、Jumpボタンはまだ未実装です)

FPS

1using System; 2using UnityEngine; 3using System.Collections; 4using UnityStandardAssets.CrossPlatformInput; 5using UnityStandardAssets.Utility; 6using Random = UnityEngine.Random; 7 8 9namespace UnityStandardAssets.Characters.FirstPerson 10{ 11 [RequireComponent(typeof (CharacterController))] 12 [RequireComponent(typeof (AudioSource))] 13 14public class FPS : MonoBehaviour { 15 16 [SerializeField] private bool m_IsWalking; 17 [SerializeField] [Range(0f, 1f)] private float m_RunstepLenghten; 18 [SerializeField] private float m_JumpSpeed; 19 [SerializeField] private float m_StickToGroundForce; 20 [SerializeField] private float m_GravityMultiplier; 21 22 [SerializeField] private bool m_UseFovKick; 23 [SerializeField] private FOVKick m_FovKick = new FOVKick(); 24 [SerializeField] private bool m_UseHeadBob; 25 [SerializeField] private CurveControlledBob m_HeadBob = new CurveControlledBob(); 26 [SerializeField] private LerpControlledBob m_JumpBob = new LerpControlledBob(); 27 [SerializeField] private float m_StepInterval; 28 [SerializeField] private AudioClip[] m_FootstepSounds; 29 [SerializeField] private AudioClip m_JumpSound; 30 [SerializeField] private AudioClip m_LandSound; 31 32 //先ほど作成したJoystick 33 [SerializeField] 34 private Joystick _joystick = null; 35 36 private Camera m_Camera; 37 private bool m_Jump; 38 private float m_YRotation; 39 private Vector2 m_Input; 40 private Vector3 m_MoveDir = Vector3.zero; 41 private CharacterController m_CharacterController; 42 private CollisionFlags m_CollisionFlags; 43 private bool m_PreviouslyGrounded; 44 private Vector3 m_OriginalCameraPosition; 45 private float m_StepCycle; 46 private float m_NextStep; 47 private bool m_Jumping; 48 private AudioSource m_AudioSource; 49 50 51 //移動速度 52 private const float SPEED = 0.2f; 53 54 // Use this for initialization 55 void Start () { 56 m_CharacterController = GetComponent<CharacterController>(); 57 m_Camera = Camera.main; 58 m_OriginalCameraPosition = m_Camera.transform.localPosition; 59 m_FovKick.Setup(m_Camera); 60 m_HeadBob.Setup(m_Camera, m_StepInterval); 61 m_StepCycle = 0f; 62 m_NextStep = m_StepCycle/2f; 63 m_Jumping = false; 64 m_AudioSource = GetComponent<AudioSource>(); 65 66 } 67 68 // Update is called once per frame 69 void Update () { 70 71 72 Vector3 pos = transform.position; 73 74 pos.x += _joystick.Position.x * SPEED; 75 pos.z += _joystick.Position.y * SPEED; 76 77 78 79 transform.position = pos; 80 } 81 82 private void FixedUpdate() 83 { 84 85 if (m_CharacterController.isGrounded) 86 { 87 m_MoveDir.y = -m_StickToGroundForce; 88 89 if (m_Jump) 90 { 91 m_MoveDir.y = m_JumpSpeed; 92 93 m_Jump = false; 94 m_Jumping = true; 95 } 96 } 97 else 98 { 99 m_MoveDir += Physics.gravity*m_GravityMultiplier*Time.fixedDeltaTime; 100 } 101 m_CollisionFlags = m_CharacterController.Move(m_MoveDir*Time.fixedDeltaTime); 102 103 } 104 105 106 private void UpdateCameraPosition(float speed) 107 { 108 Vector3 newCameraPosition; 109 if (!m_UseHeadBob) 110 { 111 return; 112 } 113 if (m_CharacterController.velocity.magnitude > 0 && m_CharacterController.isGrounded) 114 { 115 m_Camera.transform.localPosition = 116 m_HeadBob.DoHeadBob(m_CharacterController.velocity.magnitude + 117 (speed*(m_IsWalking ? 1f : m_RunstepLenghten))); 118 newCameraPosition = m_Camera.transform.localPosition; 119 newCameraPosition.y = m_Camera.transform.localPosition.y - m_JumpBob.Offset(); 120 } 121 else 122 { 123 newCameraPosition = m_Camera.transform.localPosition; 124 newCameraPosition.y = m_OriginalCameraPosition.y - m_JumpBob.Offset(); 125 } 126 m_Camera.transform.localPosition = newCameraPosition; 127 } 128 129 130 private void GetInput(out float speed) 131 { 132 // Read input 133 float horizontal = CrossPlatformInputManager.GetAxis("Horizontal"); 134 float vertical = CrossPlatformInputManager.GetAxis("Vertical"); 135 136 bool waswalking = m_IsWalking; 137 138#if !MOBILE_INPUT 139 // On standalone builds, walk/run speed is modified by a key press. 140 // keep track of whether or not the character is walking or running 141 m_IsWalking = !Input.GetKey(KeyCode.LeftShift); 142#endif 143 // set the desired speed to be walking or running 144 speed = m_IsWalking ? m_WalkSpeed : m_RunSpeed; 145 m_Input = new Vector2(horizontal, vertical); 146 147 // normalize input if it exceeds 1 in combined length: 148 if (m_Input.sqrMagnitude > 1) 149 { 150 m_Input.Normalize(); 151 } 152 153 // handle speed change to give an fov kick 154 // only if the player is going to a run, is running and the fovkick is to be used 155 if (m_IsWalking != waswalking && m_UseFovKick && m_CharacterController.velocity.sqrMagnitude > 0) 156 { 157 StopAllCoroutines(); 158 StartCoroutine(!m_IsWalking ? m_FovKick.FOVKickUp() : m_FovKick.FOVKickDown()); 159 } 160 } 161 162 private void OnControllerColliderHit(ControllerColliderHit hit) 163 { 164 Rigidbody body = hit.collider.attachedRigidbody; 165 //dont move the rigidbody if the character is on top of it 166 if (m_CollisionFlags == CollisionFlags.Below) 167 { 168 return; 169 } 170 171 if (body == null || body.isKinematic) 172 { 173 return; 174 } 175 body.AddForceAtPosition(m_CharacterController.velocity*0.1f, hit.point, ForceMode.Impulse); 176 } 177 } 178}

MouseLook

1using System; 2using UnityEngine; 3using UnityStandardAssets.CrossPlatformInput; 4 5namespace UnityStandardAssets.Characters.FirstPerson 6{ 7 [Serializable] 8 public class MouseLook 9 { 10 public float XSensitivity = 2f; 11 public float YSensitivity = 2f; 12 public bool clampVerticalRotation = true; 13 public float MinimumX = -90F; 14 public float MaximumX = 90F; 15 public bool smooth; 16 public float smoothTime = 5f; 17 18 19 private Quaternion m_CharacterTargetRot; 20 private Quaternion m_CameraTargetRot; 21 22 23 public void Init(Transform character, Transform camera) 24 { 25 m_CharacterTargetRot = character.localRotation; 26 m_CameraTargetRot = camera.localRotation; 27 } 28 29 30 public void LookRotation(Transform character, Transform camera) 31 { 32 float yRot = CrossPlatformInputManager.GetAxis("Mouse X") * XSensitivity; 33 float xRot = CrossPlatformInputManager.GetAxis("Mouse Y") * YSensitivity; 34 35 m_CharacterTargetRot *= Quaternion.Euler (0f, yRot, 0f); 36 m_CameraTargetRot *= Quaternion.Euler (-xRot, 0f, 0f); 37 38 if(clampVerticalRotation) 39 m_CameraTargetRot = ClampRotationAroundXAxis (m_CameraTargetRot); 40 41 if(smooth) 42 { 43 character.localRotation = Quaternion.Slerp (character.localRotation, m_CharacterTargetRot, 44 smoothTime * Time.deltaTime); 45 camera.localRotation = Quaternion.Slerp (camera.localRotation, m_CameraTargetRot, 46 smoothTime * Time.deltaTime); 47 } 48 else 49 { 50 character.localRotation = m_CharacterTargetRot; 51 camera.localRotation = m_CameraTargetRot; 52 } 53 54 55 } 56 57 Quaternion ClampRotationAroundXAxis(Quaternion q) 58 { 59 q.x /= q.w; 60 q.y /= q.w; 61 q.z /= q.w; 62 q.w = 1.0f; 63 64 float angleX = 2.0f * Mathf.Rad2Deg * Mathf.Atan (q.x); 65 66 angleX = Mathf.Clamp (angleX, MinimumX, MaximumX); 67 68 q.x = Mathf.Tan (0.5f * Mathf.Deg2Rad * angleX); 69 70 return q; 71 } 72 73 } 74} 75

#試したことなど
joystickはこちらのサイトを参考に作成しました。最後のスクリプトだけ変えています。いろんなサイトを調べて見たのですが、こちらこちらのサイトなど。MouseLookをJoystickに対応させれれば、とも思いましたけど、やり方がわかりません。もっと簡単にできるものだと思っていましたが想像以上に時間を使ってしまっています。どなたかお願いします。
#環境
MacOs Unity2018.1.0f2

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

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

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

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

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

guest

回答2

0

joystickを左下と右下に二つ作って、片方で移動、片方で視点変更という風にしたいです。

Joystick Packをお使いになると簡単だと思いますよ。導入簡単だしおススメです。

投稿2019/04/24 01:22

stdio

総合スコア3307

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

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

0

UnityStandardAssets使ってるなら、Joystickのコードを自作する必要は無いです。
(というか参考サイトの1つ目のリンク先はこのやり方です)
[Unity]CrossPlatformInputを使ってみる - Qiita

投稿2019/04/24 00:21

sakura_hana

総合スコア11427

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問