unity中UI中心点问题

问题描述:

实例化ui元素,ui预制体的锚点在最左边,父物体中心点为(0.5,0.5),实例化的任务条位置出现问题,TaskDegree【0】的X轴坐标(100,0,0),实例化出来后总是变成(1060,0,0)

 

 

脚本:

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
public class TaskCompeletionDegreeDesign : MonoBehaviour {
    public Transform TaskParent;
    public Sprite CompletedTaskSprite;
    public Sprite UnFinishedTaskSprite;
    public int TaskDegreeSpace=30;
    public float TaskDegreePrafabWidth=115;
    public float StartPosization=100;
    public List<GameObject> TaskDegreePrefabs;
    GameObject InstantiateTask;
    public Text CurrentTaksDegreeText;
    bool DoOnce;
    //int currentTotalTaskNum;
    //int CompletedTaskNum;
    //int UnFinishedNum;
	// Use this for initialization
	void Start ()
    {
       StartCoroutine( OnCreate());
	}
    IEnumerator OnCreate()
    {
        yield return new WaitForSeconds(0.6f);
        OnCreateTaskDegree("TaskDegree");
        yield return new WaitForSeconds(2f);
        foreach (var item in TaskDegreePrefabs)
        {
            Debug.LogError("ITEM"+item.transform.localPosition.x);
        }
    }
    public void OnCreateTaskDegree(string ObjName)
    {
        if (ARGlobalData.CurrentTotalTaskNum != 0)
        {
            for (int i = 0; i < ARGlobalData.CurrentTotalTaskNum; i++)
            {
                 InstantiateTask = (GameObject)Instantiate(Resources.Load(ObjName));
                 InstantiateTask.GetComponent<RectTransform>().SetParent(TaskParent);
                 InstantiateTask.name = ObjName;
                 InstantiateTask.GetComponent<RectTransform>().anchoredPosition = new Vector2(0,0);
                 InstantiateTask.transform.localScale = new Vector3(1,1,1);
                 var taskDegreeX = StartPosization + i * (TaskDegreePrafabWidth + TaskDegreeSpace);
                Debug.LogError("X"+i+"   "+taskDegreeX);
                 InstantiateTask.transform.localPosition = new Vector3(taskDegreeX,0,0);
                //Debug.LogError(InstantiateTask.transform.localPosition.x);
                 InstantiateTask.transform.rotation = new Quaternion(0,0,0,0);
                 InstantiateTask.GetComponent<Image>().sprite = UnFinishedTaskSprite;
                    
                 TaskDegreePrefabs.Add(InstantiateTask);
            }          
        }
    }
    private void SetTaskDegree()
    {
        CurrentTaksDegreeText.text = ARGlobalData.CompletedTaskNum + "/" + ARGlobalData.CurrentTotalTaskNum;
        //if (ARGlobalData.CurrentTotalTaskNum != -1)
        //{
        //    if (ARGlobalData.UnFinishedNum != 0)
        //    {
        //        ARGlobalData.UnFinishedNum = ARGlobalData.CurrentTotalTaskNum + Mathf.Abs(CompletedTaskNum);
        //    }
        //}
    }
	// Update is called once per frame
	void Update ()
    {
        //SetTaskDegree();
        //OnCreateTaskDegree("TaskDegree");
        SetTaskDegree();
	}
    //private void LateUpdate()
    //{
    //    OnCreateTaskDegree("TaskDegree");
    //}

以上问题和父物体TaskDegreePanel的中心点有关;将其改为(0,0.5)即可

 

 

预制体TaskDegree中心点可以改也可以不改

 

posted @ 2019-03-01 15:01  WalkingSnail  阅读(1350)  评论(0)    收藏  举报