DESKTOP-FB72PO8\Administrator před 3 týdny
rodič
revize
3fc071414e

+ 1 - 1
Assets/Art/HeroTimeLine/gf_jianjue_timeline.playable

@@ -758,7 +758,7 @@ MonoBehaviour:
   isGround: 0
   isFollowTarget: 0
   isNotRotate: 0
-  isFollowRootTarget: 0
+  isFollowRootTarget: 1
   isAttSpeed: 0
   isLoop: 0
   loopAlone: 0

+ 10 - 2
Assets/Art/VFX/FXPrefabs/fx_gf_jianjue.prefab

@@ -24670,16 +24670,24 @@ MonoBehaviour:
   m_Name: 
   m_EditorClassIdentifier: 
   delayTime: 0.5
-  multipleTargetDelayTime: 0.3
+  multipleTargetDelayTime: 0.2
   hitFxName: fx_gf_jianjue_hit
   hitAudioName: 
   isPenetrate: 0
   isUseCustomTargetEndPos: 0
   customTargetEndPosIndex: 0
   speed: 10
-  parabolaCurveType: 1
+  parabolaCurveType: 2
   isTriggerGroundEnd: 0
   GroundHitFxName: 
+  isUseX: 1
+  BesselPath:
+    isActive: 0
+    controlPoints:
+    - {x: 0, y: 0, z: 0}
+    - {x: -3.4864006, y: 2.3623633, z: -1.9866285}
+    - {x: 0, y: 0, z: 2}
+    - {x: 0, y: 0, z: 5}
   maxDis: 20
 --- !u!54 &4514504105890551471
 Rigidbody:

Rozdílová data souboru nebyla zobrazena, protože soubor je příliš velký
+ 0 - 0
Assets/Res/TimeLineAssets/jianjue_timeline_TD.txt


+ 62 - 0
Assets/Scenes/testCombat.scene

@@ -4558,6 +4558,67 @@ PrefabInstance:
     m_AddedGameObjects: []
     m_AddedComponents: []
   m_SourcePrefab: {fileID: 100100000, guid: 2d3594b655f787f4e89cff82e081765e, type: 3}
+--- !u!1001 &6603587311896496110
+PrefabInstance:
+  m_ObjectHideFlags: 0
+  serializedVersion: 2
+  m_Modification:
+    serializedVersion: 3
+    m_TransformParent: {fileID: 0}
+    m_Modifications:
+    - target: {fileID: 5133357495284476621, guid: b470a31c532d0bf40a09986218ae3b52, type: 3}
+      propertyPath: m_LocalPosition.x
+      value: -1.101
+      objectReference: {fileID: 0}
+    - target: {fileID: 5133357495284476621, guid: b470a31c532d0bf40a09986218ae3b52, type: 3}
+      propertyPath: m_LocalPosition.y
+      value: -0.36
+      objectReference: {fileID: 0}
+    - target: {fileID: 5133357495284476621, guid: b470a31c532d0bf40a09986218ae3b52, type: 3}
+      propertyPath: m_LocalPosition.z
+      value: -2.138
+      objectReference: {fileID: 0}
+    - target: {fileID: 5133357495284476621, guid: b470a31c532d0bf40a09986218ae3b52, type: 3}
+      propertyPath: m_LocalRotation.w
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 5133357495284476621, guid: b470a31c532d0bf40a09986218ae3b52, type: 3}
+      propertyPath: m_LocalRotation.x
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 5133357495284476621, guid: b470a31c532d0bf40a09986218ae3b52, type: 3}
+      propertyPath: m_LocalRotation.y
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 5133357495284476621, guid: b470a31c532d0bf40a09986218ae3b52, type: 3}
+      propertyPath: m_LocalRotation.z
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 5133357495284476621, guid: b470a31c532d0bf40a09986218ae3b52, type: 3}
+      propertyPath: m_LocalEulerAnglesHint.x
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 5133357495284476621, guid: b470a31c532d0bf40a09986218ae3b52, type: 3}
+      propertyPath: m_LocalEulerAnglesHint.y
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 5133357495284476621, guid: b470a31c532d0bf40a09986218ae3b52, type: 3}
+      propertyPath: m_LocalEulerAnglesHint.z
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 6784858351995289862, guid: b470a31c532d0bf40a09986218ae3b52, type: 3}
+      propertyPath: m_Name
+      value: fx_gf_jianjue
+      objectReference: {fileID: 0}
+    - target: {fileID: 6784858351995289862, guid: b470a31c532d0bf40a09986218ae3b52, type: 3}
+      propertyPath: m_IsActive
+      value: 0
+      objectReference: {fileID: 0}
+    m_RemovedComponents: []
+    m_RemovedGameObjects: []
+    m_AddedGameObjects: []
+    m_AddedComponents: []
+  m_SourcePrefab: {fileID: 100100000, guid: b470a31c532d0bf40a09986218ae3b52, type: 3}
 --- !u!1001 &6794712585992138843
 PrefabInstance:
   m_ObjectHideFlags: 0
