BitMapNumを表示させるのに整理した。
1が含まれると右にずらさないといけないので面倒ですね。
各数字の親にはBitMapNumberManagerクラスを貼り付け
その下階層にはNumSettingsクラスを貼る
カゴに入った時のスコアは背景に卵があるのでEgg1も表示、非表示に対応できるようにNumSettingsクラスを新たに作りました。
BitMapNumberManagerの命令で『もし各UISpriteが子供を持っていたら表示、非表示」をすると分かりにくいと思って。
UpdateNumberメソッドに好きな数字を渡せば数字を表示する
each.Show(true)だけで下の階層が有る無し関わらず実行できる
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 |
using UnityEngine; using System.Collections; using System.Collections.Generic; using System.Linq; public class BitmapNumberManager : MonoBehaviour { private List<NumSettings> numSprites = new List<NumSettings>(); private float firstNumPosX; private const float initializeOffsetX = 38f; void Awake () { //Debug.Log("transform.childCount: " + transform.childCount); for (int i = 0; i < transform.childCount; i++) { //Debug.Log("transform.GetChild(i).name: " + transform.GetChild(i).name); numSprites.Add(transform.GetChild(i).GetComponent<NumSettings>()); } firstNumPosX = numSprites[0].transform.localPosition.x; } public void UpdateNumber(int refernce){ float posX = firstNumPosX; //initialize position X foreach(var each in numSprites){ each.gameObject.transform.setLocalPositionX(posX); posX -= initializeOffsetX; each.Show(false); //Debug.Log("each.name: " + each.name); } float offsetX = 20f; int offsetCount = 0; foreach(var each in numSprites) { //Debug.Log("refernce: " + refernce); if(refernce < 1) {return;} //Debug.Log("point: " + point); if(!each.activeSelf) {each.Show(true);} int currNum = refernce % 10; each.gameObject.transform.addLocalPositionX(offsetX * offsetCount); //Debug.Log("offsetCount: " + offsetCount ); each.SetSpriteName(currNum.ToString()); if(currNum == 1){ offsetCount +=1;} refernce /= 10; } } } |
各数字に貼るスクリプト
下の階層が有る無しを判断させてから処理
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 |
using UnityEngine; using System.Collections; public class NumSettings : MonoBehaviour { private UISprite sprite; private UISprite childSprite; private bool hasChild = false; public bool activeSelf{private set; get;} void Awake(){ sprite = GetComponent<UISprite>(); if(transform.childCount != 0){ hasChild = true; childSprite = transform.GetChild(0).GetComponent<UISprite>(); } activeSelf = sprite.enabled; } void Start () { } public void Show(bool onOff) { if(hasChild){ sprite.enabled = onOff; childSprite.enabled = onOff; } else{ sprite.enabled = onOff; } activeSelf = onOff; } public void SetSpriteName(string path){ sprite.spriteName = path; } void Update () { } } |
これ見てから機能の細分化せないかんなと思ったのでNumSettingsクラスを作った。
Managerクラスは単純な命令にして各オブジェクトで個性を判断させればいい感じになりそうだな。
オブジェクト指向できていますか?http://www.slideshare.net/MoriharuOhzu/ss-14083300オブジェクト指向できていますか? 真のオ̍…