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

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

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

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

Unity3D

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

Q&A

0回答

689閲覧

[Unity3D] 水平より下を向かないように補正する方法が知りたい。

退会済みユーザー

退会済みユーザー

総合スコア0

C#

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

Unity3D

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

0グッド

0クリップ

投稿2021/08/10 02:28

提示コードのコメント部内部のコードですが武器が90度より下にったら90度より下に行って提示画像のうに地面に埋まらないように補正したいのですがどうすればいいのでしょうか?コードがわかりません。

参考サイト: https://xr-hub.com/archives/11515
イメージ説明

cs

1using System.Collections; 2using System.Collections.Generic; 3using UnityEngine; 4using System.Linq; 5 6 7 8 9//攻撃管理 10public class Player_Attack_Control : MonoBehaviour 11{ 12 13 [SerializeField, Range(3, 10)] private float instancePositionDistance; //武器が生成される距離 14 [SerializeField, Range(3, 100)] private int objectPoolInstance; //オブジェクトプールの数 15 [SerializeField, Range(0.0f, 3.0f)] private float intervalTime; //攻撃間隔 16 [SerializeField] private List<GameObject> weaponList; //武器リスト 17 18 private List<List<GameObject>> instanceWeapon; //オブジェクト 19 private float time; //時間 20 private int listNumber; //選択中の武器 21 private GameObject weaponInstancePosition; //武器の生成場所 22 private Vector3 forward; //前方向 23 private bool isInstance; //生成するかどうか? 24 private GameObject nowInstance; //現在選択している武器 25 private bool isChangeWeapon; //武器切替 26 private List<GameObject> weapon; //武器切替オブジェクト 27 28 29 private List<float> angle; 30 private float rotateSpeed = 50f; 31 private Vector3 rotateDistance; 32 33 34 public void Start() 35 { 36 37 //変数初期化 38 listNumber = 0; 39 weaponInstancePosition = transform.Find("WeaponInstancePosition").gameObject; 40 Vector3 p = weaponInstancePosition.transform.position - transform.position; 41 rotateDistance = new Vector3(p.magnitude, p.magnitude, p.magnitude); 42 time = weaponList[listNumber].GetComponent<Bullet>().attackIntervalTime; 43 isInstance = true; 44 weapon = new List<GameObject>(); 45 angle = new List<float>(); 46 float r = 0; 47 instanceWeapon = new List<List<GameObject>>(); 48 49 //武器インスタンスプール作成 50 foreach (GameObject g in weaponList) 51 { 52 instanceWeapon.Add(new List<GameObject>()); 53 54 for (int i = 0; i < objectPoolInstance; i++) 55 { 56 instanceWeapon.Last().Add(Instantiate(g, weaponInstancePosition.transform.position, weaponInstancePosition.transform.rotation)); 57 instanceWeapon.Last().Last().SetActive(false); 58 } 59 } 60 61 //武器セレクト インスタンスプール作成 62 foreach (GameObject g in weaponList) 63 { 64 weapon.Add(Instantiate(g, weaponInstancePosition.transform.position, weaponInstancePosition.transform.rotation)); 65 weapon.Last().SetActive(false); 66 weapon.Last().GetComponent<MeshRenderer>().material = Resources.Load("Materials/Player_View_Bullet") as Material; 67 68 angle.Add(r); 69 r += 20; 70 } 71 } 72 73 //カメラの前方向を取得 74 void Forward() 75 { 76 Vector3 f = Vector3.Scale(Camera.main.transform.forward.normalized, new Vector3(1, 0, 1)).normalized; 77 forward = (f + Camera.main.transform.forward).normalized; 78 } 79 80 81 void Update() 82 { 83 Forward(); //カメラの前方向 84 Attack(); //攻撃 85 Select(); //選択 86 View(); //表示 87 88 89 TimeInterval(); //間隔 90 91 } 92 93 private void TimeInterval() 94 { 95 if (time < weaponList[listNumber].GetComponent<Bullet>().attackIntervalTime) 96 { 97 time += Time.deltaTime; 98 } 99 else 100 { 101 time = weaponList[listNumber].GetComponent<Bullet>().attackIntervalTime; 102 } 103 } 104 105 106 //攻撃 107 private void Attack() 108 { 109 //左クリックで攻撃 110 if (Input.GetMouseButton(0)) 111 { 112 if (time >= weaponList[listNumber].GetComponent<Bullet>().attackIntervalTime) 113 { 114 nowInstance.transform.rotation = Quaternion.LookRotation(forward) * Quaternion.Euler(90, 0, 0); 115 nowInstance.GetComponent<Bullet>().Firing(forward); 116 isInstance = true; 117 time = 0; 118 } 119 } 120 } 121 122 //武器選択アニメーション 123 private void SelectAnimation() 124 { 125 /* 126 if (isChangeWeapon == true) 127 { 128 129 weapon[listNumber].gameObject.transform.Find("SelectCollision").gameObject.tag = "SelectWeapon"; 130 131 for (int i = 0; i < weaponList.Count(); i++) 132 { 133 weapon[i].gameObject.SetActive(true); 134 Vector3 v = transform.position + Quaternion.Euler(0f, angle[i], 0f) * rotateDistance; 135 v.y = transform.position.y + weapon[i].gameObject.transform.localScale.y / 2; 136 weapon[i].gameObject.transform.position = v; 137 138 angle[i] += rotateSpeed * Time.deltaTime; 139 140 if (angle[i] > 360) 141 { 142 angle[i] = 0; 143 } 144 145 if(weaponInstancePosition.GetComponent<WeaponInstancePosition>().isSelectWeaponHit == true) 146 { 147 weapon[listNumber].gameObject.transform.Find("SelectCollision").gameObject.tag = "Untagged"; 148 149 for (int j = 0; j < weaponList.Count(); j++) 150 { 151 weapon[j].gameObject.SetActive(false); 152 angle[j] = 0; 153 } 154 155 isChangeWeapon = false; 156 break; 157 } 158 } 159 } 160 else 161 { 162 163 } 164 */ 165 } 166 167 //武器選択 168 public void Select() 169 { 170 if (Input.GetKeyDown(KeyCode.Q)) 171 { 172 if(listNumber > 0) 173 { 174 listNumber--; 175 isChangeWeapon = true; 176 time = 0; 177 } 178 } 179 else if (Input.GetKeyDown(KeyCode.E)) 180 { 181 if (listNumber < weaponList.Count - 1) 182 { 183 listNumber++; 184 isChangeWeapon = true; 185 time = 0; 186 187 } 188 } 189 190 SelectAnimation(); 191 192 193 194 } 195 196 //武器を表示 197 private void View() 198 { 199 if(isInstance == true) 200 { 201 nowInstance = CreateObject(listNumber,weaponInstancePosition.transform.position, weaponInstancePosition.transform.rotation); 202 isInstance = false; 203 } 204 205 weaponInstancePosition.transform.position = transform.position + forward * instancePositionDistance; 206 Vector3 p = weaponInstancePosition.transform.position; 207 p.y += transform.localScale.y; 208 if(nowInstance != null) 209 { 210 nowInstance.transform.position = p; 211 212 nowInstance.transform.rotation = Quaternion.LookRotation(forward) * Quaternion.Euler(90, 0, 0); 213/////////////////////////////////////////////////////////////////////////////////////////////////////////////////// 214 if(nowInstance.transform.rotation.x < 90) 215 { 216 217 218 219 } 220////////////////////////////////////////////////////////////////////////////////////////////////////////////////// 221 } 222 } 223 224 225 226 227 228 private void FixedUpdate() 229 { 230 231 } 232 233 234 //オブジェクトプール オブジェクト生成 235 GameObject CreateObject(int select, Vector3 pos, Quaternion rot) 236 { 237 foreach (GameObject gg in instanceWeapon[select]) 238 { 239 if (gg.activeSelf == false) 240 { 241 gg.SetActive(true); 242 gg.gameObject.GetComponent<Bullet>().Init(); 243 244 gg.transform.position = pos; 245 gg.transform.rotation = rot; 246 247 return gg; 248 } 249 } 250 251 instanceWeapon[select].Add(Instantiate(weaponList[select])); 252 instanceWeapon[select].Last().SetActive(true); 253 instanceWeapon[select].Last().transform.position = pos; 254 instanceWeapon[select].Last().transform.rotation = rot; 255 instanceWeapon.Last().Last().gameObject.GetComponent<Bullet>().Init(); 256 return instanceWeapon.Last().Last().gameObject; 257 } 258 259 260 261 262 263 264 private void OnTriggerEnter(Collider other) 265 { 266 267 268 } 269 270 271 272} 273

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

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

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

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

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

guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだ回答がついていません

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

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

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問