@@ -4981,3 +5042,4 @@ SceneRoots:
   - {fileID: 4885491695541437786}
   - {fileID: 750339310}
   - {fileID: 891104893}
+  - {fileID: 6603587311896496110}

+ 1 - 1
Assets/Scripts/GameLogic/Combat/Skill/S1001.cs

@@ -14,7 +14,7 @@ namespace GameLogic.Combat.Skill
     {
         protected override void ProUseSkill()
         {
-            for (int i = 0; i < 3; i++)
+            for (int i = 0; i < 7; i++)
             {
                 CombatHeroHitPoint combatHeroHitPoint=    CombatHeroEntity.CombatAIBasic.currFocusTarget.GetThis<CombatHeroEntity>()
                     .GetMainHotPoin<CombatHeroHitPoint>();

+ 4 - 0
Assets/Scripts/GameLogic/Paritcle/GameTimeLineParticleFactory.cs

@@ -164,6 +164,10 @@ public class GameTimeLineParticleFactory : ITimeLineParticleFactory
                     {
                         pool.transform.SetParent(combatHeroEntity.GetMainHotPoin<CombatHeroHitPoint>()
                             .GetSpecialDotInfo("").targetTran);
+                    }else if (fxTarget != null)
+                    {
+                        pool.transform.SetParent(fxTarget
+                            .GetSpecialDotInfo("").targetTran);
                     }
 
                     pool.transform.localEulerAngles = Vector3.zero;

+ 127 - 3
Assets/Scripts/GameLogic/Paritcle/ParitcleLogic/FxParabolaBulletLogic.cs

@@ -1,9 +1,11 @@
 using System.Collections.Generic;
 using Core.Audio;
 using Core.Triiger;
+using Core.Utility;
 using GameLogic.Combat.CombatTool;
 using GameLogic.Combat.Hero;
 using GameLogic.Combat.Skill;
+using UnityEditor;
 using UnityEngine;
 using UTool.CustomizeTimeLogic.FxLogic.TimeLineEventinterface;
 
@@ -25,6 +27,9 @@ namespace Common.Combat.FxAILogic
         [Header("曲线类型")] public CurveType parabolaCurveType;
         [Header("释放碰撞到地面时结束")] public bool isTriggerGroundEnd;
         [Header("碰撞到地面时的特效")] public string GroundHitFxName;
+        [Header("是否使用X曲线跟随角色")] public bool isUseX;
+        [Header("自定义曲线")] public BesselPath BesselPath;
+
 
         private Vector3 endPos;
         private Vector3 dir;
@@ -34,6 +39,7 @@ namespace Common.Combat.FxAILogic
 
         // private BesselPath _besselPath;
 
+        protected BesselPath moveBezierPath;
 
         private float _addTime;
         protected Vector3 startDir;
@@ -57,22 +63,60 @@ namespace Common.Combat.FxAILogic
             if (parabolaCurveType == CurveType.DynamicCurve)
             {
                 Vector3 off = _currPos - CombatHeroEntity.GameObject.transform.position;
+                float x = Mathf.Sign(Random.Range(-1, 1));
+                if (isUseX)
+                {
+                    Vector3 pos =
+                        CombatHeroEntity.GameObject.transform.InverseTransformPoint(gameObject.transform.position);
+                    x = Mathf.Sign(pos.x);
+                }
+
                 startDir = CombatHeroEntity.GameObject.transform.TransformPoint(off +
                     new Vector3(
-                        Mathf.Sign(Random.Range(-1, 1)),
+                        x,
                         Random.Range(0.1f, 1f),
                         Random.Range(0.1f, 5f)));
 
                 startDir = (startDir - _currPos).normalized;
                 dirLerpTime = 0;
                 dir = (endPos - CurrPos).normalized;
+                gameObject.transform.rotation = Quaternion.LookRotation(dir);
             }
-            else
+            else if (parabolaCurveType == CurveType.Beeline)
             {
                 dir = (endPos - _currPos).normalized;
+                gameObject.transform.rotation = Quaternion.LookRotation(dir);
             }
+            else if (parabolaCurveType == CurveType.CustomizeCurve)
+            {
+                gameObject.transform.rotation = CombatHeroEntity.GameObject.transform.rotation;
+                Vector3 pos =
+                    CombatHeroEntity.GameObject.transform.InverseTransformPoint(gameObject.transform.position);
+                if (moveBezierPath == null)
+                {
+                    moveBezierPath = new BesselPath();
+                }
 
-            gameObject.transform.rotation = Quaternion.LookRotation(dir);
+                moveBezierPath.controlPoints.Clear();
+                for (int i = 0; i < BesselPath.controlPoints.Count; i++)
+                {
+                    Vector3 p = BesselPath.controlPoints[i];
+                    if (isUseX)
+                    {
+                        if (i == 1)
+                        {
+                            p.x = pos.x > 0 ? p.x * -1 : p.x;
+                        }
+                    }
+
+
+                    moveBezierPath.controlPoints.Add(gameObject.transform.TransformPoint(p));
+                }
+
+
+                _addTime = 1.0f / (moveBezierPath.GetLengthAtT(0) / speed);
+                currTime = 0;
+            }
         }
 
         void TriggerGround()
@@ -257,6 +301,14 @@ namespace Common.Combat.FxAILogic
 
         private void CustomizeCurve(float time)
         {
+            currTime += _addTime * time;
+            GetTargetPos();
+            moveBezierPath.controlPoints[3] = endPos;
+            // moveBezierPath.controlPoints[0] = (gameObject.transform.TransformPoint(BesselPath.controlPoints[0]));
+            Vector3 p = moveBezierPath.CalculatePoint(currTime);
+            Vector3 p2 = moveBezierPath.CalculatePoint(currTime - 0.01f);
+            gameObject.transform.position = p;
+            gameObject.transform.rotation = Quaternion.LookRotation((p - p2).normalized);
         }
 
         private void DynamicCurve(float time)
@@ -288,5 +340,77 @@ namespace Common.Combat.FxAILogic
 
             UnRegister = null;
         }
+
+
+        private void OnDrawGizmos()
+        {
+            if (parabolaCurveType != CurveType.CustomizeCurve)
+            {
+                return;
+            }
+
+            if (BesselPath.controlPoints.Count < 4)
+            {
+                BesselPath.controlPoints.Add(Vector3.zero);
+                BesselPath.controlPoints.Add(new Vector3(-1, 1, -1));
+                BesselPath.controlPoints.Add(new Vector3(0, 0, 2));
+                BesselPath.controlPoints.Add(new Vector3(0, 0, 5));
+                return;
+            }
+
+            Gizmos.color = Color.blue;
+
+            // 绘制控制点
+
+
+            // 绘制曲线
+            Vector3 previousPoint = BesselPath.CalculatePoint(0) + transform.position;
+            int segments = 50;
+
+            for (int i = 1; i <= segments; i++)
+            {
+                float t = i / (float)segments;
+                Vector3 currentPoint = BesselPath.CalculatePoint(t) + transform.position;
+                // Gizmos.DrawSphere(currentPoint, 0.03f);
+                Gizmos.DrawLine(previousPoint, currentPoint);
+                previousPoint = currentPoint;
+            }
+        }
+#if UNITY_EDITOR
+        [CustomEditor(typeof(FxParabolaBulletLogic))]
+        public class MovableCoordinateEditor : Editor
+        {
+            void OnSceneGUI()
+            {
+                FxParabolaBulletLogic fxParabolaBulletLogic = target as FxParabolaBulletLogic;
+                if (fxParabolaBulletLogic.parabolaCurveType != CurveType.CustomizeCurve)
+                {
+                    return;
+                }
+
+                if (fxParabolaBulletLogic.BesselPath.controlPoints.Count < 4)
+                {
+                    return;
+                }
+
+                // 使用 Handles.PositionHandle 提供一个可拖动的控制柄
+
+                for (int i = 0; i < fxParabolaBulletLogic.BesselPath.controlPoints.Count; i++)
+                {
+                    EditorGUI.BeginChangeCheck();
+                    Vector3 newPosition = Handles.PositionHandle(
+                        fxParabolaBulletLogic.BesselPath.controlPoints[i] +
+                        fxParabolaBulletLogic.gameObject.transform.position,
+                        Quaternion.identity);
+                    if (EditorGUI.EndChangeCheck())
+                    {
+                        Undo.RecordObject(fxParabolaBulletLogic, "Move Coordinate");
+                        fxParabolaBulletLogic.BesselPath.controlPoints[i] =
+                            newPosition - fxParabolaBulletLogic.gameObject.transform.position;
+                    }
+                }
+            }
+        }
+#endif
     }
 }

