制作点击添加组件然后出现bug
This commit is contained in:
@@ -1,7 +1,9 @@
|
||||
using System.Collections;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using Ichni;
|
||||
using Ichni.RhythmGame;
|
||||
using TMPro;
|
||||
using UnityEngine;
|
||||
using UnityEngine.UI;
|
||||
|
||||
@@ -21,6 +23,7 @@ public class EventPoint : MonoBehaviour
|
||||
public RawImage CurveCanvas;
|
||||
public RawImage CurveCanvas2;
|
||||
public FlexibleFloatTab FatherTab;
|
||||
|
||||
public int BeatDeviver => FatherTab.BeatDeviver;
|
||||
public void Initialize(AnimatedFloat animatedFloat)
|
||||
{
|
||||
@@ -39,12 +42,13 @@ public class EventPoint : MonoBehaviour
|
||||
|
||||
|
||||
|
||||
//记得
|
||||
CurveCanvas2.rectTransform.sizeDelta = new Vector2(NextEventPoint.transform.localPosition.x - RightSide.sizeDelta.x, EvDrawimage.rectTransform.sizeDelta.y + 50);
|
||||
|
||||
ReDraw(FatherTab.scalevalue);
|
||||
|
||||
|
||||
|
||||
}
|
||||
|
||||
public float value => FatherTab.scalevalue;
|
||||
public void ReDraw(float value)
|
||||
{
|
||||
Texture2D Texture = new Texture2D((int)CurveCanvas.rectTransform.sizeDelta.x / 5, (int)CurveCanvas.rectTransform.sizeDelta.y / 5);
|
||||
@@ -59,14 +63,82 @@ public class EventPoint : MonoBehaviour
|
||||
for (int i = 0; i < Texture.width; i++)
|
||||
{
|
||||
float t = (float)i / Texture.width;
|
||||
Texture.SetPixel(i,
|
||||
(int)(
|
||||
(Texture.height / 2) + ((animatedFloat.endValue - animatedFloat.startValue)
|
||||
* AnimationCurveEvaluator.Evaluate(animatedFloat.animationCurveType, t) * value)
|
||||
), Color.green);//丑陋
|
||||
int f = (int)(
|
||||
(Texture.height / 2) + (animatedFloat.startValue * value + ((animatedFloat.endValue - animatedFloat.startValue)
|
||||
* AnimationCurveEvaluator.Evaluate(animatedFloat.animationCurveType, t) * value))
|
||||
);
|
||||
if (f < Texture.height) Texture.SetPixel(i, f, Color.green);//丑陋
|
||||
else Texture.SetPixel(i, f, Color.red);
|
||||
}
|
||||
Texture.Apply();
|
||||
CurveCanvas.texture = Texture;
|
||||
if (NextEventPoint != null)
|
||||
{
|
||||
OvDrawimage.transform.localPosition = new Vector3(RightSide.transform.localPosition.x, animatedFloat.endValue * value * 5, 0);
|
||||
OvDrawimage.rectTransform.sizeDelta = new Vector2((NextEventPoint.animatedFloat.startTime - animatedFloat.endTime) / EditorManager.instance.uiManager.timeline.timePerBeat * FatherTab.BeatDeviver, OvDrawimage.rectTransform.sizeDelta.y);
|
||||
|
||||
OvDrawimage.color = new Color(0, 1, 0, 1);
|
||||
while (OvDrawimage.transform.localPosition.y > 130)
|
||||
{
|
||||
OvDrawimage.color = new Color(1, 0, 0, 0.3f);
|
||||
OvDrawimage.transform.localPosition = new Vector3(OvDrawimage.transform.localPosition.x, OvDrawimage.transform.localPosition.y - 260, OvDrawimage.transform.localPosition.z);
|
||||
}
|
||||
while (OvDrawimage.transform.localPosition.y < -130)
|
||||
{
|
||||
OvDrawimage.color = new Color(1, 0, 0, 0.3f);
|
||||
OvDrawimage.transform.localPosition = new Vector3(OvDrawimage.transform.localPosition.x, OvDrawimage.transform.localPosition.y + 260, OvDrawimage.transform.localPosition.z);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
OvDrawimage.rectTransform.sizeDelta = new Vector2(0, OvDrawimage.rectTransform.sizeDelta.y
|
||||
);
|
||||
}
|
||||
|
||||
selectButton.transform.localPosition = EvDrawimage.transform.localPosition;
|
||||
selectButton.GetComponent<RectTransform>().sizeDelta = EvDrawimage.rectTransform.sizeDelta;
|
||||
}
|
||||
|
||||
public void UpLoad()
|
||||
{
|
||||
if (FatherTab.FatherWindow.ConnectedPoint == this)
|
||||
{
|
||||
FatherTab.FatherWindow.VisibleArea.SetActive(false);
|
||||
FatherTab.FatherWindow.ConnectedPoint = null;
|
||||
EvDrawimage.color = new Color(
|
||||
EvDrawimage.color.r,
|
||||
0.3019607843137255f,
|
||||
EvDrawimage.color.b, 0.5f
|
||||
);
|
||||
FatherTab.FatherWindow.StartText.text = "";
|
||||
FatherTab.FatherWindow.EndText.text = "";
|
||||
FatherTab.FatherWindow.StartValueText.text = "";
|
||||
FatherTab.FatherWindow.EndValueText.text = "";
|
||||
return;
|
||||
}
|
||||
if (FatherTab.FatherWindow.ConnectedPoint != null)
|
||||
{
|
||||
|
||||
FatherTab.FatherWindow.ConnectedPoint.EvDrawimage.color = new Color(
|
||||
FatherTab.FatherWindow.ConnectedPoint.EvDrawimage.color.r,
|
||||
0.3019607843137255f,
|
||||
FatherTab.FatherWindow.ConnectedPoint.EvDrawimage.color.b, 0.5f)
|
||||
;
|
||||
}
|
||||
List<string> enumNameList = System.Enum.GetNames(typeof(AnimationCurveType)).ToList();
|
||||
FatherTab.FatherWindow.VisibleArea.SetActive(true);
|
||||
FatherTab.FatherWindow.animationCurveTypeDropdown.ClearOptions();
|
||||
FatherTab.FatherWindow.animationCurveTypeDropdown.AddOptions(enumNameList);
|
||||
FatherTab.FatherWindow.animationCurveTypeDropdown.value = (int)animatedFloat.animationCurveType;
|
||||
FatherTab.FatherWindow.ConnectedPoint = this;
|
||||
EvDrawimage.color = new Color(
|
||||
EvDrawimage.color.r,
|
||||
0.75f,
|
||||
EvDrawimage.color.b,
|
||||
1f);
|
||||
FatherTab.FatherWindow.StartText.text = animatedFloat.startTime.ToString();
|
||||
FatherTab.FatherWindow.EndText.text = animatedFloat.endTime.ToString();
|
||||
FatherTab.FatherWindow.StartValueText.text = animatedFloat.startValue.ToString();
|
||||
FatherTab.FatherWindow.EndValueText.text = animatedFloat.endValue.ToString();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,7 +1,9 @@
|
||||
using System.Collections;
|
||||
using System.Collections.Generic;
|
||||
using System.Data;
|
||||
using System.Linq;
|
||||
using Ichni;
|
||||
using Ichni.Editor;
|
||||
using Ichni.RhythmGame;
|
||||
using Unity.VisualScripting;
|
||||
using UnityEngine;
|
||||
@@ -22,9 +24,11 @@ public class FlexibleFloatTab : MonoBehaviour
|
||||
public EventPoint eventPoint;
|
||||
public GameObject BeatLine;
|
||||
|
||||
public FlexibleFloat connectFloat;
|
||||
public int BeatDeviver => FatherWindow.BeatDeviver;
|
||||
public void Initialize(FlexibleFloat flexibleFloat, string Title)
|
||||
{
|
||||
connectFloat = flexibleFloat;
|
||||
for (int i = 0; i < (int)EditorManager.instance.songInformation.song.length / FatherWindow.timePerBeat; i++)
|
||||
{
|
||||
GameObject u = Instantiate(BeatLine, BeatArea);
|
||||
@@ -47,6 +51,10 @@ public class FlexibleFloatTab : MonoBehaviour
|
||||
|
||||
|
||||
|
||||
}
|
||||
foreach (var i in eventPoints)
|
||||
{
|
||||
i.ReDraw(scalevalue);
|
||||
}
|
||||
Area.localPosition = new Vector3(FatherWindow.songBeat * BeatDeviver, 0, 0);
|
||||
}
|
||||
@@ -55,23 +63,96 @@ public class FlexibleFloatTab : MonoBehaviour
|
||||
|
||||
Area.localPosition = new Vector3(-FatherWindow.songBeat * BeatDeviver, 0, 0);
|
||||
BeatArea.localPosition = Area.localPosition;
|
||||
CheckForAddEvent();
|
||||
|
||||
}
|
||||
|
||||
private void CheckForAddEvent()
|
||||
|
||||
|
||||
public void AddEvent()
|
||||
{
|
||||
if (Keyboard.current.rKey.wasPressedThisFrame && RectTransformUtility.RectangleContainsScreenPoint(Area, Mouse.current.position.ReadValue()))
|
||||
if (Keyboard.current.ctrlKey.isPressed)
|
||||
{
|
||||
AddEvent();
|
||||
EventPoint eventPoint = Instantiate(this.eventPoint, Area);
|
||||
eventPoint.FatherTab = this;
|
||||
eventPoint.Initialize(new AnimatedFloat(GetBeat(), GetBeat() + 1f, 0, 0, AnimationCurveType.Linear));
|
||||
eventPoints.Insert(FindInsertIndex(eventPoint.animatedFloat.startTime), eventPoint);
|
||||
if (eventPoints.IndexOf(eventPoint) - 1 >= 0)
|
||||
{
|
||||
eventPoint.LastEventPoint = eventPoints[eventPoints.IndexOf(eventPoint) - 1];
|
||||
eventPoint.LastEventPoint.NextEventPoint = eventPoint;
|
||||
}
|
||||
|
||||
if (eventPoints.IndexOf(eventPoint) + 1 < eventPoints.Count)
|
||||
{
|
||||
eventPoint.NextEventPoint = eventPoints[eventPoints.IndexOf(eventPoint) + 1];
|
||||
eventPoint.animatedFloat.endTime = eventPoint.NextEventPoint.animatedFloat.startTime;
|
||||
}
|
||||
eventPoint.ReDraw(scalevalue);
|
||||
//print(1);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
private void AddEvent()
|
||||
public int FindInsertIndex(float startTime)
|
||||
{
|
||||
print(1);
|
||||
int low = 0;
|
||||
int high = eventPoints.Count - 1;
|
||||
|
||||
while (low <= high)
|
||||
{
|
||||
int mid = (low + high) / 2;
|
||||
if (eventPoints[mid].animatedFloat.startTime < startTime)
|
||||
{
|
||||
low = mid + 1;
|
||||
}
|
||||
else
|
||||
{
|
||||
high = mid - 1;
|
||||
}
|
||||
}
|
||||
|
||||
return low;
|
||||
}
|
||||
|
||||
float GetBeat()//这里出现问题:转换坐标
|
||||
{
|
||||
Vector2 mouseLocalPos = MousePosition2Local();
|
||||
float far = BeatArea.transform.localPosition.x;
|
||||
int Beat = 0;
|
||||
|
||||
while (far < mouseLocalPos.x)
|
||||
{
|
||||
far += BeatDeviver;
|
||||
Beat++;
|
||||
}
|
||||
|
||||
return FatherWindow.timePerBeat * Beat;
|
||||
}
|
||||
|
||||
Vector2 MousePosition2Local()
|
||||
{
|
||||
Vector2 mousePosition = Mouse.current.position.ReadValue(); // 获取屏幕坐标
|
||||
Debug.Log($"Screen Position: {mousePosition}");
|
||||
Camera mainCamera;
|
||||
if (EditorManager.instance.cameraManager.isSceneCameraActive)
|
||||
{
|
||||
mainCamera = EditorManager.instance.cameraManager.sceneCamera.camera;
|
||||
}
|
||||
else
|
||||
{
|
||||
mainCamera = EditorManager.instance.cameraManager.gameCamera.camera;
|
||||
}
|
||||
|
||||
|
||||
|
||||
Vector2 mouseWorldPos = mainCamera.ScreenToWorldPoint(mousePosition); // 屏幕坐标转世界坐标
|
||||
Debug.Log($"World Position: {mouseWorldPos}");
|
||||
|
||||
Vector2 mouseLocalPos = transform.parent.transform.InverseTransformPoint(mouseWorldPos); // 世界坐标转本地坐标
|
||||
Debug.Log($"Local Position: {mouseLocalPos}");
|
||||
|
||||
return mouseLocalPos;
|
||||
}
|
||||
|
||||
public float scalevalue => FatherWindow.scalevalue;
|
||||
public void CurveScale(float value)
|
||||
@@ -81,5 +162,13 @@ public class FlexibleFloatTab : MonoBehaviour
|
||||
i.ReDraw(value);
|
||||
}
|
||||
}
|
||||
public void remoceAnim(AnimatedFloat a)
|
||||
{
|
||||
|
||||
if (connectFloat.animations.Contains(a))
|
||||
{
|
||||
|
||||
connectFloat.animations.Remove(a);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,14 +1,17 @@
|
||||
using System.Collections;
|
||||
using System.Collections.Generic;
|
||||
using System.Diagnostics.Eventing.Reader;
|
||||
using System.Linq;
|
||||
using Ichni;
|
||||
using Ichni.Editor;
|
||||
using Ichni.RhythmGame;
|
||||
using Sirenix.OdinInspector;
|
||||
using TMPro;
|
||||
using UnityEngine;
|
||||
using UnityEngine.Events;
|
||||
using UnityEngine.UI;
|
||||
|
||||
public class GraphicalFlexibleFloatWindow : MovableWindow
|
||||
public partial class GraphicalFlexibleFloatWindow : MovableWindow
|
||||
{
|
||||
public Button addNewUnitButton;
|
||||
public FlexibleFloatTab unitPrefab;
|
||||
@@ -80,3 +83,61 @@ public class GraphicalFlexibleFloatWindow : MovableWindow
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public partial class GraphicalFlexibleFloatWindow
|
||||
{
|
||||
[Title("AnimEditor")]
|
||||
public TMP_InputField StartText;
|
||||
public TMP_InputField EndText;
|
||||
public TMP_InputField StartValueText;
|
||||
public TMP_InputField EndValueText;
|
||||
public EventPoint ConnectedPoint;
|
||||
public TMP_Dropdown animationCurveTypeDropdown;
|
||||
public GameObject VisibleArea;
|
||||
|
||||
|
||||
public void Removed()
|
||||
{
|
||||
if (ConnectedPoint != null)
|
||||
{
|
||||
ConnectedPoint.FatherTab.remoceAnim(ConnectedPoint.animatedFloat);
|
||||
ConnectedPoint.FatherTab.eventPoints.Remove(ConnectedPoint);
|
||||
if (ConnectedPoint.LastEventPoint != null)
|
||||
{
|
||||
ConnectedPoint.LastEventPoint.NextEventPoint = ConnectedPoint.NextEventPoint;
|
||||
if (ConnectedPoint.LastEventPoint.NextEventPoint != null) ConnectedPoint.LastEventPoint.NextEventPoint.ReDraw(scalevalue);
|
||||
}
|
||||
|
||||
if (ConnectedPoint.NextEventPoint != null)
|
||||
{
|
||||
ConnectedPoint.NextEventPoint.LastEventPoint = ConnectedPoint.LastEventPoint;
|
||||
if (ConnectedPoint.NextEventPoint.LastEventPoint != null) ConnectedPoint.NextEventPoint.LastEventPoint.ReDraw(scalevalue);
|
||||
}
|
||||
|
||||
//Destroy(ConnectedPoint.animatedFloat);
|
||||
|
||||
VisibleArea.SetActive(false);
|
||||
|
||||
Destroy(ConnectedPoint.gameObject);
|
||||
ApplyParameters();
|
||||
}
|
||||
}
|
||||
public void ChangeValue()
|
||||
{
|
||||
if (ConnectedPoint != null)
|
||||
{
|
||||
float startTime = float.Parse(StartText.text);
|
||||
float endTime = float.Parse(EndText.text);
|
||||
float startValue = float.Parse(StartValueText.text);
|
||||
float endValue = float.Parse(EndValueText.text);
|
||||
|
||||
ConnectedPoint.animatedFloat.startTime = startTime;
|
||||
ConnectedPoint.animatedFloat.endTime = endTime;
|
||||
ConnectedPoint.animatedFloat.startValue = startValue;
|
||||
ConnectedPoint.animatedFloat.endValue = endValue;
|
||||
ConnectedPoint.animatedFloat.animationCurveType = (AnimationCurveType)animationCurveTypeDropdown.value;
|
||||
ConnectedPoint.Initialize(ConnectedPoint.animatedFloat);
|
||||
ConnectedPoint.ReDraw(scalevalue);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -35,11 +35,11 @@ namespace Ichni.Editor
|
||||
|
||||
var positionInputFields = inspector.GenerateVector3InputField(this, container, "Position", nameof(cameraPosition), true);
|
||||
positionInputFields.AddListenerFunction(() => camera.transform.position = cameraPosition);
|
||||
|
||||
|
||||
var eulerAnglesInputFields = inspector.GenerateVector3InputField(this, container, "Euler Angles", nameof(cameraEulerAngles), true);
|
||||
eulerAnglesInputFields.AddListenerFunction(() => camera.transform.eulerAngles = cameraEulerAngles);
|
||||
|
||||
|
||||
|
||||
|
||||
container.SetDeviver(1);
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user