前提
UnityでMetaQuest2(旧OculusQuest2)のVRゲームを作っているのですが、思うように動かないところがあります。
Quest2のコントローラーの距離に応じて親となるCubeを出現し変形させ、その中に子オブジェクトとして小さい立方体を入れようとしています。ですが、子オブジェクトのスケールが親オブジェクトのスケールに影響されて変更されてしまいます。
親オブジェクトのスケールを変形した後に子オブジェクトとして立方体を入れているのですが、子オブジェクトもスケールが変わってしまいます。
実現したいこと
子オブジェクトが親オブジェクトのスケールに影響されないようにしたい。
該当のソースコード
(検証中のため、関数がローマ字になっているところがあります)
C#
1using System.Collections; 2using System.Collections.Generic; 3using UnityEngine; 4using UnityEngine.UI; 5 6public class creatcube : MonoBehaviour 7{ 8 [SerializeField] GameObject rightController; 9 [SerializeField] GameObject leftController; 10 public GameObject parent; //親オブジェクト 11 public GameObject RFcube; 12 13 public Text text; 14 private List<GameObject> koList = new List<GameObject>(); 15 Vector3 endA; 16 Vector3 endB; 17 float span; 18 19 // Start is called before the first frame update 20 void Start() 21 { 22 parent = Instantiate(parent,Vector3.zero, Quaternion.identity); //親オブジェクト 23 } 24 25 // Update is called once per frame 26 void Update() 27 { 28 29 30 Vector3 rHandPos = rightController.transform.position; 31 Vector3 lHandPos = leftController.transform.position; 32 33 34 //Aボタンを押したところをendAにする 35 if (OVRInput.GetDown(OVRInput.RawButton.A)) 36 { 37 endA = lHandPos; 38 39 } 40 //押し続けている間endBは右コントローラーの位置 41 //押し続けている間も表示する 42 else if (OVRInput.Get(OVRInput.RawButton.A)) 43 { 44 endB = rHandPos; 45 46 } 47 //ボタンを離したところをendBとする 48 //endA~endB間にオブジェクトを生成する 49 else if (OVRInput.GetUp(OVRInput.RawButton.A)) 50 { 51 52 53 54 endB = rHandPos; 55 span = Vector3.Distance(endA, endB); //AーB距離 56 57 Vector3 tyuuou = Vector3.Lerp(endA, endB, 0.5f); //中間座標 58 59 60 61 parent.transform.localScale = new Vector3(span, 1, 1); 62 parent.transform.localPosition = tyuuou; 63 64 65 66 GameObject obj = Instantiate(RFcube, Vector3.zero, Quaternion.identity); //子 67 obj.transform.parent = parent.transform; //parent(親オブジェクト)の子オブジェクトに設定 68 obj.transform.localPosition = new Vector3(0, 0, 0); 69 obj.transform.localScale = new Vector3(0.05f, 0.05f, 0.05f); 70 koList.Add(obj); 71 72 } 73 74 //右人差し指ボタンを押している間 75 if (OVRInput.Get(OVRInput.RawButton.RIndexTrigger)) 76 { 77 78 for(int i = 0; i < koList.Count; i++) 79 { 80 Vector3 y = new Vector3(1, (rHandPos.y-lHandPos.y), 1); 81 koList[i].transform.localScale = y; 82 } 83 84 85 } 86 87 } 88} 89
試したこと
オブジェクトを出す順番、スケール変更の順番、子オブジェクトにする順番などを色々変えてみましたが駄目でした。
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2022/09/21 01:56