public void Progress(GameObject root, TimeSpan duration) { if (progressMap.ContainsKey(root)) { Stop(root); } var indicator = pool.Rent(); var indicatorRoot = indicator.transform; var delay = (float)duration.TotalSeconds; var tweener = DOTween .To(() => 0f, value => indicator.Progress(value, 1f), 1f, delay); indicatorRoot.parent = root.transform; indicatorRoot.localPosition = Vector3.zero; progressMap[root] = new ProgressArgs(indicator, tweener); }