/// <summary> /// 輪を作成する /// </summary> private void Create_Ellipse() { //データにアクセス m_data = GetComponent <Mobius_data>(); //配列を確保 m_ellipse = new GameObject[(int)m_data.tempo * 2]; m_spren = new SpriteRenderer[(int)m_data.tempo * 2]; m_uibutton = new GameObject[3]; //UIを生成 ellipsemother = new GameObject("Ellipsemother"); for (int s = 1; s < (int)m_data.tempo * 2 - 1; ++s) { m_ellipse[s] = Instantiate(UIobject_middle); m_spren[s] = m_ellipse[s].GetComponent <SpriteRenderer>(); m_ellipse[s].transform.position = new Vector3(-m_data.Pixcellforunitysize_x * ((int)m_data.tempo - 2) + m_data.Pixcellforunitysize_x * 2 * ((s - 1) / 2) + m_data.Position.x, m_data.Position.y, 0); if (s % 2 == 1) { m_ellipse[s].transform.localScale = new Vector3(1, -1, 1); m_spren[s].sortingOrder = 1; } else { m_spren[s].sortingOrder = 4; } m_ellipse[s].transform.parent = ellipsemother.transform; } m_ellipse[0] = Instantiate(UIobject_side); m_ellipse[0].transform.position = new Vector3(-m_data.UIscalex / 2 - m_data.Position.x + m_data.Pixcellforunitysize_x / 2, m_data.Position.y, 0); m_ellipse[0].transform.parent = ellipsemother.transform; m_ellipse[m_ellipse.Length - 1] = Instantiate(UIobject_side); m_ellipse[m_ellipse.Length - 1].transform.position = new Vector3(-m_data.UIscalex / 2 - m_data.Position.x + m_data.Pixcellforunitysize_x / 2 + (m_data.Pixcellforunitysize_x * ((int)m_data.tempo * 2 - 1)), m_data.Position.y, 0); m_ellipse[m_ellipse.Length - 1].transform.localScale = new Vector3(-1, 1, 1); m_ellipse[m_ellipse.Length - 1].transform.parent = ellipsemother.transform; //ボタンを生成 for (int s = 0; s < (int)m_data.tempo - 1; ++s) { m_uibutton[s] = Instantiate(UIbutton[s]); m_uibutton[s].transform.position = new Vector3(-m_data.UIscalex / 2 - m_data.Position.x + m_data.Pixcellforunitysize_x * 2 * (s + 1), m_data.Position.y, 0); } //UI上を移動するオブジェクトを生成 m_wisp = Instantiate(UIobject_wisp); m_wisp.transform.position = new Vector3(m_data.Position.x - m_data.UIscalex / 2, m_data.Position.y, 0); m_wispspr = m_wisp.GetComponent <SpriteRenderer>(); //プレイヤーを参照する player = GetComponent <Player_con>(); }
/// <summary> /// 輪を作成する /// </summary> private void Create_Strip() { //ステージのフレーム数を確定 MaxStageFrame = (int)(60 * StageTime); //UIを生成する位置 m_position = transform.position; //もし半周にかかる時間が1秒未満に設定されていた場合1秒に変える if (Herftime < 1) { Herftime = 1; } //半周でかかるフレーム数 EllipseHerfFrame = (int)(Herftime * 60) + 1; //適切でない秒数の場合それ以降の処理をはじく if ((EllipseHerfFrame - 1) % (int)m_tempo != 0) { Debug.Log("指定された秒数が適切ではありません"); return; } //配列を確保 m_moveposx = new float[EllipseHerfFrame]; m_moveposy = new float[EllipseHerfFrame]; ellipsemother = new GameObject("strip"); m_ellipse = new GameObject[(int)m_tempo * 2]; m_spren = new SpriteRenderer[(int)m_tempo * 2]; m_ellipsemodes = new EllipseMode[(int)m_tempo * 2]; m_uibutton = new GameObject[(int)m_tempo - 1]; m_movelist = new int[MaxStageFrame]; m_ops = new int[MaxStageFrame]; //全体の大きさを確定 float scalex = 2.4f * (int)m_tempo; float sx = scalex / 2f - m_position.x; //UIを生成 for (int s = 1; s < (int)m_tempo * 2 - 1; ++s) { m_ellipse[s] = Instantiate(UIobject_middle); m_ellipse[s].transform.position = new Vector3(-sx + 0.6f + (1.2f * s), m_position.y, 0); if (s % 2 == 1) { m_ellipse[s].transform.localScale = new Vector3(-1, 1, 1); } m_ellipse[s].transform.parent = ellipsemother.transform; m_spren[s] = m_ellipse[s].GetComponent <SpriteRenderer>(); } m_ellipse[0] = Instantiate(UIobject_side); m_ellipse[0].transform.position = new Vector3(-sx + 0.6f, m_position.y, 0); m_ellipse[0].transform.parent = ellipsemother.transform; m_ellipse[m_ellipse.Length - 1] = Instantiate(UIobject_side); m_ellipse[m_ellipse.Length - 1].transform.position = new Vector3(-sx + 0.6f + (1.2f * ((int)m_tempo * 2 - 1)), m_position.y, 0); m_ellipse[m_ellipse.Length - 1].transform.localScale = new Vector3(-1, 1, 1); m_ellipse[m_ellipse.Length - 1].transform.parent = ellipsemother.transform; for (int s = 0; s < (int)m_tempo - 1; ++s) { m_uibutton[s] = Instantiate(UIbutton[s]); m_uibutton[s].transform.position = new Vector3(-sx + 2.4f * (s + 1), m_position.y, 0); } //1/4楕円にかかるフレーム数を確定 herfellipsesize = (EllipseHerfFrame - 1) / (int)m_tempo; //移動する位置を確定 for (int s = 0; s < (int)m_tempo; ++s) { float fp = -sx + scalex / (int)m_tempo * s; for (int i = 0; i <= herfellipsesize; ++i) { m_moveposx[s * herfellipsesize + i] = fp + 2.4f / herfellipsesize * i; m_moveposy[s * herfellipsesize + i] = Mathf.Sqrt((1 - Mathf.Pow(-1.2f + 2.4f / herfellipsesize * i, 2) / Mathf.Pow(pixcellforunitysize_x, 2)) * Mathf.Pow(pixcellforunitysize_y, 2)); } m_moveposy[s * herfellipsesize] = 0; } m_moveposx[EllipseHerfFrame - 1] = -sx + (1.2f * (int)m_tempo * 2); m_moveposy[EllipseHerfFrame - 1] = 0; //UIの状態を設定 m_ellipsemodes[0] = EllipseMode.Cross; m_ellipsemodes[m_ellipsemodes.Length - 1] = EllipseMode.Cross; //UI上を移動するオブジェクトを生成 m_wisp = Instantiate(UIobject_wisp); m_wisp.transform.position = new Vector3(m_moveposx[0], m_moveposy[0], 0); //プレイヤーを参照する player = GetComponent <Player_con>(); }