public static float FindPrevKeyframeTime(USSequencer sequence) { float num = 0f; USTimelineContainer[] timelineContainers = sequence.TimelineContainers; for (int i = 0; i < timelineContainers.Length; i++) { USTimelineContainer uSTimelineContainer = timelineContainers[i]; USTimelineBase[] timelines = uSTimelineContainer.Timelines; for (int j = 0; j < timelines.Length; j++) { USTimelineBase uSTimelineBase = timelines[j]; USTimelineProperty uSTimelineProperty = uSTimelineBase as USTimelineProperty; if (uSTimelineProperty) { foreach (USPropertyInfo current in uSTimelineProperty.Properties) { foreach (USInternalCurve current2 in current.curves) { float num2 = current2.FindPrevKeyframeTime(sequence.RunningTime); if (num2 > num) { num = num2; } } } } } } return(num); }
public static float FindPrevKeyframeTime(USSequencer sequence) { float keyframeTime = 0.0f; foreach (USTimelineContainer timelineContainer in sequence.TimelineContainers) { foreach (USTimelineBase timelineBase in timelineContainer.Timelines) { USTimelineProperty timelineProperty = timelineBase as USTimelineProperty; if (!timelineProperty) { continue; } foreach (var property in timelineProperty.Properties) { foreach (USInternalCurve curve in property.curves) { float time = curve.FindPrevKeyframeTime(sequence.RunningTime); if (time > keyframeTime) { keyframeTime = time; } } } } } return(keyframeTime); }
public static void ProcessPropertyTimeline(USTimelineProperty propertyTimeline) { if (!propertyTimeline || propertyTimeline.Properties == null) { return; } var propertyList = new List <USPropertyInfo>(); for (var n = 0; n < propertyTimeline.Properties.Count; n++) { if (propertyTimeline.Properties[n] == null) { continue; } var usPropertyInfo = (USPropertyInfo)CreateInstance(typeof(USPropertyInfo)); usPropertyInfo.CreatePropertyInfo(propertyTimeline.Properties[n].PropertyType); usPropertyInfo.Component = propertyTimeline.Properties[n].Component; usPropertyInfo.ComponentType = propertyTimeline.Properties[n].Component.GetType().ToString(); usPropertyInfo.propertyInfo = propertyTimeline.Properties[n].propertyInfo; usPropertyInfo.fieldInfo = propertyTimeline.Properties[n].fieldInfo; propertyList.Add(usPropertyInfo); for (var curveIndex = 0; curveIndex < usPropertyInfo.curves.Count; curveIndex++) { var newCurve = usPropertyInfo.curves[curveIndex]; var oldCurve = propertyTimeline.Properties[n].curves[curveIndex]; foreach (var keyframe in oldCurve.Keys) { var newKeyframe = newCurve.AddKeyframe(keyframe.Time, keyframe.Value); newKeyframe.InTangent = keyframe.InTangent; newKeyframe.OutTangent = keyframe.OutTangent; } } } for (var n = 0; n < propertyTimeline.Properties.Count; n++) { propertyTimeline.RemoveProperty(propertyTimeline.Properties[n]); } propertyTimeline.Properties.Clear(); for (var n = 0; n < propertyList.Count; n++) { propertyTimeline.AddProperty(propertyList[n]); } }
private static List <UnityEngine.Object> CollectUsedAssetsForProperty(USTimelineProperty timelineProperty) { var usedAssets = new List <UnityEngine.Object>(); if (timelineProperty.Properties == null) { return(usedAssets); } foreach (var propertyInfo in timelineProperty.Properties) { if (!propertyInfo || !propertyInfo.Component) { continue; } usedAssets.Add(propertyInfo); if (propertyInfo.curves == null) { continue; } foreach (var curve in propertyInfo.curves) { usedAssets.Add(curve); if (curve.Keys == null) { continue; } foreach (var internalKeyframe in curve.Keys) { usedAssets.Add(internalKeyframe); } } } return(usedAssets); }
private void Start() { if (this.affectedObjectPath == null) { this.affectedObjectPath = string.Empty; } else if (this.AffectedObject == null && this.affectedObjectPath.Length != 0) { GameObject gameObject = GameObject.Find(this.affectedObjectPath); this.AffectedObject = gameObject.transform; } USTimelineBase[] array = this.Timelines; for (int i = 0; i < array.Length; i++) { USTimelineBase uSTimelineBase = array[i]; USTimelineProperty uSTimelineProperty = uSTimelineBase as USTimelineProperty; if (uSTimelineProperty) { uSTimelineProperty.TryToFixComponentReferences(); } } }
private static void HandlePrefabRecordProperty(USTimelineProperty timelineProperty, string relativeScriptableObjectPath) { if (timelineProperty == null || timelineProperty.Properties == null) { return; } foreach (var propertyInfo in timelineProperty.Properties) { if (!propertyInfo || !propertyInfo.Component) { continue; } propertyInfo.ComponentType = propertyInfo.Component.GetType().ToString(); if (!AssetDatabase.Contains(propertyInfo.GetInstanceID())) { var assetName = AssetDatabase.GenerateUniqueAssetPath(string.Format("{0}/{1}.asset", relativeScriptableObjectPath, propertyInfo.GetInstanceID())); AssetDatabase.CreateAsset(propertyInfo, assetName); } EditorUtility.SetDirty(propertyInfo); if (propertyInfo.curves == null) { continue; } foreach (var curve in propertyInfo.curves) { if (curve == null) { Debug.LogWarning(String.Format("One of the curves on {0} is null, something has gone wrong", timelineProperty)); continue; } if (!AssetDatabase.Contains(curve.GetInstanceID())) { var assetName = AssetDatabase.GenerateUniqueAssetPath(string.Format("{0}/{1}.asset", relativeScriptableObjectPath, curve.GetInstanceID())); AssetDatabase.CreateAsset(curve, assetName); } EditorUtility.SetDirty(curve); if (curve.Keys == null) { continue; } foreach (var internalKeyframe in curve.Keys) { if (internalKeyframe == null) { Debug.LogWarning(String.Format("One of the keyframes on {0} is null, something has gone wrong", timelineProperty)); continue; } if (!AssetDatabase.Contains(internalKeyframe.GetInstanceID())) { var assetName = AssetDatabase.GenerateUniqueAssetPath(string.Format("{0}/{1}.asset", relativeScriptableObjectPath, internalKeyframe.GetInstanceID())); AssetDatabase.CreateAsset(internalKeyframe, assetName); } EditorUtility.SetDirty(internalKeyframe); } } } }
IEnumerator EventUpdate(CutSceneEventData __CutSceneEventData) { List <CutSceneEventDataList> EventList = new List <CutSceneEventDataList>(); for (int i = 0; i < __CutSceneEventData.EventList.Length; i++) { EventList.Add(__CutSceneEventData.EventList[i]); } int DefaultIdx = -1; for (int i = 0; i < EventList.Count; i++) { if (EventList[i].ActionType == eCutSceneEvent.SetRaidStartDefault) { DefaultIdx = i; break; } } if (DefaultIdx != -1) { EventList.Insert(DefaultIdx + 1, CreateCutSceneEventDataList(eCutSceneEvent.StartUpdate, Vector3.zero)); EventList.Insert(DefaultIdx + 1, CreateCutSceneEventDataList(eCutSceneEvent.SetRaidDefaultPos, Vector3.zero)); EventList.Insert(DefaultIdx + 1, CreateCutSceneEventDataList(eCutSceneEvent.SetFadeOut, Vector3.zero)); EventList.Insert(DefaultIdx + 1, CreateCutSceneEventDataList(eCutSceneEvent.StopUpdate, Vector3.zero)); } Unit unit = null; for (int i = 0; i < EventList.Count; i++) { //Debug.Log("EventList ActionType " + EventList[i].ActionType); switch (EventList[i].ActionType) { #region 이전데이터 //< 카메라 포커싱처리 case eCutSceneEvent.Focusing: if (EventList[i].ActionBool) { if (G_GameInfo.GameInfo.FocusingCam != null) { G_GameInfo.GameInfo.FocusingCam.StartEffect(0, true); } } else { if (G_GameInfo.GameInfo.FocusingCam != null && G_GameInfo.GameInfo.FocusingCam.gameObject.activeSelf) { G_GameInfo.GameInfo.FocusingCam.EndEffect(true); } } break; //< 사운드 실행 case eCutSceneEvent.PlayBgmSound: //SoundHelper.PlayBgmSound((uint)EventList[i].ActionValue); break; //< 보스 UI 출력 case eCutSceneEvent.ShowBossUI: if (null == UIMgr.GetUI("InGame/BossCutscenePanel")) { UIMgr.Open("InGame/BossCutscenePanel", EventList[i].ActionValue); } break; //< 기본 셋트 한번에 다해줌 case eCutSceneEvent.SetDefaultBoss: //< 포커싱처리 G_GameInfo.GameInfo.FocusingCam.StartEffect(0, true); //< 사운드실행 //SoundHelper.PlayBgmSound(9008); unit = CutSceneMgr.CutSceneEventDic[0].GetComponent <Unit>(); G_GameInfo.GameInfo.FocusingCam.AddObject(unit.gameObject); //< 보스 유아이 실행 //if (null == UIMgr.GetUI("InGame/BossCutscenePanel")) // UIMgr.Open("InGame/BossCutscenePanel", (float)3); //< 해당 애니메이션 플레이 시간을 얻는다. eAnimName aniName2 = GetAniName("Anim_intro"); if (aniName2 != eAnimName.Anim_idle) { EventList[i].ActionDelay = unit.Animator.GetAnimLength(aniName2) + 1; } //EventList[i].ActionDelay += unit.Animator.GetAnimLength(eAnimName.Anim_special); Sequence.Duration = EventList[i].ActionDelay + 0.5f; USTimelineProperty Infolist = Sequence.GetComponentInChildren <USTimelineProperty>(); //CutSceneMgr.seq.Duration=EventList[i].ActionDelay+0.5f; //UI 라이트를 컨트롤 한다. 다시 켜주는 건 CutSceneMgr 에 있음. EndScene 마지막 Transform Shadow; Shadow = GameObject.Find("UI_ShadowLight").GetComponent <Transform> (); USTimelineContainer Container = Sequence.CreateNewTimelineContainer(Shadow); GameObject test = new GameObject("Evnet Timeline"); test.transform.parent = Container.transform; Component Evnt = test.AddComponent("USTimelineEvent"); GameObject First = new GameObject("USEnableComponentEvent"); GameObject Second = new GameObject("USEnableComponentEvent"); First.transform.parent = Evnt.transform; Second.transform.parent = Evnt.transform; First.AddComponent("USEnableComponentEvent"); Second.AddComponent("USEnableComponentEvent"); First.GetComponent <USEnableComponentEvent> ().ComponentName = "Light"; //Second.GetComponent<USEnableComponentEvent> ().ComponentName = "Light"; //Second.GetComponent<USEnableComponentEvent> ().enableComponent=true; First.GetComponent <USEnableComponentEvent> ().FireTime = 0.0f; //Second.GetComponent<USEnableComponentEvent> ().FireTime = Sequence.Duration; // Infolist.Properties [0].curves [0].Keys[1].Time = 0.7f; Infolist.Properties [0].curves [1].Keys [1].Time = 0.7f; Infolist.Properties [0].curves [2].Keys [1].Time = 0.7f; Infolist.Properties [1].curves [0].Keys[1].Time = 0.7f; Infolist.Properties [1].curves [1].Keys [1].Time = 0.7f; Infolist.Properties [1].curves [2].Keys [1].Time = 0.7f; Infolist.Properties [1].curves [3].Keys [1].Time = 0.7f; Infolist.Properties [0].curves [0].Keys[3].Time = Sequence.Duration + 10; Infolist.Properties [0].curves [1].Keys [3].Time = Sequence.Duration + 10; Infolist.Properties [0].curves [2].Keys [3].Time = Sequence.Duration + 10; Infolist.Properties [1].curves [0].Keys[3].Time = Sequence.Duration + 10; Infolist.Properties [1].curves [1].Keys [3].Time = Sequence.Duration + 10; Infolist.Properties [1].curves [2].Keys [3].Time = Sequence.Duration + 10; Infolist.Properties [1].curves [3].Keys [3].Time = Sequence.Duration + 10; Infolist.Properties [0].curves[0].Keys[2].Time = Sequence.Duration; Infolist.Properties [0].curves [1].Keys [2].Time = Sequence.Duration; Infolist.Properties [0].curves [2].Keys [2].Time = Sequence.Duration; Infolist.Properties [1].curves [0].Keys[2].Time = Sequence.Duration; Infolist.Properties [1].curves [1].Keys [2].Time = Sequence.Duration; Infolist.Properties [1].curves [2].Keys [2].Time = Sequence.Duration; Infolist.Properties [1].curves [3].Keys [2].Time = Sequence.Duration; break; #endregion 이전데이터 //< 해당 위치로 강제이동 case eCutSceneEvent.ImmediatelyMove: CutSceneMgr.CutSceneEventDic[0].transform.position = EventList[i].ActionPos; break; //< 이펙트 실행 case eCutSceneEvent.SpawnEffect: SpawnEffect(EventList[i]); break; //< 카메라 쉐이킹 case eCutSceneEvent.CameraShake: CutSceneMgr.Shake((byte)EventList[i].ActionValue); break; //< 보스 UI 출력 case eCutSceneEvent.ShowRaidBossUI: if (null == UIMgr.GetUI("InGame/BossCutscenePanel")) { UIMgr.Open("InGame/BossCutscenePanel", EventList[i].ActionValue); } break; //< 보스 대화 출력 case eCutSceneEvent.RaidBossTalk: unit = CutSceneMgr.CutSceneEventDic[0].GetComponent <Unit>(); G_GameInfo.GameInfo.StartCoroutine(RaidBossTalkUpdate(unit, EventList[i].ActionString)); break; //< 애니메이션 실행 case eCutSceneEvent.AnimaionPlay: unit = CutSceneMgr.CutSceneEventDic[(int)EventList[i].ActionValue].GetComponent <Unit>(); if (unit != null) { eAnimName aniName = GetAniName(EventList[i].ActionString); unit.PlayAnim(aniName, false, 0.2f, true); //< 해당 애니메이션 플레이 시간을 얻는다. if (aniName != eAnimName.Anim_idle) { EventList[i].ActionDelay = unit.Animator.GetAnimLength(aniName) - 0.2f; } } else { //< 유닛이 없다면 그냥 바로 실행시켜준다. CutSceneMgr.CutSceneEventDic[(int)EventList[i].ActionValue].animation.CrossFade(EventList[i].ActionString, 0.5f); } break; //< 플레이 자체는 멈춰둔다. case eCutSceneEvent.StopUpdate: CutSceneMgr.seq.Pause(); break; case eCutSceneEvent.StartUpdate: CutSceneMgr.seq.Play(); break; //< 페이드 인(밝아지는처리) case eCutSceneEvent.SetFadeIn: CutSceneMgr.seq.Pause(); yield return(G_GameInfo._GameInfo.StartCoroutine(_CameraFadeEventObj.FadeInUpdate())); CutSceneMgr.seq.Play(); //< 스킵버튼 체크한다. SetSkipPanel(); break; //< 페이드 아웃(어두워지는 처리) case eCutSceneEvent.SetFadeOut: if (_CameraFadeEventObj == null) { _CameraFadeEventObj = (Instantiate(Resources.Load("Camera/CameraFadeEvent")) as GameObject).GetComponent <CameraFadeEvent>(); _CameraFadeEventObj.transform.parent = CutSceneMgr.startCamObj.transform; _CameraFadeEventObj.transform.localPosition = new Vector3(0, 0, 1); _CameraFadeEventObj.transform.localRotation = Quaternion.identity; } GameObject panel = UIMgr.GetUI("CutSceneSkipPanel"); if (panel != null) { panel.GetComponent <UIBasePanel>().Close(); } yield return(G_GameInfo._GameInfo.StartCoroutine(_CameraFadeEventObj.FadeOutUpdate())); break; //< 레이드를 위한 기본 카메라 위치 셋팅 case eCutSceneEvent.SetRaidDefaultPos: CutSceneMgr.startRootObj.transform.position = Vector3.zero; CutSceneMgr.startRootObj.transform.rotation = Quaternion.identity; CutSceneMgr.startCamObj.transform.parent = CutSceneMgr.startRootObj.transform; CutSceneMgr.startCamObj.transform.localPosition = Vector3.zero; CutSceneMgr.startCamObj.transform.localRotation = Quaternion.identity; break; case eCutSceneEvent.SetActive: CutSceneMgr.CutSceneEventDic[(int)EventList[i].ActionValue].SetActive(EventList[i].ActionBool); break; case eCutSceneEvent.SetTimeScale: SetTimeScale(EventList[i]); break; } //< 딜레이동안 대기 yield return(new WaitForSeconds(EventList[i].ActionDelay)); } yield return(null); }