やりたいこと
private GameObejct[] circlesにインスタンス化したcircle(Clone)を入れたい。
その配列に入れたcircle(Clone)をforeachとSetActiveをつかい、表示・非表示の状態を切り替えたい。
問題
circles[]に入れたと思われたcircle(Clone)が配列に入れることが出来ていない。
Active状態が切り替わるのが、生成したClone側ではなく、prehab化しているcircleの方が表示・非表示を繰り返してしまう。
やったこと
circleオブジェクト自身にscriptをつけ、this.gameObject.SetActiveで切り替えようと思ったが、やはり別のスクリプトの参照するオブジェクトがCloneではなく、prehabになってしまう
C#
1using System.Collections; 2using System.Collections.Generic; 3using UnityEngine; 4using UnityEngine.UI; 5 6public class Manager_circle : MonoBehaviour 7{ 8 public GameObject circle; 9 public GameObject card; 10 11 12 private GameObject[] circles; 13 public Sprite card_white; 14 public Sprite card_red; 15 16 public int circle_count=1; 17 private float card_x; 18 private float card_y; 19 private GameObject circle_pre; 20 private float circle_x=1; 21 private float circle_y=1; 22 float circle_position_x_minus; 23 float circle_position_x_plus; 24 float circle_position_y_minus ; 25 float circle_position_y_plus ; 26 [SerializeField] 27 private Sprite sprite; 28 29 private void Awake() 30 { 31 sprite=circle.GetComponent<SpriteRenderer>().sprite; 32 circles = new GameObject[circle_count]; 33 var g=Instantiate(card, new Vector2(0, 0), Quaternion.identity); 34 g.GetComponent<SpriteRenderer>().sprite = card_white; 35 card_x = card.GetComponent<SpriteRenderer>().bounds.size.x; 36 card_y = card.GetComponent<SpriteRenderer>().bounds.size.y; 37 38 circle_x = circle.GetComponent<SpriteRenderer>().bounds.size.x; 39 circle_y = circle.GetComponent<SpriteRenderer>().bounds.size.y; 40 } 41 void Start() 42 { 43 44 circle_position_x_minus = card.transform.position.x - card_x / 2 + circle_x / 2; 45 circle_position_x_plus = card.transform.position.x + card_x / 2 - circle_x / 2; 46 circle_position_y_minus = card.transform.position.y; 47 circle_position_y_plus = card_y / 2 - circle_y / 2; 48//ここから問題のコード 49 for (var i = 0; i < circle_count; i++) 50 { 51 circles[i]= Instantiate(circle, new Vector2(UnityEngine.Random.Range(circle_position_x_minus, circle_position_x_plus), UnityEngine.Random.Range(circle_position_y_minus, circle_position_y_plus)), Quaternion.identity); 52 } 53 } 54 55 56 public void Switch(bool a) 57 { 58 Debug.Log(circles[0].transform.position); 59 if (a == false&&circle.activeSelf) 60 { 61 Debug.Log(circle.activeSelf==true); 62 foreach(GameObject cir in circles) 63 { 64 cir.SetActive(true); 65 } 66 } 67 else if(a==true&&!circle.activeSelf==false) 68 { 69 Debug.Log(circle.activeSelf); 70 foreach(GameObject cir in circles) 71 { 72 cir.SetActive(false); 73 } 74 } 75 } 76 77//--ここまで 78 // Update is called once per frame 79 void Update() 80 { 81 82 } 83} 84
今日一日繰り返していますが、解決できません。
どうかよろしくお願いします。
回答1件
あなたの回答
tips
プレビュー