- 最后登录
- 2016-8-29
- 注册时间
- 2012-8-25
- 阅读权限
- 90
- 积分
- 23585
  
- 纳金币
- 20645
- 精华
- 62
|
/***
* 鼠标左击控制物体发散和聚合
*
*/
using UnityEngine;
using System.Collections;
using System.Collections.Generic;
public class Disprese : MonoBehaviour
{
//物体时发散还是聚合(true为发散,false是聚合)
bool isDisprese = true ;
//鼠标是否左击了
bool isOnclick = false;
//存储所有子物体
List<Transform> childList;
//存储所有子物体的初始位置
List<Vector3> instancePosition;
//存储所有子物体的改变之后的位置
List<Vector3> changePosition;
//物体发散的位移的倍数,默认为四倍
int mulriple = 4;
//设置物体发散和聚合运动的时间(20帧)
int time = 0;
void Start()
{
childList = new List<Transform>();
instancePosition = new List<Vector3>();
changePosition = new List<Vector3>();
//初始化子物体集合、初始位置集合、改变之后位置集合
foreach (Transform child in transform)
{
childList.Add(child);
instancePosition.Add(child.position);
changePosition.Add(child.position);
}
}
/// <summary>
/// OnGUI()是每一帧执行几次
/// </summary>
void OnGUI()
{
//鼠标左击是改变聚散状态,和记录点击事件
if (Input.GetMouseButtonDown(0))
{
isOnclick = true;
}
}
void Update()
{
if (isOnclick)
{
if (time > 20)
{
time = 0;
if (isDisprese)//改变物体发散还是聚合的状态
{
isDisprese = false;
}
else
{
isDisprese = true;
}
}
else
{
time++;
}
TranslatePosition();
}
}
/// <summary>
/// 子物体位置改变
/// </summary>
void TranslatePosition()
{
for (int i = 0; i < childList.Count; i++)
{
//初始化子物体们改变之后的位置
changePosition[i] = new Vector3(instancePosition[i].x * mulriple, instancePosition[i].y * mulriple, instancePosition[i].z * mulriple);
//判断是聚合还是发散
if (isDisprese)
{
if (childList[i].position != changePosition[i])
{
childList[i].position = Vector3.Lerp(instancePosition[i], changePosition[i], time * 0.05f);
}
else if (childList[i].position == changePosition[i])
{
isOnclick = false;
}
}
else
{
if (childList[i].position != instancePosition[i])
{
childList[i].position = Vector3.Lerp(changePosition[i], instancePosition[i], time * 0.05f);
}
else if (childList[i].position == instancePosition[i])
{
isOnclick = false;
}
}
}
}
}
|
|