From 840867963d43097ca0f9c2606cea9222d6fed165 Mon Sep 17 00:00:00 2001 From: huade <491009149@qq.com> Date: Thu, 27 Aug 2026 17:44:37 +0800 Subject: [PATCH] =?UTF-8?q?```=20feat(archer):=20=E6=9B=B4=E6=96=B0?= =?UTF-8?q?=E5=BC=93=E7=AE=AD=E6=89=8B=E6=94=BB=E5=87=BB=E7=B3=BB=E7=BB=9F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 修改箭矢材质颜色为橙色调,提升视觉效果 - 删除场景中预设的箭矢对象,改为运行时动态生成 - 配置弓箭手单位支持远程攻击类型,设置正确的项目引用 - 调整弓箭手碰撞体中心偏移,改善物理表现 - 新增箭矢发射位置标记点,用于准确控制投射物生成 - 禁用动画根运动防止旋转叠加,确保移动控制一致 - 添加场景辅助线显示箭矢发射位置,便于调试定位 - 优化弓箭模型动画循环参数,改进播放流畅度 ``` --- ...owProjectile_White.prefab => Arrow.prefab} | 2 +- ...le_White.prefab.meta => Arrow.prefab.meta} | 0 Assets/Model/弓箭手/ArrowProjectile_White.mat | 2 +- Assets/Model/弓箭手/弓箭手攻击.fbx.meta | 8 +- Assets/Scenes/CoreScene.scene | 174 ++++++------------ Assets/Script/UnitBase.cs | 20 ++ 6 files changed, 81 insertions(+), 125 deletions(-) rename Assets/Model/弓箭手/{ArrowProjectile_White.prefab => Arrow.prefab} (99%) rename Assets/Model/弓箭手/{ArrowProjectile_White.prefab.meta => Arrow.prefab.meta} (100%) diff --git a/Assets/Model/弓箭手/ArrowProjectile_White.prefab b/Assets/Model/弓箭手/Arrow.prefab similarity index 99% rename from Assets/Model/弓箭手/ArrowProjectile_White.prefab rename to Assets/Model/弓箭手/Arrow.prefab index 4e7ee4a..18c2130 100644 --- a/Assets/Model/弓箭手/ArrowProjectile_White.prefab +++ b/Assets/Model/弓箭手/Arrow.prefab @@ -15,7 +15,7 @@ GameObject: - component: {fileID: 4651139754486402669} m_Layer: 0 m_HasEditorInfo: 1 - m_Name: ArrowProjectile_White + m_Name: Arrow m_TagString: Untagged m_Icon: {fileID: 0} m_NavMeshLayer: 0 diff --git a/Assets/Model/弓箭手/ArrowProjectile_White.prefab.meta b/Assets/Model/弓箭手/Arrow.prefab.meta similarity index 100% rename from Assets/Model/弓箭手/ArrowProjectile_White.prefab.meta rename to Assets/Model/弓箭手/Arrow.prefab.meta diff --git a/Assets/Model/弓箭手/ArrowProjectile_White.mat b/Assets/Model/弓箭手/ArrowProjectile_White.mat index c8a07d7..bf6ae5f 100644 --- a/Assets/Model/弓箭手/ArrowProjectile_White.mat +++ b/Assets/Model/弓箭手/ArrowProjectile_White.mat @@ -78,6 +78,6 @@ Material: - _UVSec: 0 - _ZWrite: 1 m_Colors: - - _Color: {r: 1, g: 1, b: 1, a: 1} + - _Color: {r: 0.8238993, g: 0.57841074, b: 0.34458673, a: 1} - _EmissionColor: {r: 0, g: 0, b: 0, a: 1} m_BuildTextureStacks: [] diff --git a/Assets/Model/弓箭手/弓箭手攻击.fbx.meta b/Assets/Model/弓箭手/弓箭手攻击.fbx.meta index 24d05f1..616e67e 100644 --- a/Assets/Model/弓箭手/弓箭手攻击.fbx.meta +++ b/Assets/Model/弓箭手/弓箭手攻击.fbx.meta @@ -45,7 +45,7 @@ ModelImporter: takeName: mixamo.com internalID: -203655887218126122 firstFrame: 0 - lastFrame: 31 + lastFrame: 31.099998 wrapMode: 0 orientationOffsetY: 0 level: 0 @@ -55,10 +55,10 @@ ModelImporter: lockToRoot: 0 loopTime: 0 loopBlend: 0 - loopBlendOrientation: 0 + loopBlendOrientation: 1 loopBlendPositionY: 0 loopBlendPositionXZ: 0 - keepOriginalOrientation: 0 + keepOriginalOrientation: 1 keepOriginalPositionY: 1 keepOriginalPositionXZ: 0 heightFromFeet: 0 @@ -66,7 +66,7 @@ ModelImporter: bodyMask: 01000000010000000100000001000000010000000100000001000000010000000100000001000000010000000100000001000000 curves: [] events: - - time: 0.96719885 + - time: 0.9866667 functionName: OnAttackEffect data: objectReferenceParameter: {instanceID: 0} diff --git a/Assets/Scenes/CoreScene.scene b/Assets/Scenes/CoreScene.scene index 10755d3..1f31b16 100644 --- a/Assets/Scenes/CoreScene.scene +++ b/Assets/Scenes/CoreScene.scene @@ -1637,106 +1637,6 @@ Transform: - {fileID: 999094166} m_Father: {fileID: 452343421} m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!1001 &1038486208 -PrefabInstance: - m_ObjectHideFlags: 0 - serializedVersion: 2 - m_Modification: - serializedVersion: 3 - m_TransformParent: {fileID: 0} - m_Modifications: - - target: {fileID: 2585195233482669526, guid: aae7b6830fce0ff43b065876eff5ef47, - type: 3} - propertyPath: m_Name - value: ArrowProjectile_White - objectReference: {fileID: 0} - - target: {fileID: 3274732106972909994, guid: aae7b6830fce0ff43b065876eff5ef47, - type: 3} - propertyPath: m_LocalScale.x - value: 0.01 - objectReference: {fileID: 0} - - target: {fileID: 3274732106972909994, guid: aae7b6830fce0ff43b065876eff5ef47, - type: 3} - propertyPath: m_LocalScale.y - value: 0.3125 - objectReference: {fileID: 0} - - target: {fileID: 3274732106972909994, guid: aae7b6830fce0ff43b065876eff5ef47, - type: 3} - propertyPath: m_LocalScale.z - value: 0.024999999 - objectReference: {fileID: 0} - - target: {fileID: 3274732106972909994, guid: aae7b6830fce0ff43b065876eff5ef47, - type: 3} - propertyPath: m_LocalPosition.x - value: -2.272 - objectReference: {fileID: 0} - - target: {fileID: 3274732106972909994, guid: aae7b6830fce0ff43b065876eff5ef47, - type: 3} - propertyPath: m_LocalPosition.y - value: 0.373 - objectReference: {fileID: 0} - - target: {fileID: 3274732106972909994, guid: aae7b6830fce0ff43b065876eff5ef47, - type: 3} - propertyPath: m_LocalPosition.z - value: 0.166 - objectReference: {fileID: 0} - - target: {fileID: 3274732106972909994, guid: aae7b6830fce0ff43b065876eff5ef47, - type: 3} - propertyPath: m_LocalRotation.w - value: 0.5674013 - objectReference: {fileID: 0} - - target: {fileID: 3274732106972909994, guid: aae7b6830fce0ff43b065876eff5ef47, - type: 3} - propertyPath: m_LocalRotation.x - value: 0.81330854 - objectReference: {fileID: 0} - - target: {fileID: 3274732106972909994, guid: aae7b6830fce0ff43b065876eff5ef47, - type: 3} - propertyPath: m_LocalRotation.y - value: -0.10561989 - objectReference: {fileID: 0} - - target: {fileID: 3274732106972909994, guid: aae7b6830fce0ff43b065876eff5ef47, - type: 3} - propertyPath: m_LocalRotation.z - value: -0.07368516 - objectReference: {fileID: 0} - - target: {fileID: 3274732106972909994, guid: aae7b6830fce0ff43b065876eff5ef47, - type: 3} - propertyPath: m_LocalEulerAnglesHint.x - value: 114.854004 - objectReference: {fileID: 0} - - target: {fileID: 3274732106972909994, guid: aae7b6830fce0ff43b065876eff5ef47, - type: 3} - propertyPath: m_LocalEulerAnglesHint.y - value: 34.772995 - objectReference: {fileID: 0} - - target: {fileID: 3274732106972909994, guid: aae7b6830fce0ff43b065876eff5ef47, - type: 3} - propertyPath: m_LocalEulerAnglesHint.z - value: 37.423004 - objectReference: {fileID: 0} - - target: {fileID: 3274732106972909994, guid: aae7b6830fce0ff43b065876eff5ef47, - type: 3} - propertyPath: m_ConstrainProportionsScale - value: 1 - objectReference: {fileID: 0} - m_RemovedComponents: [] - m_RemovedGameObjects: [] - m_AddedGameObjects: [] - m_AddedComponents: [] - m_SourcePrefab: {fileID: 100100000, guid: aae7b6830fce0ff43b065876eff5ef47, type: 3} ---- !u!1 &1038486209 stripped -GameObject: - m_CorrespondingSourceObject: {fileID: 2585195233482669526, guid: aae7b6830fce0ff43b065876eff5ef47, - type: 3} - m_PrefabInstance: {fileID: 1038486208} - m_PrefabAsset: {fileID: 0} ---- !u!4 &1038486210 stripped -Transform: - m_CorrespondingSourceObject: {fileID: 3274732106972909994, guid: aae7b6830fce0ff43b065876eff5ef47, - type: 3} - m_PrefabInstance: {fileID: 1038486208} - m_PrefabAsset: {fileID: 0} --- !u!1 &1063768498 GameObject: m_ObjectHideFlags: 0 @@ -1772,18 +1672,6 @@ Transform: - {fileID: 1451120646} m_Father: {fileID: 2019663515} m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!134 &1111001695 -PhysicMaterial: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_Name: - dynamicFriction: 0.6 - staticFriction: 0.6 - bounciness: 0 - frictionCombine: 0 - bounceCombine: 0 --- !u!1 &1156019067 GameObject: m_ObjectHideFlags: 0 @@ -1976,9 +1864,10 @@ MonoBehaviour: attackRange: 5 attackPower: 10 attackDuration: 0 - attackType: 0 - projectilePrefab: {fileID: 1038486209} - projectileSpawnPoint: {fileID: 1038486210} + attackType: 2 + projectilePrefab: {fileID: 2585195233482669526, guid: aae7b6830fce0ff43b065876eff5ef47, + type: 3} + projectileSpawnPoint: {fileID: 1421129427} projectileSpeed: 20 projectileLifetime: 5 energyPerAttack: 20 @@ -1990,7 +1879,7 @@ CharacterController: m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 1202167643} - m_Material: {fileID: 1111001695} + m_Material: {fileID: 1299771151} m_IncludeLayers: serializedVersion: 2 m_Bits: 0 @@ -2008,7 +1897,7 @@ CharacterController: m_StepOffset: 0.3 m_SkinWidth: 0.08 m_MinMoveDistance: 0.001 - m_Center: {x: 0, y: 0, z: 0} + m_Center: {x: 0, y: 1, z: 0} --- !u!1 &1244039457 GameObject: m_ObjectHideFlags: 0 @@ -2056,6 +1945,18 @@ PhysicMaterial: bounciness: 0 frictionCombine: 0 bounceCombine: 0 +--- !u!134 &1299771151 +PhysicMaterial: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_Name: ' (Instance)' + dynamicFriction: 0.6 + staticFriction: 0.6 + bounciness: 0 + frictionCombine: 0 + bounceCombine: 0 --- !u!1 &1302061579 GameObject: m_ObjectHideFlags: 0 @@ -2126,6 +2027,38 @@ Transform: - {fileID: 318156480} m_Father: {fileID: 1037234380} m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &1421129426 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 7 + m_Component: + - component: {fileID: 1421129427} + m_Layer: 0 + m_HasEditorInfo: 1 + m_Name: arrowPos + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1421129427 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1421129426} + serializedVersion: 2 + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: -0.22, y: 0.95, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 2139088647} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} --- !u!1 &1451120645 GameObject: m_ObjectHideFlags: 0 @@ -3244,7 +3177,11 @@ PrefabInstance: objectReference: {fileID: 0} m_RemovedComponents: [] m_RemovedGameObjects: [] - m_AddedGameObjects: [] + m_AddedGameObjects: + - targetCorrespondingSourceObject: {fileID: -8679921383154817045, guid: c3401c41ece280d47af5c39c99b1e31a, + type: 3} + insertIndex: -1 + addedObject: {fileID: 1421129427} m_AddedComponents: [] m_SourcePrefab: {fileID: 100100000, guid: c3401c41ece280d47af5c39c99b1e31a, type: 3} --- !u!4 &2139088647 stripped @@ -3350,4 +3287,3 @@ SceneRoots: - {fileID: 1576577255} - {fileID: 3745968352218814396} - {fileID: 959019865} - - {fileID: 1038486208} diff --git a/Assets/Script/UnitBase.cs b/Assets/Script/UnitBase.cs index dc7a333..6405171 100644 --- a/Assets/Script/UnitBase.cs +++ b/Assets/Script/UnitBase.cs @@ -111,6 +111,9 @@ public class UnitBase : MonoBehaviour animator = GetComponent(); controller = GetComponent(); worldHealthBar = GetComponent(); + + // 位移和朝向由 CharacterController 与 UnitBase 控制,避免攻击动画的根运动叠加旋转。 + animator.applyRootMotion = false; //记录初始坐标 startPos = transform.position; randomTargetPos(); @@ -487,6 +490,23 @@ public class UnitBase : MonoBehaviour controller.Move(Vector3.up * getVerticalVelocity() * Time.deltaTime); } + // 在 Scene 视图中标记箭的发射位置和方向,便于调整空物体。 + private void OnDrawGizmos() + { + if (projectileSpawnPoint == null) + { + return; + } + + Vector3 position = projectileSpawnPoint.position; + Gizmos.color = Color.cyan; + Gizmos.DrawWireSphere(position, 0.08f); + Gizmos.DrawLine(position, position + projectileSpawnPoint.forward * 0.4f); + + Gizmos.color = Color.green; + Gizmos.DrawLine(position, position + projectileSpawnPoint.up * 0.15f); + } + //随机目标点 private void randomTargetPos() {