public void Clear()
        {
            _action     = ACTION.None;
            _saveTarget = SAVE_TARGET.None;
            _portrait   = null;
            _mesh       = null;
            _meshGroup  = null;
            _modifier   = null;

            _keyObject        = null;
            _isCallContinuous = false;            //여러 항목을 동시에 처리하는 Batch 액션 중인가

            _lastUndoTime = DateTime.Now;
        }
        // Functions
        //--------------------------------------------------
        /// <summary>
        /// Undo 전에 중복을 체크하기 위해 Action을 등록한다.
        /// 리턴값이 True이면 "새로운 Action"이므로 Undo 등록을 해야한다.
        /// 만약 Action 타입이 Add, New.. 계열이면 targetObject가 null일 수 있다. (parent는 null이 되어선 안된다)
        /// </summary>
        public bool SetAction(ACTION action, apPortrait portrait, apMesh mesh, apMeshGroup meshGroup, apModifierBase modifier, object keyObject, bool isCallContinuous, SAVE_TARGET saveTarget)
        {
            bool isTimeOver = false;

            if (DateTime.Now.Subtract(_lastUndoTime).TotalSeconds > 1.0f || _isFirstAction)
            {
                //1초가 넘었다면 강제 Undo ID 증가
                isTimeOver     = true;
                _lastUndoTime  = DateTime.Now;
                _isFirstAction = false;
            }

            //특정 조건에서는 UndoID가 증가하지 않는다.
            //유효한 Action이고 시간이 지나지 않았다면
            if (_action != ACTION.None && !isTimeOver)
            {
                //이전과 값이 같을 때에만 Multiple 처리가 된다.
                if (action == _action &&
                    saveTarget == _saveTarget &&
                    portrait == _portrait &&
                    mesh == _mesh &&
                    meshGroup == _meshGroup &&
                    modifier == _modifier &&
                    isCallContinuous == _isCallContinuous
                    )
                {
                    if (isCallContinuous)
                    {
                        //연속 호출이면 KeyObject가 달라도 Undo를 묶는다.
                        return(false);
                    }
                    else if (keyObject == _keyObject && keyObject != null)
                    {
                        //연속 호출이 아니더라도 KeyObject가 같으면 Undo를 묶는다.
                        return(false);
                    }
                }
            }
            #region [미사용 코드]
            //if (_action != ACTION.None && _parentMonoObject != null)
            //{
            //	if (_action == action && _parentMonoObject == parentMonoObject && isMultiple == _isMultiple)
            //	{
            //		if (_isMultiple)
            //		{
            //			//다중 처리 타입이면 -> targetObject가 달라도 연속된 액션이다.
            //			return false;
            //		}
            //		else
            //		{
            //			//Multiple 타입이 아니라면 targetObject도 동일해야한다.
            //			//단, 둘다 Null이라면 연속된 타입일 수 없다.
            //			if (targtObject == _keyObject && targtObject != null && _keyObject != null)
            //			{
            //				if (targetObject2 != null)
            //				{
            //					if(targetObject2 == _targetObject2)
            //					{
            //						return false;//연속된 Action이다.
            //					}
            //				}
            //				else
            //				{
            //					return false;//연속된 Action이다.
            //				}
            //			}
            //		}
            //	}
            //}
            #endregion
            _action = action;

            _saveTarget = saveTarget;
            _portrait   = portrait;
            _mesh       = mesh;
            _meshGroup  = meshGroup;
            _modifier   = modifier;

            _keyObject        = keyObject;
            _isCallContinuous = isCallContinuous;            //여러 항목을 동시에 처리하는 Batch 액션 중인가

            //_parentMonoObject = parentMonoObject;
            //_keyObject = targtObject;
            //_targetObject2 = targetObject2;
            //_isMultiple = isMultiple;

            //Debug.Log("Undo Regist [" + action + "]");
            return(true);
        }