一直以来没时间写博客。今天记录一下itween的抛物线移动用法。以一个实例为主讲述:
首先在场景中建立一个cube用他代替plane因为这样可以减小资源,cube属性如图。plane用的是mesh collider会导致资源变大,所以用cube代替做出如图场景(黄色地板为cube白色是plane)。
plane在这里就是跟随鼠标的作用所以把他的mesh collider删除了。如图:更多内容请关注微信公众号:unity风雨路
下面讲述一下鼠标跟随的脚本:如下:
using UnityEngine;
using System.Collections;
public class course : MonoBehaviour {
public GameObject target;
void Start () {
}
void Update () {
//鼠标跟随
Ray ray = camera.ScreenPointToRay(Input.mousePosition);
RaycastHit hit;
if (Physics.Raycast(ray, out hit))
{
if (hit.transform.gameObject.tag == "tile")/*注意这里的tile是cube也就是在寻找鼠标在cube上移动的位置。从本文最上面那张Cube属性图就可以看到的他的Tag是tile.*/
{
iTween.MoveUpdate(target, new Vector3(hit.point.x, 0.1f, hit.point.z),.1f);
/*这里的target目标就是plane,我们就是要实现plane跟随鼠标动,这里在面板里要把plane这个预设体拖到target里。而代码里的<pre name="code" class="csharp" style="font-size:24px;">new Vector3(hit.point.x, 0.1f, hit.point.z),.1f 这句则是:hit表示的是鼠标的位置分别有XYZ轴位置,只有X,Z两个轴运动所以把Y写成0.1f。最后面还有个.1f表示的是plane跟随鼠标的时间。时间越长就表示是plane走的越慢,鼠标到 了目标地点plane还是要继续走过来。
*/
} } } } }
只要把这个脚本course拖动给相机运行就可以了如下图:
鼠标跟随可以实现了。在看一下点击鼠标有个小球会跑到鼠标点击位置
下面是course 的全部内容:
using UnityEngine;
using System.Collections;
public class course : MonoBehaviour {
public GameObject target;
Vector3[] paths = new Vector3[3];
/*这里弄个3维的数组分别表示小球的起始点和目标点还有起始点和目标点中间的一个点。*/
public GameObject ballPerfab;
/*就在代码里解释了:这里的ballPerfab就是上图中course脚本里的BallPerfab,要注意把sphere放到里面。这就 是哪个要运动的小球*/
// Use this for initialization
void Start () {}
void Update ()
{ //鼠标跟随刚才上面讲过了
Ray ray = camera.ScreenPointToRay(Input.mousePosition); RaycastHit hit;
if (Physics.Raycast(ray, out hit))
{ if (hit.transform.gameObject.tag == "tile")
{ iTween.MoveUpdate(target, new Vector3(hit.point.x, 0.1f, hit.point.z),.1f);
if (Input.GetMouseButtonDown(0))//这里加个条件就 是鼠标单击的时候执行下面语句
{
GameObject ball=(GameObject ) Instantiate(ballPerfab, new Vector3(0, 0, 0), Quaternion.identity);//实例化ball
paths[0] = new Vector3(0, 0, 0);//起始点
paths[2] = hit .point ;//终点,即鼠标点击点
paths[1] = new Vector3(paths [1].x /2, 1, paths [2].z /2);/*起点到终点之间的点,注意XZ这两个轴,一个用是起始点坐标的一半另个是终点坐标的一半*/
iTween.MoveTo(ball, iTween.Hash("path", paths));/*其实这个就是路径了,一个哈希表但是官网的是下面那句注释掉的话,只是加了一些其他条件属性罢了*/
// iTween.MoveTo(ball, iTween.Hash("path", paths, "oregin", true, "movetopath", true, "time", 1, "easytype", iTween.EaseType.linear));
Destroy(ball, 2);//clone了一堆小球每个两秒就destroy一个。
}
}
}
}
void OnDrawGizmos()/*这个是path的路线及其颜色设定如下图可见*/
{
iTween.DrawLine(paths, Color.blue);
Debug.Log("1111111111111111111111111111111");
iTween.DrawPath(paths, Color.red);
}
}