Rozdílová data souboru nebyla zobrazena, protože soubor je příliš velký
+ 940 - 1002
UserSettings/Layouts/default-2022.dwlt


+ 1 - 0
XiuXianGame.sln.DotSettings.user

@@ -5,6 +5,7 @@
 	<s:String x:Key="/Default/CodeInspection/ExcludedFiles/FilesAndFoldersToSkip2/=7020124F_002D9FFC_002D4AC3_002D8F3D_002DAAB8E0240759_002Ff_003AObject_002Ecs_002Fl_003AC_0021_003FUsers_003FAdministrator_003FAppData_003FRoaming_003FJetBrains_003FRider2024_002E3_003Fresharper_002Dhost_003FDecompilerCache_003Fdecompiler_003F5c4a01f363eb46748231fc41bd9bdd8517e000_003F78_003F5e834fc5_003FObject_002Ecs/@EntryIndexedValue">ForceIncluded</s:String>
 	<s:String x:Key="/Default/CodeInspection/ExcludedFiles/FilesAndFoldersToSkip2/=7020124F_002D9FFC_002D4AC3_002D8F3D_002DAAB8E0240759_002Ff_003AThrowHelper_002Ecs_002Fl_003AC_0021_003FUsers_003Fck_003FAppData_003FRoaming_003FJetBrains_003FRider2024_002E2_003Fresharper_002Dhost_003FDecompilerCache_003Fdecompiler_003Fe4df6db7850b4c40b72002ff5da8188846ac00_003F3b_003F1a234af4_003FThrowHelper_002Ecs/@EntryIndexedValue">ForceIncluded</s:String>
 	<s:String x:Key="/Default/CodeInspection/ExcludedFiles/FilesAndFoldersToSkip2/=7020124F_002D9FFC_002D4AC3_002D8F3D_002DAAB8E0240759_002Ff_003ATransform_002Ecs_002Fl_003AC_0021_003FUsers_003FAdministrator_003FAppData_003FRoaming_003FJetBrains_003FRider2024_002E3_003Fresharper_002Dhost_003FDecompilerCache_003Fdecompiler_003F5c4a01f363eb46748231fc41bd9bdd8517e000_003F66_003F966ef437_003FTransform_002Ecs/@EntryIndexedValue">ForceIncluded</s:String>
