(转)【Unity3D游戏开发】—— iTween笔记 一(战棋寻路)

来源:互联网 发布:枪械3d模型数据 编辑:程序博客网 时间:2024/06/16 19:12
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;//绑定Cubepublic GameObject tileCube;//绑定shperepublic 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(){//由于是两段,则需小于2if (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


作者:王大康

阅读全文
0 0
原创粉丝点击