前几天在itch上玩到这个游戏,感觉很有趣,叫做It's a wrap
玩家扮演一个“导演”,在时间轴上拖动带有不同动画的影片剪辑来控制场景中的物品,有点类似于pr的操作
所以这次尝试做一个用时间轴来控制动画播放的小demo
难点是如何通过时间轴标尺以及动画剪辑的位置来控制动画播放
我们使用UGUI内置的slider组件来制作标尺和剪辑
给上面黄色的标尺添加脚本
public class TimeController : MonoBehaviour {
public float timeValue;
private Slider slider;
void Start () {
slider = GetComponent<Slider> ();
}
void Update () {
timeValue = slider.value;
}
}
给下面的剪辑添加脚本
public class Clip : MonoBehaviour {
private TimeController timeController;
private Player player;
private Slider slider;
//片段与总长度的比例
private float scale;
void Start () {
player = GameObject.FindGameObjectWithTag ("Player").GetComponent<Player> ();
timeController = GameObject.FindGameObjectWithTag ("TimeController").GetComponent<TimeController> ();
slider = transform.parent.parent.GetComponent<Slider> ();
scale = GetComponent<RectTransform> ().rect.width / slider.GetComponent<RectTransform> ().rect.width;
}
void Update () {
//计算播放的进度
player.anim.Play ("sword_defend", 0, timeController.timeValue / scale - slider.value * (1 / scale - 1));
}
}
注意要把橙色剪辑的锚点设置在左中心,不然拖动时会漂移
然后随便添加一个带有动画的人物
在起始时设定animator的speed为0,来冻结动画的播放
public class Player : MonoBehaviour {
public Animator anim;
void Start () {
anim = GetComponent<Animator> ();
anim.speed = 0;
}
}
最后的效果