纳金网

标题: 鼠标左击控制子物体们发散和聚合 [打印本页]

作者: 王者再临    时间: 2014-11-30 08:06
标题: 鼠标左击控制子物体们发散和聚合
/***
* 鼠标左击控制物体发散和聚合
*
*/
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;
                }
            }
        }
    }
}






欢迎光临 纳金网 (http://go.narkii.com/club/) Powered by Discuz! X2.5