介绍
下载地址 专业版
链接: https://pan.baidu.com/s/1w9PY6hnsz7m0ljDTAuyPJA 提取码: m3xf
如果不用插件做一个武器打击效果 。需要用到协程,代码量有点多
void attack() {
if (Input.GetKeyDown(KeyCode.Mouse0)) {
StartCoroutine("attackCoroutine");
}
else {
}
}
IEnumerator attackCoroutine() {
float total = 0;
float Rdu = 180;
while( total < Rdu)
{
float lerp = Mathf.Lerp(0, 100, Time.deltaTime * 30);
if (total + lerp > Rdu) {
lerp = Rdu - total;
}
total += lerp;
weapon.transform.Rotate(0, 0, -lerp, Space.Self);
yield return null;
}
print("bbb"+total);
total = 0;
while( total < Rdu)
{
float lerp = Mathf.Lerp(0, 100, Time.deltaTime * 10);
if (total + lerp > Rdu) {
lerp = Rdu - total;
}
total += lerp;
weapon.transform.Rotate(0, 0, lerp, Space.Self);
yield return null;
}
print("ccc"+total);
}
DoTween使用例子
// 2秒内移动到 目标坐标
greenCube.DOMove(new Vector3(0,4,0), 2)
// 内部代码
var t = DOTween.To((() => redCube.position), (x => redCube.position = x), new Vector3(0.0f, 5, 0.0f), 2);
t.SetOptions( false).SetTarget<Tweener>((object) redCube);
// 目标坐标
redCube.DOMoveY(4, 2);
var t = DOTween.To((() => redCube.position), (x => redCube.position = x), new Vector3(0.0f, 5, 0.0f), 2);
t.SetOptions(AxisConstraint.Y, false).SetTarget<Tweener>((object) redCube);
实现上面的旋转
Sequence sequence = DOTween.Sequence();
sequence.Append(weapon.transform.DORotate(new Vector3(0, 0, -90), 0.1f));
sequence.Append(weapon.transform.DORotate(new Vector3(0, 0, 0), 0.2f));
回放
var doLocalRotate = weapon.transform.DOLocalRotate(new Vector3(0, 0, -160), 0.1f);
// 一定要有
doLocalRotate.SetAutoKill(false);
doLocalRotate.OnComplete(() =>
{
weapon.transform.DOPlayBackwards();
});
最佳实践
这里可观察动画创建次数 ,不能每次都创建比较浪费性能
void Start() {
// 挥剑操作
Tweener weaponTween = weapon.transform.DOLocalRotate(new Vector3(0, 0, -160), 0.1f);
// 取消默认删除
weaponTween.SetAutoKill(false);
weaponTween.OnComplete(() =>
{
weapon.transform.DOPlayBackwards();
});
// 创建时不自动播放
weaponTween.Pause();
}
void stack(){
// DOPlay只播放一次
// weapon.transform.DOPlay();
// 会播放物体身上所有的动画
weapon.transform.DOPlayForward();
}