예제 #1
0
    public void SetupFragments(LevelConfig levelConfig)
    {
        rows    = levelConfig.rows;
        columns = levelConfig.columns;
        source  = EntryPoint.instance.loadAsset <Sprite>("sprites", levelConfig.id + ".jpg") as Sprite;
        Texture2D texture = source.texture;

        fragments = new Fragment[rows * columns];
        // 切成 1 : heightUnit 的矩形
        pixelsPerUnitX = (float)texture.width / (float)columns;
        pixelsPerUnitY = (float)texture.height / (float)rows;
        float height = pixelsPerUnitY / pixelsPerUnitX;

        for (int i = 0; i < fragments.Length; i++)
        {
            float         x        = Random.Range(minX, maxX);
            float         y        = Random.Range(minY, maxY);
            FragmentGroup group    = new FragmentGroup(this);
            GameObject    instance = Object.Instantiate(fragmentPrefab, new Vector3(x, y, 0f), Quaternion.identity, fragmentsRoot) as GameObject;
            Fragment      fragment = instance.GetComponent <Fragment> ();
            if (fragment == null)
            {
                fragment = instance.AddComponent <Fragment>();
            }
            group.AddMember(fragment);
            fragment.index  = i;
            fragment.row    = i / columns;
            fragment.column = i % columns;
            fragment.group  = group;
            Rect rect = new Rect(fragment.column * pixelsPerUnitX, (rows - fragment.row - 1) * pixelsPerUnitY, pixelsPerUnitX, pixelsPerUnitY);
            fragment.spriteRenderer.sprite = Sprite.Create(texture,
                                                           rect,
                                                           new Vector2(0.5f, 0.5f),
                                                           pixelsPerUnitX);
            fragment.GetComponent <BoxCollider2D>().size = new Vector3(1.0f, height, 1.0f);
            fragment.fragmentManager = this;
            fragments [i]            = fragment;
            group.SetSortingOrder(i);
            groups.Add(group);
        }
        CompressSortingOrderRange();
    }
예제 #2
0
파일: Fragment.cs 프로젝트: hoxily/jigsaw
 void OnMouseDown()
 {
     group.SetSortingOrder(fragmentManager.MaxSortingOrder + 1);
     fragmentManager.CompressSortingOrderRange();
 }