我有一个脚本,它为我提供了一个设置为animationTime
的滑块的标准化值
沿着这个滑块,我想看一些小弹出窗口,以便在用户出现时向用户显示重要日期,但只是让他们出现'是超级无聊,并没有吸引眼球,所以我喜欢像弹出动画一样的小吐司。
如何在到达滑块上的正确位置时触发此动画?
到目前为止,只是让他们看起来我正在使用这个脚本。
float t = animationTime;
if (0.256f < t)
{
pilingFinished.gameObject.SetActive(true);
}
else
{
pilingFinished.gameObject.SetActive(false);
}
if (0.39f < t)
{
basementFinished.gameObject.SetActive(true);
}
else
{
basementFinished.gameObject.SetActive(false);
}
}
根据我有限的知识,我确信这也可以清理,考虑到时间线上会有多个Toast弹出窗口,表示需要查看许多不同的重要日期。
非常感谢
答案 0 :(得分:1)
这个解决方案有相当多的设置,但它都是相对简单的逻辑。我使用两个类,欠自动定位滑块上的元素并处理滑块的OnChange
事件,另一个控制元素的动画师。
<强> TimelineController.cs 强>
[RequireComponent(typeof(Slider))]
public class TimelineController : MonoBehaviour
{
private RectTransform m_transform;
private Slider m_slider;
private TimelineElement[] m_elements;
private Vector3 m_tempPosition;
public void Start()
{
m_transform = GetComponent<RectTransform>();
m_slider = GetComponent<Slider>();
m_elements = GetComponentsInChildren<TimelineElement>();
m_slider.maxValue = m_elements.Length - 1;
m_tempPosition = m_elements[0].GetComponent<RectTransform>().localPosition;
for(int element = 0; element < m_elements.Length; element++)
{
m_tempPosition.x = (m_transform.rect.width - 20f) * ((float)element / (m_elements.Length - 1));
Debug.Log(m_transform.rect.width);
m_elements[element].GetComponent<RectTransform>().localPosition = m_tempPosition;
}
m_elements[0].SetVisible(true);
}
public void OnChange()
{
m_elements[(int)m_slider.value].SetVisible(true);
for (int element = 0; element < m_elements.Length; element++)
{
if (element != (int)m_slider.value)
m_elements[element].SetVisible(false);
}
}
}
要定位所有元素,获取子节点中TimelineElement组件的数量,将滑块的maxValue设置为检索到的元素数,并获取元素的初始Vector3。
(m_transform.rect.width - 20f) * ((float)element / (m_elements.Length - 1));
每个位置都是根据百分比(当前元素除以元素数组的长度)确定的,并将其乘以滑块的宽度减去20f(手柄的宽度)。
<强> TimelineElement.cs 强>
[RequireComponent(typeof(Animator))]
public class TimelineElement : MonoBehaviour
{
private Animator m_animator;
public void Start()
{
m_animator = GetComponent<Animator>();
}
public void SetVisible(bool p_visible)
{
m_animator.SetBool("Visible", p_visible);
}
}
如前所述,这个简单设置动画师中的布尔值为true或false,从而导致相关的动画播放。剩下的就是设置类似于上面示例的层次结构,并在动画制作工具中添加bool Visible
,并将滑块Whole Numbers
设置为true
。
希望这会有所帮助。