private List <PetalLocalData> DistributePetalLocalData(FlowerLocalData flower, PetalData petalData) { List <PetalLocalData> dataList = new List <PetalLocalData>(); int PetalLayerCount = flower.PetalLayerCount; int[] PetalCounts = flower.PetalCounts; float PetalMinClosedTime = petalData.MinClosedTime; float PetalMaxClosedTime = petalData.MaxClosedTime; float PetalMinOpenTime = petalData.MinOpenTime; float PetalMaxOpenTime = petalData.MaxOpenTime; float PetalRandomTimeValue = petalData.RandomTimeValue; for (int i = 0; i < flower.PetalLayerCount; i++) { float petalLayerClosedTime = (PetalMaxClosedTime - PetalMinClosedTime) / PetalLayerCount * i + PetalMinClosedTime; float petalLayerOpenTime = (PetalMaxOpenTime - PetalMinOpenTime) / PetalLayerCount * i + PetalMinOpenTime; for (int j = 0; j < flower.PetalCounts[i]; j++) { PetalLocalData petalLocalData = new PetalLocalData(); float RandomValue = Util.RandomRange(PetalRandomTimeValue); petalLocalData.Rotation = (360 / PetalCounts[i] * j) + i * 30; petalLocalData.PetalLayer = i; petalLocalData.PetalIndex = j; petalLocalData.StartTime = petalLayerClosedTime + RandomValue; petalLocalData.EndTime = petalLayerOpenTime + RandomValue; petalLocalData.Color = flower.PetalColor; dataList.Add(petalLocalData); } } return(dataList); }
private void InitFlowerChildren(GameObject flowerObject, FlowerLocalData flowerData, List <PetalLocalData> petalDatas) { flowerObject.AddComponent <FlowerLocalData>(); flowerData = flowerObject.GetComponent <FlowerLocalData>().AssignValues(flowerData); GameObject Pistil = Util.InitWithParent(PistilPrefab, flowerObject.transform); GameObject Petals = Util.InitWithParent("Petals", flowerObject.transform); List <GameObject> tempPetalLayers = new List <GameObject>(); for (int i = 0; i < flowerData.PetalLayerCount; ++i) { GameObject petalLayer = Util.InitWithParent("PetalLayer" + i, Petals.transform); tempPetalLayers.Add(petalLayer); } for (int i = 0; i < petalDatas.Count; ++i) { GameObject petal = Util.InitWithParent(PetalPrefab, tempPetalLayers[petalDatas[i].PetalLayer].transform); petal.AddComponent <PetalLocalData>(); PetalLocalData petalData = petal.GetComponent <PetalLocalData>().AssignValues(petalDatas[i]); petal.transform.Rotate(new Vector3(0, petalData.Rotation, 0)); petal.GetComponent <Animator>().SetFloat("Time", petalData.StartTime); petal.transform.Find("Plane").GetComponent <SkinnedMeshRenderer>().material.color = petalData.Color; PetalsList.Add(petal); } UpdateTransformOnSpline(flowerObject, CurrentMainSpline, 1f, 0f, 0f); flowerObject.SetActive(false); }
/// <summary> 활성화 상태에서 비활성화 상태 사이에 천천히 꽃이 지는 에니메이션 </summary> public void FallA(float progress) { List <int> tempDestroyIndex = new List <int>(); // Flower Petal, Pistils Normalize Value에 따라 닫히거나 쪼그라듬 for (int i = 0; i < PetalsList.Count; i++) { GameObject p = PetalsList[i]; PetalLocalData pData = p.GetComponent <PetalLocalData>(); float tempFallTime = Util.RandomRange(0f, 5f); bool isOnFlower = pData.isOnFlower; //if (pData.waitForDisable) //{ // tempDestroyIndex.Add(i); //} //else //{ if (tempFallTime > 0 && tempFallTime < progress && isOnFlower) { p.GetComponent <Rigidbody>().isKinematic = false; p.GetComponent <Rigidbody>().useGravity = true; p.GetComponent <Rigidbody>().AddForce(Vector3.up * 4); } else if (tempFallTime < 0f) { p.GetComponent <PetalLocalData>().isOnFlower = false; } } //} //for (var j = 0; j < tempDestroyIndex.Count; j++) //{ // PetalsList.RemoveAt(tempDestroyIndex[tempDestroyIndex.Count - 1 - j]); // Destroy(PetalsList[tempDestroyIndex[tempDestroyIndex.Count - 1 - j]]); //} }
/// <summary> 꽃이 진 상태에서 봉우리까지의 상태로 에니메이션 (꽃이 고유하게 가진 Fall Time) </summary> public void RebloomA(float progress) { foreach (GameObject p in PetalsList) { PetalLocalData petalData = p.GetComponent <PetalLocalData>(); float localProgress = CalculateTimeByMaxToMin(petalData.EndTime, petalData.StartTime, progress); SetAnimationNormalizedTime(p, "Time", localProgress); } }
public PetalLocalData(PetalLocalData data) { PetalLayer = data.PetalLayer; PetalIndex = data.PetalIndex; Rotation = data.Rotation; Color = data.Color; StartTime = data.StartTime; EndTime = data.EndTime; FallTime = data.FallTime; isOnFlower = data.isOnFlower; waitForDisable = data.waitForDisable; }