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

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

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

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

Unity3D

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

Unity

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

Q&A

解決済

1回答

2473閲覧

Unity C# 一人称視点の視野角を制限したい

yukineko184

総合スコア16

C#

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

Unity3D

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

Unity

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

0グッド

1クリップ

投稿2019/05/20 06:13

前提・実現したいこと

一人称視点のゲームを作っているのですが視野角の制限の仕方がわからないです

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

視野角が制限できず視点が一回転してしまう

該当のソースコード

C#

1using System.Collections; 2using System.Collections.Generic; 3using UnityEngine; 4using UnityEngine.UI; 5using UnityEngine.SceneManagement; 6 7public class NewBehaviourScript : MonoBehaviour { 8 9 private int jumpcount = 0; 10 private bool isJump = false; 11 private GameObject char_in; 12 private Rigidbody char_rb; 13 bool pause_flag; 14 float move_x; 15 float move_z; 16 float rota_y; 17 float rota_x; 18 float mouse_x; 19 float mouse_y; 20 float tmr; 21 string test = "hey"; 22 public const int MAX_JUMP_COUNT = 1; 23 public float force = 5.0f; 24 public float jumpspeed; 25 public float gravity; 26 public float speed = 2.0f; 27 public float sensi = 2.0f; 28 public Text gameover; 29 private Text tex; 30 31 void Start() 32 { 33 char_in = GameObject.Find("Charainner"); 34 char_rb = GetComponent<Rigidbody>(); 35 pause_flag = false; 36 tex = gameover.GetComponent<Text>(); 37 } 38 39 void Update() 40 { 41 tmr = 100; 42 mouse_x = Input.GetAxis("Mouse X"); 43 mouse_y = Input.GetAxis("Mouse Y"); 44 rota_y = mouse_x * sensi; 45 rota_x = mouse_y * sensi * -1f; 46 transform.Rotate(0, rota_y, 0); 47 char_in.transform.Rotate(rota_x, 0, 0); 48 49 move_x = 0f; 50 move_z = 0f; 51 if (Input.GetKey(KeyCode.D)) 52 { 53 move_x += speed; 54 } 55 if (Input.GetKey(KeyCode.A)) 56 { 57 move_x -= speed; 58 } 59 if (Input.GetKey(KeyCode.W)) 60 { 61 move_z += speed; 62 } 63 if (Input.GetKey(KeyCode.S)) 64 { 65 move_z -= speed; 66 } 67 if (Input.GetKeyUp(KeyCode.LeftShift) /*&& speed >= 4*/) 68 { 69 speed = 2; 70 } 71 if (Input.GetButtonDown("Jump") && jumpcount < MAX_JUMP_COUNT) 72 { 73 char_rb.AddForce(Vector3.up * jumpspeed); 74 isJump = true; 75 } 76 /* 77 char_rb.velocity = move_z * transform.forward + move_x * transform.right; 78 */ 79 var move = move_z * transform.forward + move_x * transform.right; 80 char_rb.velocity = new Vector3(move.x, char_rb.velocity.y, move.z); 81 if (pause_flag) 82 { 83 Cursor.visible = true; 84 Cursor.lockState = CursorLockMode.None; 85 } 86 else 87 { 88 Cursor.visible = false; 89 Cursor.lockState = CursorLockMode.Locked; 90 } 91 if (Input.GetKey(KeyCode.Escape)) 92 { 93 pause_flag = true; 94 } 95 if(tex.isActiveAndEnabled == true) 96 { 97 speed = 0; 98 if (Input.GetKeyDown("t")) 99 { 100 SceneManager.LoadScene("title"); 101 } 102 if (Input.GetKeyDown("r")) 103 { 104 SceneManager.LoadScene("main"); 105 } 106 } 107 108 } 109 110 void FixedUpdate() 111 { 112 if (isJump) { 113 jumpcount++; 114 isJump = false; 115 } 116 } 117 118 119 void OnCollisionEnter(Collision col) 120 { 121 if(col.gameObject.tag == "Ground") 122 { 123 jumpcount = 0; 124 } 125 } 126 127 void OnCollisionStay(Collision col) 128 { 129 if (Input.GetKeyDown(KeyCode.LeftShift) && col.gameObject.tag == "Ground") 130 { 131 Debug.Log(test); 132 speed = 4; 133 } 134 } 135} 136

試したこと

単純に視野角の数値を制限するなど
自分でできる範囲で調べて試したのですができませんでした・・・

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

Unity 2018.2.5f.1 Personal
Visual Studio

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

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

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

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

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

guest

回答1

0

ベストアンサー

Rotateによる回転方式だと、現在どこまで回っているか分からず範囲制限をやりにくい気がしますので、回転方法を下記のようにしてみるのはどうでしょうか。

C#

1using System.Collections; 2using System.Collections.Generic; 3using UnityEngine; 4using UnityEngine.UI; 5using UnityEngine.SceneManagement; 6 7public class NewBehaviourScript : MonoBehaviour 8{ 9 10 private int jumpcount = 0; 11 private bool isJump = false; 12 private GameObject char_in; 13 private Rigidbody char_rb; 14 bool pause_flag; 15 float move_x; 16 float move_z; 17 float rota_y; 18 float rota_x; 19 float char_in_angle_x; // 現在のchar_in回転角を表すフィールドを追加 20 float mouse_x; 21 float mouse_y; 22 float tmr; 23 string test = "hey"; 24 public const int MAX_JUMP_COUNT = 1; 25 public float force = 5.0f; 26 public float jumpspeed; 27 public float gravity; 28 public float speed = 2.0f; 29 public float sensi = 2.0f; 30 public Text gameover; 31 private Text tex; 32 33 void Start() 34 { 35 char_in = GameObject.Find("Charainner"); 36 char_rb = GetComponent<Rigidbody>(); 37 pause_flag = false; 38 tex = gameover.GetComponent<Text>(); 39 char_in_angle_x = char_in.transform.localEulerAngles.x; // 初期角をセット 40 } 41 42 void Update() 43 { 44 tmr = 100; 45 mouse_x = Input.GetAxis("Mouse X"); 46 mouse_y = Input.GetAxis("Mouse Y"); 47 rota_y = mouse_x * sensi; 48 rota_x = mouse_y * sensi * -1f; 49 transform.Rotate(0, rota_y, 0); 50 char_in_angle_x = Mathf.Clamp(char_in_angle_x + rota_x, -90f, 90f); // 回転角を積算、さらに-90°から+90°に範囲制限 51 char_in.transform.localEulerAngles = new Vector3(char_in_angle_x, 0f, 0f); // Rotateの代わりに、localEulerAnglesへの代入により回す 52 53 // 省略 54 } 55 56 // 省略 57}

投稿2019/05/22 20:16

編集2019/05/23 02:34
Bongo

総合スコア10807

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

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

yukineko184

2019/05/23 01:21

完全に理想の動きをするようになりました。ありがとうございます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.49%

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

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

質問する

関連した質問