+	<s:String x:Key="/Default/CodeInspection/ExcludedFiles/FilesAndFoldersToSkip2/=7020124F_002D9FFC_002D4AC3_002D8F3D_002DAAB8E0240759_002Ff_003AUndo_002Ecs_002Fl_003AC_0021_003FUsers_003FAdministrator_003FAppData_003FRoaming_003FJetBrains_003FRider2024_002E3_003Fresharper_002Dhost_003FDecompilerCache_003Fdecompiler_003F1f63769030ae497a94b35af8517071579d5a00_003Fff_003Fe1991d08_003FUndo_002Ecs/@EntryIndexedValue">ForceIncluded</s:String>
 	<s:String x:Key="/Default/CodeInspection/ExcludedFiles/FilesAndFoldersToSkip2/=7020124F_002D9FFC_002D4AC3_002D8F3D_002DAAB8E0240759_002Ff_003AVector3_002Ecs_002Fl_003AC_0021_003FUsers_003FAdministrator_003FAppData_003FRoaming_003FJetBrains_003FRider2024_002E3_003Fresharper_002Dhost_003FDecompilerCache_003Fdecompiler_003F2008d2d6093f4149aaeafd5f414aa7a517c400_003F01_003F0ef8dd4a_003FVector3_002Ecs/@EntryIndexedValue">ForceIncluded</s:String>
 	<s:String x:Key="/Default/CodeInspection/ExcludedFiles/FilesAndFoldersToSkip2/=7020124F_002D9FFC_002D4AC3_002D8F3D_002DAAB8E0240759_002Ff_003AVector3_002Ecs_002Fl_003AC_0021_003FUsers_003FAdministrator_003FAppData_003FRoaming_003FJetBrains_003FRider2024_002E3_003Fresharper_002Dhost_003FDecompilerCache_003Fdecompiler_003F5c4a01f363eb46748231fc41bd9bdd8517e000_003Fe4_003F8efb9845_003FVector3_002Ecs/@EntryIndexedValue">ForceIncluded</s:String>
 	<s:String x:Key="/Default/CodeInspection/ExcludedFiles/FilesAndFoldersToSkip2/=7020124F_002D9FFC_002D4AC3_002D8F3D_002DAAB8E0240759_002Ff_003AVector3_002Ecs_002Fl_003AC_0021_003FUsers_003Fck_003FAppData_003FRoaming_003FJetBrains_003FRider2024_002E2_003Fresharper_002Dhost_003FDecompilerCache_003Fdecompiler_003F2008d2d6093f4149aaeafd5f414aa7a517c400_003Fd3_003F23d17a83_003FVector3_002Ecs/@EntryIndexedValue">ForceIncluded</s:String></wpf:ResourceDictionary>

Některé soubory nejsou zobrazeny, neboť je v těchto rozdílových datech změněno mnoho souborů