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中心点可以改也可以不改


浙公网安备 33010602011771号