(转)【Unity3D游戏开发】—— iTween笔记 一(战棋寻路)
iTween这个动画库非常好用,用 它可以轻松实现各种动画,晃动,旋转,移动,褪色,上色,控制音频等等效果。
iTween下载则在Asset Store上搜索iTween并下载iTween Visual Editor然后Import即可。
下面是iTween官网: http://itween.pixelplacement.com/index.php
这里是仿官网上一个战棋寻路的例子。
鼠标移动的方块上,方块抬起并变成绿色,移走则还原。点击方块后,方块下降并变为红色,然后小球并先延X轴移动,在延Z轴移动到鼠标点击位置。
基本思路步骤
1.9*9方格场景
2.格子上升下降动态效果
3.小球移动效果
下面是准备工作点击 GameObject -> Create Other -> Cube 创建一个正方体, 将其y轴的Scale改为0.2,这样就得到一个扁平的方块。然后添加一个tile标签,将Cube选中这个标签,最后将Cube拖入Project视图中,这样就建立了一个预设。
然后创建一个C#脚本
代码如***释很详细
using UnityEngine;
using System.Collections;
public class iTweenTest : MonoBehaviour {
//9*9方格
public int size = 9;
//绑定Cube
public GameObject tileCube;
//绑定shpere
public GameObject shpere;
//鼠标前一个指向的方块
private GameObject preTile;
//两段移动坐标
Vector3[] wallPoint = new Vector3[2];
//标识
int index;
//小球所在的方块
private GameObject shpereTile;
void Start () {
CreateGird();
}
//创建9*9方格
void CreateGird()
{
for(int i = 0; i<size; i++)
{
for (int j = 0; j<size; j++)
{
GameObject t = (GameObject)Instantiate(tileCube, new Vector3(i, 0, j), Quaternion.identity);
//黑白相间,奇数为白,偶数为黑
if ((i + j) % 2 == 0)
{
iTween.ColorTo(t, Color.black, 0.5f);
}
}
}
}
//抬起方格
void MoveToUp(GameObject obj)
{
//如果前一个方格抬起则将其放下
if (preTile != obj && preTile != null)
{
iTween.MoveTo(preTile, new Vector3(preTile.transform.position.x, 0.0f, preTile.transform.position.z), 0.5f);
//偶数为黑,奇数为白
if ((preTile.transform.position.x +preTile.transform.position.z) % 2 == 0 )
{
iTween.ColorTo(preTile, Color.black, 0.5f);
}
else
{
iTween.ColorTo(preTile, Color.white, 0.5f);
}
}
//如果方格未抬起,则将方格抬起
if (obj.transform.position.y == 0)
{
iTween.ColorTo(obj, Color.green, 0.5f);
iTween.MoveTo(obj, new Vector3(obj.transform.position.x, 0.5f, obj.transform.position.z), 0.5f);
//保存前一个方格信息
preTile = obj;
}
}
//两段移动小球
void MoveToPoint()
{
//由于是两段,则需小于2
if (index < 2)
{
//iTween的MoveTo函数可以传入HashTable,故以键值对的形式传入.
//"position"(位置) : 移动坐标Vector3
//"speed"(速度) : 10秒
//"easetype"(移动特效) : 直线
//"oncomplete"(回调函数) : MoveToPoint
//"oncompletetarget"(这个应该是指定回调的对象,如果不指定的话,iTween会把oncomplete方法丢到了target GameObject上,而不是本GameObject.) : 本对象
iTween.MoveTo(shpere, iTween.Hash("position", wallPoint[index], "speed", 10f, "easetype", "linear", "oncomplete", "MoveToPoint", "oncompletetarget",this.gameObject));
//标识++
index++;
}
}
void Update () {
//以鼠标指向创建一个射线
Ray ray = camera.ScreenPointToRay(Input.mousePosition);
//射线碰撞信息
RaycastHit hit;
//射线碰撞
if (Physics.Raycast(ray, out hit))
{
//当小球在一个方块上时,下面的方块不动,并且为红色
if (shpereTile != null)
{
iTween.MoveTo(shpereTile.transform.gameObject, new Vector3(shpereTile.transform.position.x, 0.0f, shpereTile.transform.position.z), 0.5f);
iTween.ColorTo(shpereTile.transform.gameObject, Color.red, 0.5f);
}
//如果碰撞的对象tag为tile,也就是是方块
if (hit.transform.tag == "tile")
{
//打印坐标
print(hit.transform.position);
//向上抬动方块
MoveToUp(hit.transform.gameObject);
//鼠标点击方块
if (Input.GetMouseButtonDown(0))
{
//小球所在方块不为空
if (shpereTile != null)
{
//小球所在方块放下
if ((shpereTile.transform.position.x + shpereTile.transform.position.z) % 2 == 0)
{
iTween.ColorTo(shpereTile, Color.black, 0.5f);
}
else
{
iTween.ColorTo(shpereTile, Color.white, 0.5f);
}
}
//记录小球所在的方块
shpereTile = hit.transform.gameObject;
index = 0;
//以碰撞信息初始化坐标。
wallPoint[0] = new Vector3(hit.transform.position.x, 0.5f, shpere.transform.position.z);
wallPoint[1] = new Vector3(hit.transform.position.x, 0.5f, hit.transform.position.z);
//小球移动
MoveToPoint();
}
}
}
else
{
//当鼠标移出方块区域时,以前一个方块的信息将方块放下。
if (preTile != null)
{
iTween.MoveTo(preTile, new Vector3(preTile.transform.position.x, 0.0f, preTile.transform.position.z), 0.5f);
if ((preTile.transform.position.x + preTile.transform.position.z) % 2 == 0)
{
iTween.ColorTo(preTile, Color.black, 0.5f);
}
else
{
iTween.ColorTo(preTile, Color.white, 0.5f);
}
}
}
}
}
这个例子运用到的iTween中函数有,MoveTo(), ColorTo(),一个是移动,一个是变色。
函数具体参数以及含义可以查阅iTween官方文档来学习,虽然是英文,也蛮基础的
http://itween.pixelplacement.com/documentation.php
作者:王大康