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

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

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

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

Q&A

0回答

949閲覧

[Unity3D] 球体をプレイヤーを中心に回転させてカメラの前に表示させいたい。

退会済みユーザー

退会済みユーザー

総合スコア0

Unity3D

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

0グッド

0クリップ

投稿2021/07/25 05:19

編集2021/07/25 05:56

提示コードのコメント部内部のコードですがプレイヤーの周りを周回する球体オブジェクトですがこれをプレイヤーの周り回ることを前提でカメラの前に周回させいたです。例えば左にカメラが回転したら左側に球体が周回してカメラの前に移動するという処理なのですが球体がカメラの前を向いているためこれ以上球体が回転しません。球体をカメラの前に持っていくにはどうすればいいのでしょうか?

試したこと
カメラの前方向と球体の前方向のベクトルで内積を取ってそのラジアンをtransform.RotateAround関数に入れましたが回転し続けてしまいます。

イメージ説明

cs

1using System.Collections; 2using System.Collections.Generic; 3using UnityEngine; 4using System.Linq; 5public class PlayerControl : MonoBehaviour 6{ 7 private CharacterController cc; 8 private Rigidbody rb; 9 private Vector3 moveForward; 10 private Animator anim; 11 12 public ItemShopMenu shop; 13 14 15 [SerializeField] public List<GameObject> weaponList; 16 17 private int weaponSelect; 18 19 public bool isShopArea; //ショップエリアかどうか? 20 private bool isShopMenu; //ショップ画面を開いているかどうか? 21 22 [SerializeField] private float moveSpeed = 0.001f; //移動速度 23 24 //攻撃 25 private GameObject weapon; 26 [SerializeField] private GameObject weaponInstancePosition; 27 28 //移動 29 private float inputHorizontal; 30 private float inputVertical; 31 private bool isJump; 32 33 34 public PlayerStatus status; //パラメータ 35 36 //時間 37 private float waitTime = 0.3f; 38 private float wait; 39 40 private float jumpTime; 41 42 43 44 void Start() 45 { 46 isJump = true; 47 isShopArea = false; 48 isShopMenu = false; 49 weaponSelect = 0; 50 anim = GetComponent<Animator>(); 51 cc = GetComponent<CharacterController>(); 52 rb = GetComponent<Rigidbody>(); 53 54 //weaponList = new List<GameObject>(); 55 //weaponList.Add(Resources.Load("Prefabs/Bullet/Player/spear6") as GameObject); 56 weapon = weaponList.Last(); 57 58 } 59 60 61 private void FixedUpdate() 62 { 63 64 } 65 66 67 void Update() 68 { 69 ShopMenu(); 70 71 if(isShopMenu == false) 72 { 73 AttackControl(); //攻撃 74 MoveControl(); //移動 75 } 76 } 77 78 void ShopMenu() 79 { 80 if(isShopArea == true) 81 { 82 if(Input.GetKeyDown(KeyCode.T)) 83 { 84 isShopMenu = !isShopMenu; 85 } 86 } 87 88 shop.isShopping = isShopMenu; 89 90 91 } 92 93 //攻撃 94 void AttackControl() 95 { 96 if(Input.GetKeyDown(KeyCode.Q)) 97 { 98 if(weaponSelect > 0) 99 { 100 weaponSelect--; 101 } 102 103 weapon = weaponList[weaponSelect]; 104 105 } 106 else if (Input.GetKeyDown(KeyCode.E)) 107 { 108 if (weaponSelect < weaponList.Count -1) 109 { 110 weaponSelect++; 111 } 112 113 weapon = weaponList[weaponSelect]; 114 } 115 116 ////////////////////////////////////////////////////////////////////////////////////////////////////////////// 117 118 Vector3 f = Vector3.Scale(Camera.main.transform.forward, new Vector3(1, 0, 1)); 119 Vector3 v = (f + Camera.main.transform.right).normalized; 120 121 122 if (Input.GetMouseButton(0)) 123 { 124 125 if (wait >= waitTime || wait == 0) 126 { 127 GameObject g = Instantiate(weapon, transform.position, Quaternion.LookRotation(v)); 128 g.GetComponent<Bullet>().moveVector = Vector3.Scale(transform.position,v); 129 g.gameObject.transform.Rotate(new Vector3(90,0,0)); 130 131 wait = 0; 132 } 133 wait += Time.deltaTime; 134 } 135 else 136 { 137 wait = 0; 138 } 139 140 //weaponInstancePosition.transform.RotateAround(transform.position, Vector3.up,v.x); 141 Vector3 a = transform.position + v; 142 Vector3 b = v; 143 float c = Vector3.Dot(a,b); 144 if(c != 0) 145 { 146 } 147 weaponInstancePosition.transform.position = transform.position + v; 148 149 //weaponInstancePosition.transform.RotateAround(transform.position, Vector3.up, Mathf.Rad2Deg * c); 150 ////////////////////////////////////////////////////////////////////////////////////////////////////////////////// 151 152 153 154 } 155 156 157 //移動 158 void MoveControl() 159 { 160 161 if(Input.GetKey(KeyCode.W)) 162 { 163 inputVertical = 1; 164 } 165 else if(Input.GetKey(KeyCode.S)) 166 { 167 inputVertical = -1; 168 } 169 else 170 { 171 inputVertical = 0; 172 173 } 174 175 if (Input.GetKey(KeyCode.A)) 176 { 177 inputHorizontal = -1; 178 } 179 else if (Input.GetKey(KeyCode.D)) 180 { 181 inputHorizontal = 1; 182 } 183 else 184 { 185 inputHorizontal = 0; 186 187 } 188 189 Vector3 cameraForward = Vector3.Scale(Camera.main.transform.forward.normalized, new Vector3(1, 0, 1)).normalized; 190 moveForward = (cameraForward * inputVertical) + (Camera.main.transform.right * inputHorizontal); 191 192 // キャラクターの向きを進行方向 193 if (moveForward != Vector3.zero) 194 { 195 transform.rotation = Quaternion.LookRotation(moveForward); 196 } 197 198 //ジャンプ 199 if(Input.GetKeyDown(KeyCode.Space)) 200 { 201 if(transform.GetComponentInChildren<Player_Ground_Check>().isGround == true) 202 { 203 cc.Move(new Vector3(0, 200, 0) * Time.deltaTime); //落下速度 204 } 205 } 206 207 if(transform.GetComponentInChildren<Player_Ground_Check>().isGround == false) 208 { 209 Debug.Log("Jump"); 210 anim.SetBool("isJump",true); //ジャンプアニメーション 211 anim.speed = 3.5f; 212 } 213 else 214 { 215 Debug.Log("Ground"); 216 217 anim.SetBool("isJump", false); //ジャンプアニメーション 218 anim.speed =1; 219 } 220 221 222 223 224 225 anim.SetFloat("moveSpeed",moveForward.magnitude); 226 227 //Debug.Log(moveForward.magnitude); 228 //moveForward.y = -100f; 229 230 cc.Move(moveForward.normalized * moveSpeed * Time.deltaTime); //移動速度 231 cc.Move(new Vector3(0,-9.8f,0) * Time.deltaTime); //落下速度 232 233 } 234 235 236 237 238 private void OnCollisionEnter(Collision collision) 239 { 240 241 } 242 243 244 245} 246

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

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

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

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

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

guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

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

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

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問