前言
- 使用代码命令控制物体移动
- DOTweenpath组件控制路径变化
- DOTweenanimation组件控制两点(终点和起点)之间的变化(移动、旋转等)
- iTween一般操控物体,DOTween一般操控UI,根据个人习惯
一、导入DOTween插件
- asset store里面有免费的插件
- 挂上DOTweenpath组件
1、使用步骤
- shift+ctrl然后点击屏幕加一个点
- shift+alt然后点击已有的点是取消该点
- 在组件面板里handles type/mod选择Full把点改成三位坐标
- 这个表示物体移动时间为3秒
- 这个表示延迟1秒后物体开始移动
- 这个表示移动的方式是线性的还是曲线的
- 这个勾上表示路径将形成一个闭环,会把最后一个路径点和起点相连
- AutoPlay高亮表示运行即物体就会按照编辑的点运动
- AutoKill高亮表示杀死当前动画,播放物体动画后就会销毁该动画,把这两个取消高亮,使用代码控制
2、编写代码
- 使用射线检测控制,点击物体开始运动,按下q健物体倒放该动画
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using DG.Tweening;
public class RayObject : MonoBehaviour
{
GameObject cube;
Tweener tweener;
// Update is called once per frame
void Update()
{
Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition);
RaycastHit hit;
if (Physics.Raycast(ray, out hit))
{
if (Input.GetMouseButtonDown(0))
{
if (hit.collider.name == "Cube")
{
cube = hit.collider.gameObject;
cube.GetComponent<DOTweenPath>().DOPlayForward();
}
if (hit.collider.name == "Sphere")
{
print("d");
tweener = hit.collider.gameObject.transform.DOLocalMove(new Vector3(4.4f, -0.18f, -1.823f), 3);
tweener.SetAutoKill(false);
tweener.SetEase(Ease.Linear);
}
}
}
if (cube)
{
if (Input.GetKey(KeyCode.Q))
{
cube.GetComponent<DOTweenPath>().DOPlayBackwards();
tweener.PlayBackwards();
}
}
}
}
- DOMove用的是世界坐标,这里要用局部坐标DOLocalMove
- cube移动是编辑好了路径用代码控制开始播放,Sphere是用代码控制走的路径
- DOPlayForward正向播放,PlayBackwards倒放
- hit.collider.gameObject.transform.DOLocalMove(new Vector3(4.4f, -0.18f, -1.823f), 3).From();这段代码后面加上from,表示物体将从目标点移动到当前点
二、导入iTween插件
- asset store里面有免费的插件
- 导入插件后里面有个案例场景,进去后点击运行
- 运行后上面有个网址,点进去有很多iTween案例,是学习这个插件很好的方式
1、代码控制(未加组件)
- iTween.MoveTo运动方式不是线性的
这段代码物体的运动是很快的的,前面运动很快,一下就到9,然后从9慢慢到10
iTween.MoveTo(this.gameObject,new Vector3(10,0,0),3);
- iTween.MoveTo里面的第二个参数还可以是Hashtable
Hashtable hs = new Hashtable();
hs.Add(“time”,3);
hs.Add(“position”, new Vector3(10, 0, 0));
iTween.MoveTo(this.gameObject,hs);
这段代码依然是前面运动很快到最后慢
另一种表示
iTween.MoveTo(this.gameObject, iTween.Hash(“time”, 3, “position”, new Vector3(10, 0, 0),“easetype”,iTween.EaseType.linear));
iTween.EaseType.linear表示运动方式线性,运行后就是匀速运行了
- 可能后面选择运动方式这样写代码有点麻烦,可以公开,从外界选择
public iTween.EaseType ease;
iTween.MoveTo(this.gameObject, iTween.Hash(“time”, 3, “position”, new Vector3(10, 0, 0),“easetype”,ease));
- 这样需要什么方式就可以直接选择
- 后面加参数选择运动循环方式
- loop是从头到尾循环,到了终点后直接从起点开始在运动
- none不循环,
- pingpong是往复循环,从起点到终点,在从终点到起点
以上是直接脚本代码控制,没有添加itween组件
添加组件
- 添加itweenpath组件先到上面说的运行后有个网址,点进去下载
- 下载后导入,添加插件
- path name是这条路径的名字
- path color是路径线的颜色
- node conut表示几个路径点
- 接着在脚本里写上代码
- 运行后物体的坐标轴向是没有变化的
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class CubeMove : MonoBehaviour {
public iTween.EaseType ease;
// Use this for initialization
void Start () {
iTween.MoveTo(this.gameObject, iTween.Hash("path", iTweenPath.GetPath("path"), "time", 6, "easetype", ease));
}
// Update is called once per frame
void Update () {
}
}
-
在代码后面加上一个参数,表示物体的z轴在运动的时候一直面对原点
-
代码后面参数改成"orienttopath",true,“lookahead”,0.01f,
-
orienttopath表示物体运动时z轴前面时沿着路径的朝向,
-
lookahead 整数表示运动是z轴方向是向前
iTween.MoveTo(this.gameObject, iTween.Hash("path", iTweenPath.GetPath("path"), "time", 6, "easetype", ease,"orienttopath",true,"lookahead",0.01f));
- 当把物体初始位置和第一个路径点的位置不一样时,运行的时候物体会移动到第一个点然后开始沿着路径移动,
- 在后面参数加上"movetopath",false,那么运行的时候,物体会瞬移到第一个路径点开始移动
- 使物体震动
iTween.ShakePosition(this.gameObject,new Vector3(4,5,0),5);
物体在坐标范围内震动,时间是5秒
- itween还有使物体旋转改变,大小改变的方法