查看: 976|回复: 0
打印 上一主题 下一主题

[其他] 鼠标左击控制子物体们发散和聚合

[复制链接]

2317

主题

54

听众

2万

积分

资深设计师

Rank: 7Rank: 7Rank: 7

纳金币
20645
精华
62

最佳新人 活跃会员 热心会员 灌水之王 突出贡献

跳转到指定楼层
楼主
发表于 2014-11-30 08:06:55 |只看该作者 |倒序浏览
/***
* 鼠标左击控制物体发散和聚合
*
*/
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;
                }
            }
        }
    }
}

分享到: QQ好友和群QQ好友和群 腾讯微博腾讯微博 腾讯朋友腾讯朋友 微信微信
转播转播0 分享淘帖0 收藏收藏0 支持支持0 反对反对0
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

手机版|纳金网 ( 闽ICP备2021016425号-2/3

GMT+8, 2025-7-20 23:55 , Processed in 0.063606 second(s), 32 queries .

Powered by Discuz!-创意设计 X2.5

© 2008-2019 Narkii Inc.

回顶部