diff --git a/Assets/Animation/荒野猎手.overrideController b/Assets/Animation/荒野猎手.overrideController new file mode 100644 index 0000000..99c8369 --- /dev/null +++ b/Assets/Animation/荒野猎手.overrideController @@ -0,0 +1,15 @@ +%YAML 1.1 +%TAG !u! tag:yousandi.cn,2023: +--- !u!221 &22100000 +AnimatorOverrideController: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_Name: "\u8352\u91CE\u730E\u624B" + m_Controller: {fileID: 9100000, guid: 040acc435cecb4b16b965a1136ce6834, type: 2} + m_Clips: + - m_OriginalClip: {fileID: -203655887218126122, guid: 5072af719b9b1401787c6c55f048d8ed, + type: 3} + m_OverrideClip: {fileID: -203655887218126122, guid: 3cf486ef6ee70e743b217bd5f96516b8, + type: 3} diff --git a/Assets/Animation/荒野猎手.overrideController.meta b/Assets/Animation/荒野猎手.overrideController.meta new file mode 100644 index 0000000..a99d740 --- /dev/null +++ b/Assets/Animation/荒野猎手.overrideController.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: C3wYvHmtAnJkCHk4Z1YjFYbgDB0VFLQNfBsdG26IX1e+WQdwwu5Amjs= +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 22100000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Model/第二章/荒野猎手.meta b/Assets/Model/第二章/荒野猎手.meta new file mode 100644 index 0000000..be71c68 --- /dev/null +++ b/Assets/Model/第二章/荒野猎手.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: WywX5C+lV3+nhInJUxKkpAgr+PxhaulQSqdpWa5ZfYBndJtR0tIgUEY= +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Model/第二章/荒野猎手/export_fea0f117-fbe6-4c49-b7c8-e9d06d2187a9.fbx b/Assets/Model/第二章/荒野猎手/export_fea0f117-fbe6-4c49-b7c8-e9d06d2187a9.fbx new file mode 100644 index 0000000..6a88bd3 Binary files /dev/null and b/Assets/Model/第二章/荒野猎手/export_fea0f117-fbe6-4c49-b7c8-e9d06d2187a9.fbx differ diff --git a/Assets/Model/第二章/荒野猎手/export_fea0f117-fbe6-4c49-b7c8-e9d06d2187a9.fbx.meta b/Assets/Model/第二章/荒野猎手/export_fea0f117-fbe6-4c49-b7c8-e9d06d2187a9.fbx.meta new file mode 100644 index 0000000..556880c --- /dev/null +++ b/Assets/Model/第二章/荒野猎手/export_fea0f117-fbe6-4c49-b7c8-e9d06d2187a9.fbx.meta @@ -0,0 +1,149 @@ +fileFormatVersion: 2 +guid: Xn8dtCn+USoM3y8Q1spG7or0i5ihQ5/VOTuLQmVn9ElNxLu+WwKV5R4= +ModelImporter: + serializedVersion: 22361 + internalIDToNameTable: [] + externalObjects: {} + materials: + materialImportMode: 2 + materialName: 0 + materialSearch: 1 + materialLocation: 1 + animations: + legacyGenerateAnimations: 4 + bakeSimulation: 0 + resampleCurves: 1 + optimizeGameObjects: 0 + removeConstantScaleCurves: 0 + motionNodeName: + rigImportErrors: + rigImportWarnings: + animationImportErrors: + animationImportWarnings: + animationRetargetingWarnings: + animationDoRetargetingWarnings: 0 + importAnimatedCustomProperties: 0 + importConstraints: 0 + animationCompression: 1 + aCLCompressionLevel: 3 + aCLCurvePrecision: 0.01 + aCLFastSampleMode: 1 + animationRotationError: 0.5 + animationPositionError: 0.5 + animationScaleError: 0.5 + animationWrapMode: 0 + extraExposedTransformPaths: [] + extraUserProperties: [] + clipAnimations: [] + isReadable: 0 + tuanjieGIEnable: 0 + tuanjieGIGenSDFFactor: 1 + tuanjieGIGenSDFBias: 0.25 + tuanjieGIDoubleSidedMode: 0 + tuanjieGIGenFacetNums: 12 + meshes: + lODScreenPercentages: [] + globalScale: 1 + meshCompression: 0 + totalVerticesCount: 14728 + totalTrianglesCount: 5000 + addColliders: 0 + useSRGBMaterialColor: 1 + sortHierarchyByName: 1 + importPhysicalCameras: 1 + importVisibility: 1 + importBlendShapes: 1 + importCameras: 1 + importLights: 1 + nodeNameCollisionStrategy: 1 + fileIdsGeneration: 2 + swapUVChannels: 0 + generateSecondaryUV: 0 + useFileUnits: 1 + keepQuads: 0 + weldVertices: 1 + bakeAxisConversion: 0 + preserveHierarchy: 0 + skinWeightsMode: 0 + maxBonesPerVertex: 4 + minBoneWeight: 0.001 + optimizeBones: 1 + meshOptimizationFlags: -1 + indexFormat: 0 + secondaryUVAngleDistortion: 8 + secondaryUVAreaDistortion: 15.000001 + secondaryUVHardAngle: 88 + secondaryUVMarginMethod: 1 + secondaryUVMinLightmapResolution: 40 + secondaryUVMinObjectScale: 1 + secondaryUVPackMargin: 4 + useFileScale: 1 + strictVertexDataChecks: 0 + virtualGeometry: + virtualGeometry: 0 + useTransparent: 0 + setVGForeachMesh: 0 + isFirstUse: 1 + virtualGeometrySettings: + generateGeometryBuffer: 0 + surfaceCompensation: 0 + allMeshUse: 1 + ignoreSimpleMesh: 0 + transformScaleState: 0 + isPossibleOverflow: 0 + hasBoneData: 0 + isBoneCountOverflow: 0 + virtualGeometryPlatformSettings: [] + selectedVGMeshes: + - index: 0 + meshName: node_0 + lodLevel: 0 + meshGeometryBuffer: 0 + supportVGMeshes: + - index: 0 + meshName: node_0 + lodLevel: 0 + meshGeometryBuffer: 0 + tangentSpace: + normalSmoothAngle: 60 + normalImportMode: 0 + tangentImportMode: 3 + normalCalculationMode: 4 + legacyComputeAllNormalsFromSmoothingGroupsWhenMeshHasBlendShapes: 0 + blendShapeNormalImportMode: 1 + normalSmoothingSource: 0 + referencedClips: [] + importAnimation: 1 + overrideDefaultPose: 0 + humanDescription: + serializedVersion: 3 + human: [] + skeleton: [] + namedPoseList: + - name: Default + skeleton: [] + armTwist: 0.5 + foreArmTwist: 0.5 + upperLegTwist: 0.5 + legTwist: 0.5 + armStretch: 0.05 + legStretch: 0.05 + feetSpacing: 0 + globalScale: 1 + rootMotionBoneName: + defaultPoseIndex: -1 + hasTranslationDoF: 0 + hasExtraRoot: 0 + skeletonHasParents: 1 + lastHumanDescriptionAvatarSource: {instanceID: 0} + autoGenerateAvatarMappingIfUnspecified: 1 + animationType: 2 + humanoidOversampling: 1 + avatarSetup: 0 + addHumanoidExtraRootOnlyWhenUsingAvatar: 1 + importBlendShapeDeformPercent: 1 + remapMaterialsIfMaterialImportModeIsNone: 0 + additionalBone: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Model/第二章/荒野猎手/texture_pbr_20250901 (4).png b/Assets/Model/第二章/荒野猎手/texture_pbr_20250901 (4).png new file mode 100644 index 0000000..69a7ab2 Binary files /dev/null and b/Assets/Model/第二章/荒野猎手/texture_pbr_20250901 (4).png differ diff --git a/Assets/Model/第二章/荒野猎手/texture_pbr_20250901 (4).png.meta b/Assets/Model/第二章/荒野猎手/texture_pbr_20250901 (4).png.meta new file mode 100644 index 0000000..f96421a --- /dev/null +++ b/Assets/Model/第二章/荒野猎手/texture_pbr_20250901 (4).png.meta @@ -0,0 +1,163 @@ +fileFormatVersion: 2 +guid: WigcsH+oBn1GkOluyD9zP1q1crQXqgLJjAQC2mjZsBphsxbFlZfe0x0= +TextureImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 14 + mipmaps: + mipMapMode: 0 + enableMipMap: 1 + sRGBTexture: 1 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + flipGreenChannel: 0 + isReadable: 0 + webStreaming: 0 + priorityLevel: 0 + uploadedMode: 2 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + vTOnly: 0 + ignoreMipmapLimit: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: 1 + aniso: 1 + mipBias: 0 + wrapU: 0 + wrapV: 0 + wrapW: 0 + nPOTScale: 1 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 0 + spriteTessellationDetail: -1 + textureType: 0 + textureShape: 1 + singleChannelComponent: 0 + flipbookRows: 1 + flipbookColumns: 1 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + ignorePngGamma: 0 + applyGammaDecoding: 0 + swizzle: 50462976 + cookieLightType: 0 + platformSettings: + - serializedVersion: 3 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + maxPlaceholderSize: 32 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Standalone + maxTextureSize: 2048 + maxPlaceholderSize: 32 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Server + maxTextureSize: 2048 + maxPlaceholderSize: 32 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: WebGL + maxTextureSize: 2048 + maxPlaceholderSize: 32 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: WeixinMiniGame + maxTextureSize: 2048 + maxPlaceholderSize: 32 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + nameFileIdTable: {} + mipmapLimitGroupName: + pSDRemoveMatte: 0 + doOverrideTextureManagerOperations: 0 + platformOperationGroupSettings: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Model/第二章/荒野猎手/荒野猎手.fbx b/Assets/Model/第二章/荒野猎手/荒野猎手.fbx new file mode 100644 index 0000000..2b2be9b Binary files /dev/null and b/Assets/Model/第二章/荒野猎手/荒野猎手.fbx differ diff --git a/Assets/Model/第二章/荒野猎手/荒野猎手.fbx.meta b/Assets/Model/第二章/荒野猎手/荒野猎手.fbx.meta new file mode 100644 index 0000000..9498fb6 --- /dev/null +++ b/Assets/Model/第二章/荒野猎手/荒野猎手.fbx.meta @@ -0,0 +1,565 @@ +fileFormatVersion: 2 +guid: DClJsSKrBi3US/iRrb+5vjrAFyXbuqBpZLuP3awC3HzYgpKnYMf0Dik= +ModelImporter: + serializedVersion: 22361 + internalIDToNameTable: [] + externalObjects: + - first: + type: UnityEngine:Material + assembly: UnityEngine.CoreModule + name: No Name + second: {fileID: 2100000, guid: bd8a85822b5d6db4f96f6d7db71daf98, type: 2} + materials: + materialImportMode: 1 + materialName: 0 + materialSearch: 1 + materialLocation: 1 + animations: + legacyGenerateAnimations: 4 + bakeSimulation: 0 + resampleCurves: 1 + optimizeGameObjects: 0 + removeConstantScaleCurves: 0 + motionNodeName: + rigImportErrors: + rigImportWarnings: + animationImportErrors: + animationImportWarnings: + animationRetargetingWarnings: + animationDoRetargetingWarnings: 0 + importAnimatedCustomProperties: 0 + importConstraints: 0 + animationCompression: 3 + aCLCompressionLevel: 3 + aCLCurvePrecision: 0.01 + aCLFastSampleMode: 1 + animationRotationError: 0.5 + animationPositionError: 0.5 + animationScaleError: 0.5 + animationWrapMode: 0 + extraExposedTransformPaths: [] + extraUserProperties: [] + clipAnimations: + - serializedVersion: 18 + name: "\u6295\u63B7" + takeName: mixamo.com + internalID: -203655887218126122 + firstFrame: 0 + lastFrame: 66 + wrapMode: 0 + orientationOffsetY: 0 + level: 0 + cycleOffset: 0 + loop: 0 + hasAdditiveReferencePose: 0 + lockToRoot: 0 + loopTime: 0 + loopBlend: 0 + loopBlendOrientation: 0 + loopBlendPositionY: 0 + loopBlendPositionXZ: 0 + keepOriginalOrientation: 0 + keepOriginalPositionY: 1 + keepOriginalPositionXZ: 0 + heightFromFeet: 0 + mirror: 0 + bodyMask: 01000000010000000100000001000000010000000100000001000000010000000100000001000000010000000100000001000000 + curves: [] + events: + - time: 0.28456584 + functionName: OnAttackEffect + data: + objectReferenceParameter: {instanceID: 0} + floatParameter: 0 + intParameter: 0 + messageOptions: 0 + intervals: [] + transformMask: [] + maskType: 3 + maskSource: {instanceID: 0} + additiveReferencePoseFrame: 0 + additiveType: 0 + basePoseType: 0 + additiveSelectedAnimation: {instanceID: 0} + additiveSelectedAnimationFrameIndex: 0 + isReadable: 0 + tuanjieGIEnable: 0 + tuanjieGIGenSDFFactor: 1 + tuanjieGIGenSDFBias: 0.25 + tuanjieGIDoubleSidedMode: 0 + tuanjieGIGenFacetNums: 12 + meshes: + lODScreenPercentages: [] + globalScale: 200 + meshCompression: 0 + totalVerticesCount: 9862 + totalTrianglesCount: 4998 + addColliders: 0 + useSRGBMaterialColor: 1 + sortHierarchyByName: 1 + importPhysicalCameras: 1 + importVisibility: 1 + importBlendShapes: 1 + importCameras: 1 + importLights: 1 + nodeNameCollisionStrategy: 1 + fileIdsGeneration: 2 + swapUVChannels: 0 + generateSecondaryUV: 0 + useFileUnits: 1 + keepQuads: 0 + weldVertices: 1 + bakeAxisConversion: 0 + preserveHierarchy: 0 + skinWeightsMode: 0 + maxBonesPerVertex: 4 + minBoneWeight: 0.001 + optimizeBones: 1 + meshOptimizationFlags: -1 + indexFormat: 0 + secondaryUVAngleDistortion: 8 + secondaryUVAreaDistortion: 15.000001 + secondaryUVHardAngle: 88 + secondaryUVMarginMethod: 1 + secondaryUVMinLightmapResolution: 40 + secondaryUVMinObjectScale: 1 + secondaryUVPackMargin: 4 + useFileScale: 1 + strictVertexDataChecks: 0 + virtualGeometry: + virtualGeometry: 0 + useTransparent: 0 + setVGForeachMesh: 0 + isFirstUse: 1 + virtualGeometrySettings: + generateGeometryBuffer: 0 + surfaceCompensation: 0 + allMeshUse: 1 + ignoreSimpleMesh: 0 + transformScaleState: 0 + isPossibleOverflow: 0 + hasBoneData: 0 + isBoneCountOverflow: 0 + virtualGeometryPlatformSettings: + - serializedVersion: 0 + overridden: 0 + ignorePlatformSupport: 0 + buildTarget: DefaultVirtualGeometryPlatform + positionPrecision: -2147483648 + normalPrecision: -2147483648 + tangentPrecision: -2147483648 + boneWeightPrecision: -2147483648 + detailedTriangleCount: 0 + detailedVertexCount: 0 + rootPageSize: 0 + streamablePageSize: 0 + reserveTrianglePercent: 100 + reserveDetailLevel: 0 + - serializedVersion: 0 + overridden: 0 + ignorePlatformSupport: 0 + buildTarget: Standalone + positionPrecision: -2147483648 + normalPrecision: -2147483648 + tangentPrecision: -2147483648 + boneWeightPrecision: -2147483648 + detailedTriangleCount: 0 + detailedVertexCount: 0 + rootPageSize: 0 + streamablePageSize: 0 + reserveTrianglePercent: 100 + reserveDetailLevel: 0 + - serializedVersion: 0 + overridden: 0 + ignorePlatformSupport: 0 + buildTarget: iPhone + positionPrecision: -2147483648 + normalPrecision: -2147483648 + tangentPrecision: -2147483648 + boneWeightPrecision: -2147483648 + detailedTriangleCount: 0 + detailedVertexCount: 0 + rootPageSize: 0 + streamablePageSize: 0 + reserveTrianglePercent: 100 + reserveDetailLevel: 0 + - serializedVersion: 0 + overridden: 0 + ignorePlatformSupport: 0 + buildTarget: Android + positionPrecision: -2147483648 + normalPrecision: -2147483648 + tangentPrecision: -2147483648 + boneWeightPrecision: -2147483648 + detailedTriangleCount: 0 + detailedVertexCount: 0 + rootPageSize: 0 + streamablePageSize: 0 + reserveTrianglePercent: 100 + reserveDetailLevel: 0 + selectedVGMeshes: + - index: 0 + meshName: node_0 + lodLevel: 0 + meshGeometryBuffer: 0 + supportVGMeshes: + - index: 0 + meshName: node_0 + lodLevel: 0 + meshGeometryBuffer: 0 + tangentSpace: + normalSmoothAngle: 60 + normalImportMode: 0 + tangentImportMode: 3 + normalCalculationMode: 4 + legacyComputeAllNormalsFromSmoothingGroupsWhenMeshHasBlendShapes: 0 + blendShapeNormalImportMode: 1 + normalSmoothingSource: 0 + referencedClips: [] + importAnimation: 1 + overrideDefaultPose: 0 + humanDescription: + serializedVersion: 3 + human: + - boneName: mixamorig:Hips + humanName: Hips + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: mixamorig:LeftUpLeg + humanName: LeftUpperLeg + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: mixamorig:RightUpLeg + humanName: RightUpperLeg + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: mixamorig:LeftLeg + humanName: LeftLowerLeg + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: mixamorig:RightLeg + humanName: RightLowerLeg + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: mixamorig:LeftFoot + humanName: LeftFoot + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: mixamorig:RightFoot + humanName: RightFoot + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: mixamorig:Spine + humanName: Spine + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: mixamorig:Spine1 + humanName: Chest + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: mixamorig:Neck + humanName: Neck + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: mixamorig:Head + humanName: Head + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: mixamorig:LeftShoulder + humanName: LeftShoulder + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: mixamorig:RightShoulder + humanName: RightShoulder + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: mixamorig:LeftArm + humanName: LeftUpperArm + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: mixamorig:RightArm + humanName: RightUpperArm + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: mixamorig:LeftForeArm + humanName: LeftLowerArm + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: mixamorig:RightForeArm + humanName: RightLowerArm + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: mixamorig:LeftHand + humanName: LeftHand + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: mixamorig:RightHand + humanName: RightHand + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: mixamorig:LeftToeBase + humanName: LeftToes + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: mixamorig:RightToeBase + humanName: RightToes + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: mixamorig:Spine2 + humanName: UpperChest + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + skeleton: + - name: "\u8352\u91CE\u730E\u624B(Clone)" + parentName: + position: {x: 0, y: 0, z: 0} + rotation: {x: 0, y: 0, z: 0, w: 1} + scale: {x: 1, y: 1, z: 1} + - name: node_0 + parentName: "\u8352\u91CE\u730E\u624B(Clone)" + position: {x: -0, y: 0, z: 0} + rotation: {x: 0, y: -0, z: -0, w: 1} + scale: {x: 1, y: 1, z: 1} + - name: mixamorig:Hips + parentName: "\u8352\u91CE\u730E\u624B(Clone)" + position: {x: 7.2759576e-10, y: 0.96161616, z: -0.017580768} + rotation: {x: -0, y: -0, z: 4.0927256e-10, w: 1} + scale: {x: 0.99999994, y: 1, z: 1} + - name: mixamorig:LeftUpLeg + parentName: mixamorig:Hips + position: {x: -0.122900926, y: -0.064272955, z: 0.019370982} + rotation: {x: 0.00049928314, y: -0.031455517, z: 0.99937916, w: 0.015862847} + scale: {x: 1.0000004, y: 1.0000004, z: 1} + - name: mixamorig:LeftLeg + parentName: mixamorig:LeftUpLeg + position: {x: 2.775558e-17, y: 0.42458522, z: 0} + rotation: {x: -0.070675656, y: 0.001526951, z: -0.021546036, w: 0.9972655} + scale: {x: 1.0000006, y: 1.0000005, z: 1.0000001} + - name: mixamorig:LeftFoot + parentName: mixamorig:LeftLeg + position: {x: 2.775558e-17, y: 0.36031312, z: 3.4694474e-18} + rotation: {x: 0.5864733, y: 0.058979593, z: -0.042879384, w: 0.8066796} + scale: {x: 1, y: 1, z: 0.9999998} + - name: mixamorig:LeftToeBase + parentName: mixamorig:LeftFoot + position: {x: -0, y: 0.19909826, z: 2.775558e-17} + rotation: {x: 0.23450264, y: 0.030121133, z: -0.007269758, w: 0.9716215} + scale: {x: 1.0000004, y: 1.0000002, z: 1.0000001} + - name: mixamorig:LeftToe_End + parentName: mixamorig:LeftToeBase + position: {x: 2.775558e-17, y: 0.07518335, z: 8.673618e-19} + rotation: {x: 0, y: -0, z: -0, w: 1} + scale: {x: 1, y: 1, z: 1} + - name: mixamorig:Spine + parentName: mixamorig:Hips + position: {x: -0, y: 0.11601777, z: -0.008428418} + rotation: {x: -0.03625217, y: 0.000000005805401, z: 5.291295e-10, w: 0.9993427} + scale: {x: 1, y: 1, z: 0.99999994} + - name: mixamorig:Spine1 + parentName: mixamorig:Spine + position: {x: -0, y: 0.13571076, z: 0} + rotation: {x: -0.000000029802322, y: -0.0000000029290932, z: 1.5196491e-10, + w: 1} + scale: {x: 0.99999994, y: 0.99999994, z: 1} + - name: mixamorig:Spine2 + parentName: mixamorig:Spine1 + position: {x: -0, y: 0.15509796, z: 0} + rotation: {x: -0, y: -0.000000005462792, z: -0.0000000051386957, w: 1} + scale: {x: 1.0000001, y: 1.0000001, z: 1.0000001} + - name: mixamorig:Neck + parentName: mixamorig:Spine2 + position: {x: -0, y: 0.17448525, z: 0.000000012214195} + rotation: {x: 0.0362522, y: 4.9456883e-11, z: -0.0000000013633452, w: 0.9993427} + scale: {x: 0.99999994, y: 1.0000001, z: 0.99999994} + - name: mixamorig:Head + parentName: mixamorig:Neck + position: {x: -0, y: 0.14759588, z: 0.017679807} + rotation: {x: 0.0000000037252903, y: 0.000000002910383, z: 0.0000000010913939, + w: 1} + scale: {x: 0.99999994, y: 0.9999999, z: 1.0000001} + - name: mixamorig:HeadTop_End + parentName: mixamorig:Head + position: {x: -0, y: 0.23794629, z: 0.028502438} + rotation: {x: 0, y: -0, z: -0, w: 1} + scale: {x: 1, y: 1, z: 1} + - name: mixamorig:LeftShoulder + parentName: mixamorig:Spine2 + position: {x: -0.05832574, y: 0.1505866, z: -0.0022551804} + rotation: {x: 0.55615306, y: -0.4300368, z: 0.5748818, w: 0.41865632} + scale: {x: 1.0000004, y: 1.0000006, z: 1.0000006} + - name: mixamorig:LeftArm + parentName: mixamorig:LeftShoulder + position: {x: -0, y: 0.12277112, z: 0} + rotation: {x: -0.12750787, y: -0.052892506, z: -0.006906688, w: 0.9904022} + scale: {x: 1, y: 1.0000002, z: 1.0000002} + - name: mixamorig:LeftForeArm + parentName: mixamorig:LeftArm + position: {x: -1.0408341e-17, y: 0.32773098, z: 0} + rotation: {x: -0.0111816665, y: -0.027591016, z: -0.03239311, w: 0.9990318} + scale: {x: 0.9999997, y: 0.9999998, z: 0.9999998} + - name: mixamorig:LeftHand + parentName: mixamorig:LeftForeArm + position: {x: -5.551116e-17, y: 0.3340844, z: 1.1102232e-16} + rotation: {x: -0, y: -0, z: -1.1641532e-10, w: 1} + scale: {x: 1, y: 1, z: 1.0000001} + - name: mixamorig:RightShoulder + parentName: mixamorig:Spine2 + position: {x: 0.05832574, y: 0.15051161, z: -0.0012226059} + rotation: {x: -0.56145275, y: -0.42600432, z: 0.5702429, w: -0.4220358} + scale: {x: 1.0000002, y: 1.0000002, z: 1.0000001} + - name: mixamorig:RightArm + parentName: mixamorig:RightShoulder + position: {x: -0, y: 0.12277112, z: 2.2204463e-16} + rotation: {x: 0.12768778, y: -0.06803748, z: 0.0033242106, w: -0.9894725} + scale: {x: 0.99999976, y: 1.0000001, z: 0.9999998} + - name: mixamorig:RightForeArm + parentName: mixamorig:RightArm + position: {x: -0, y: 0.32781148, z: 0} + rotation: {x: -0.0118109435, y: 0.011750162, z: 0.031905137, w: 0.9993521} + scale: {x: 1.0000002, y: 1.000001, z: 1.0000005} + - name: mixamorig:RightHand + parentName: mixamorig:RightForeArm + position: {x: -0, y: 0.335302, z: -1.1102232e-16} + rotation: {x: -2.3283064e-10, y: -0, z: -0.000000030053343, w: 1} + scale: {x: 0.99999994, y: 0.9999997, z: 1} + - name: mixamorig:RightUpLeg + parentName: mixamorig:Hips + position: {x: 0.122900926, y: -0.064272955, z: 0.017555349} + rotation: {x: -0.000482568, y: -0.030399304, z: 0.9994118, w: -0.015865445} + scale: {x: 1.0000002, y: 1.0000002, z: 0.99999994} + - name: mixamorig:RightLeg + parentName: mixamorig:RightUpLeg + position: {x: -0, y: 0.4245297, z: 1.387779e-17} + rotation: {x: -0.07598258, y: -0.0016407911, z: 0.02152683, w: 0.9968754} + scale: {x: 1.0000002, y: 1.0000004, z: 1.0000001} + - name: mixamorig:RightFoot + parentName: mixamorig:RightLeg + position: {x: 2.775558e-17, y: 0.36096406, z: 1.7347236e-17} + rotation: {x: 0.5934667, y: -0.057367228, z: 0.04246735, w: 0.8016874} + scale: {x: 1.0000002, y: 1.0000004, z: 1.0000002} + - name: mixamorig:RightToeBase + parentName: mixamorig:RightFoot + position: {x: -0, y: 0.20220801, z: 0} + rotation: {x: 0.23086213, y: -0.02866849, z: 0.0068053757, w: 0.9725402} + scale: {x: 1.0000004, y: 1.0000002, z: 1} + - name: mixamorig:RightToe_End + parentName: mixamorig:RightToeBase + position: {x: 2.775558e-17, y: 0.077429935, z: 8.673618e-19} + rotation: {x: 0, y: -0, z: -0, w: 1} + scale: {x: 1, y: 1, z: 1} + namedPoseList: + - name: Default + skeleton: [] + armTwist: 0.5 + foreArmTwist: 0.5 + upperLegTwist: 0.5 + legTwist: 0.5 + armStretch: 0.05 + legStretch: 0.05 + feetSpacing: 0 + globalScale: 200 + rootMotionBoneName: + defaultPoseIndex: -1 + hasTranslationDoF: 0 + hasExtraRoot: 1 + skeletonHasParents: 1 + lastHumanDescriptionAvatarSource: {instanceID: 0} + autoGenerateAvatarMappingIfUnspecified: 1 + animationType: 3 + humanoidOversampling: 1 + avatarSetup: 1 + addHumanoidExtraRootOnlyWhenUsingAvatar: 1 + importBlendShapeDeformPercent: 1 + remapMaterialsIfMaterialImportModeIsNone: 0 + additionalBone: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Model/第二章/荒野猎手/荒野猎手.mat b/Assets/Model/第二章/荒野猎手/荒野猎手.mat new file mode 100644 index 0000000..a96de88 --- /dev/null +++ b/Assets/Model/第二章/荒野猎手/荒野猎手.mat @@ -0,0 +1,83 @@ +%YAML 1.1 +%TAG !u! tag:yousandi.cn,2023: +--- !u!21 &2100000 +Material: + serializedVersion: 8 + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_Name: "\u8352\u91CE\u730E\u624B" + m_Shader: {fileID: 46, guid: 0000000000000000f000000000000000, type: 0} + m_Parent: {fileID: 0} + m_ModifiedSerializedProperties: 0 + m_ValidKeywords: [] + m_InvalidKeywords: [] + m_LightmapFlags: 4 + m_EnableInstancingVariants: 0 + m_DoubleSidedGI: 0 + m_CustomRenderQueue: -1 + stringTagMap: {} + disabledShaderPasses: [] + m_LockedProperties: + m_SavedProperties: + serializedVersion: 3 + m_TexEnvs: + - _BumpMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailAlbedoMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailMask: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailNormalMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _EmissionMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _MainTex: + m_Texture: {fileID: 2800000, guid: 0ccff60d18b826248b2fc07e18698733, type: 3} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _MetallicGlossMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _OcclusionMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _ParallaxMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + m_Ints: [] + m_Floats: + - _BumpScale: 1 + - _Cutoff: 0.5 + - _DetailNormalMapScale: 1 + - _DstBlend: 0 + - _GlossMapScale: 1 + - _Glossiness: 0.5 + - _GlossyReflections: 1 + - _Metallic: 0 + - _Mode: 0 + - _OcclusionStrength: 1 + - _Parallax: 0.02 + - _SmoothnessTextureChannel: 0 + - _SpecularHighlights: 1 + - _SrcBlend: 1 + - _UVSec: 0 + - _ZWrite: 1 + m_Colors: + - _Color: {r: 1, g: 1, b: 1, a: 1} + - _EmissionColor: {r: 0, g: 0, b: 0, a: 1} + m_BuildTextureStacks: [] diff --git a/Assets/Model/第二章/荒野猎手/荒野猎手.mat.meta b/Assets/Model/第二章/荒野猎手/荒野猎手.mat.meta new file mode 100644 index 0000000..19e456a --- /dev/null +++ b/Assets/Model/第二章/荒野猎手/荒野猎手.mat.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: XS4X5CKoW3k5QpCbmsLG2CCO1Np0NB761jJpBp8xLi1wzBSNDf7IFXg= +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 2100000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Model/第二章/荒野猎手/荒野猎手.png b/Assets/Model/第二章/荒野猎手/荒野猎手.png new file mode 100644 index 0000000..6c49ac1 Binary files /dev/null and b/Assets/Model/第二章/荒野猎手/荒野猎手.png differ diff --git a/Assets/Model/第二章/荒野猎手/荒野猎手.png.meta b/Assets/Model/第二章/荒野猎手/荒野猎手.png.meta new file mode 100644 index 0000000..64bdf6b --- /dev/null +++ b/Assets/Model/第二章/荒野猎手/荒野猎手.png.meta @@ -0,0 +1,177 @@ +fileFormatVersion: 2 +guid: DylM43yrUy//7x6SbZSq1Vql2uiQyUvgZpZV1oQA7DZCQ8veZ/iNRnE= +TextureImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 14 + mipmaps: + mipMapMode: 0 + enableMipMap: 1 + sRGBTexture: 1 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + flipGreenChannel: 0 + isReadable: 0 + webStreaming: 0 + priorityLevel: 0 + uploadedMode: 2 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + vTOnly: 0 + ignoreMipmapLimit: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: 1 + aniso: 1 + mipBias: 0 + wrapU: 0 + wrapV: 0 + wrapW: 0 + nPOTScale: 1 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 0 + spriteTessellationDetail: -1 + textureType: 0 + textureShape: 1 + singleChannelComponent: 0 + flipbookRows: 1 + flipbookColumns: 1 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + ignorePngGamma: 0 + applyGammaDecoding: 0 + swizzle: 50462976 + cookieLightType: 0 + platformSettings: + - serializedVersion: 3 + buildTarget: DefaultTexturePlatform + maxTextureSize: 512 + maxPlaceholderSize: 32 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Standalone + maxTextureSize: 2048 + maxPlaceholderSize: 32 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Server + maxTextureSize: 2048 + maxPlaceholderSize: 32 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: WebGL + maxTextureSize: 2048 + maxPlaceholderSize: 32 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: WeixinMiniGame + maxTextureSize: 2048 + maxPlaceholderSize: 32 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: PlayableAds + maxTextureSize: 2048 + maxPlaceholderSize: 32 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + nameFileIdTable: {} + mipmapLimitGroupName: + pSDRemoveMatte: 0 + doOverrideTextureManagerOperations: 0 + platformOperationGroupSettings: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Prefabs/第一章/弓箭手.prefab b/Assets/Prefabs/第一章/弓箭手.prefab index 50da685..8020a64 100644 --- a/Assets/Prefabs/第一章/弓箭手.prefab +++ b/Assets/Prefabs/第一章/弓箭手.prefab @@ -197,6 +197,10 @@ PrefabInstance: type: 3} insertIndex: -1 addedObject: {fileID: 7813477268924349148} + - targetCorrespondingSourceObject: {fileID: 919132149155446097, guid: 7b0dd5b38a9cd144ea135f3743440958, + type: 3} + insertIndex: -1 + addedObject: {fileID: 2129591520245958642} m_SourcePrefab: {fileID: 100100000, guid: 7b0dd5b38a9cd144ea135f3743440958, type: 3} --- !u!4 &2222026796505693691 stripped Transform: @@ -334,6 +338,7 @@ MonoBehaviour: indicatorHeight: 0.35 stunIndicatorPrefab: {fileID: 2432573200162841629, guid: de288ea16be0c1544a4c6eb71e899570, type: 3} + isStunImmune: 0 --- !u!114 &233433209084818606 MonoBehaviour: m_ObjectHideFlags: 0 @@ -387,6 +392,21 @@ MonoBehaviour: m_Name: m_EditorClassIdentifier: teamId: 0 +--- !u!114 &2129591520245958642 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5200308054099318121} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: a69b69bf0c7d044a5894f376f83f0c53, type: 3} + m_Name: + m_EditorClassIdentifier: + baseArrowCount: 3 + arrowInterval: 0.12 + baseProjectileSpeed: 22 --- !u!1001 &6707986314085581781 PrefabInstance: m_ObjectHideFlags: 0 diff --git a/Assets/Scenes/CharacterTest.scene b/Assets/Scenes/CharacterTest.scene index f435dcc..5b0624f 100644 Binary files a/Assets/Scenes/CharacterTest.scene and b/Assets/Scenes/CharacterTest.scene differ diff --git a/Assets/Scripts/技能脚本/ArcherSkill.cs b/Assets/Scripts/技能脚本/ArcherSkill.cs index f8379b6..b37376e 100644 --- a/Assets/Scripts/技能脚本/ArcherSkill.cs +++ b/Assets/Scripts/技能脚本/ArcherSkill.cs @@ -1,49 +1,180 @@ using System.Collections; +using System.Collections.Generic; using UnityEngine; +/// +/// 弓箭手技能:迅捷三连 / 弱点锁定体系(1/3/6/10 级完整阶梯) +/// 1级【迅捷三连】:搭弓连续高速射出 3 支穿甲箭矢,单体快速倾泻火力 +/// 3级【极速穿甲】:箭矢飞行速度 +35%,三连射总伤害提升 25% +/// 6级【弱点锁定】:伤害逐箭递增且第 3 箭必暴击;命中附加破甲标记,使目标受到的所有伤害 +30%(持续 4s)! +/// 10级【乱射风暴】:三连射升级为 6 支风暴连射;击杀目标后剩余箭矢自动散开弹射给周围其他敌人 +/// public class ArcherSkill : UnitSkill { - [Min(1)] - public int volleyArrowCount = 3; + [Header("三连射配置")] + [Tooltip("基础箭矢数量")] + public int baseArrowCount = 3; - [Min(0f)] - public float volleyArrowDamageMultiplier = 0.7f; + [Tooltip("每支箭发射间隔(秒)")] + public float arrowInterval = 0.12f; - [Min(0f)] - public float volleyArrowInterval = 0.15f; + [Tooltip("技能箭矢基础速度")] + public float baseProjectileSpeed = 22f; - private Coroutine volleyCoroutine; + private Coroutine activeVolleyCoroutine; + + private void EnsureUnit() + { + if (unit == null) + { + unit = GetComponent(); + } + } public override void ReleaseSkill() { - if (volleyCoroutine != null) + EnsureUnit(); + if (unit == null) return; + + WorldHealthBar healthBar = unit.GetComponent(); + if (healthBar == null || healthBar.IsDead) return; + + if (unit.Target == null) return; + + if (activeVolleyCoroutine != null) { - StopCoroutine(volleyCoroutine); + StopCoroutine(activeVolleyCoroutine); } - volleyCoroutine = StartCoroutine(FireVolley()); + activeVolleyCoroutine = StartCoroutine(FireVolleyRoutine()); } - private IEnumerator FireVolley() + private IEnumerator FireVolleyRoutine() { - for (int i = 0; i < volleyArrowCount; i++) + EnsureUnit(); + if (unit == null) yield break; + + int level = unit.level; + + // 10级升级为 6 支箭;其余等级为 3 支 + int arrowCount = level >= 10 ? 6 : baseArrowCount; + + // 3级+ 箭速提升 35% + float projSpeed = level >= 3 ? baseProjectileSpeed * 1.35f : baseProjectileSpeed; + + Debug.Log($"【弓箭手释放技能】 准备倾泻 {arrowCount} 连射(等级: {level})!"); + + for (int i = 0; i < arrowCount; i++) { - // 三连射优先攻击当前目标;目标阵亡后剩余箭矢改打最近敌人。 - GameObject volleyTarget = unit.Target != null ? unit.Target : FindNearestOpponent(); - if (volleyTarget == null) + // 目标死亡后自动切换给最近敌人 + GameObject currentTarget = unit.Target; + if (currentTarget == null || !currentTarget.activeInHierarchy || IsTargetDead(currentTarget)) { - break; + currentTarget = unit.FindNearestEnemyForSkill(); } - unit.FireSkillProjectile(volleyTarget, volleyArrowDamageMultiplier); - yield return new WaitForSeconds(volleyArrowInterval); + if (currentTarget == null) + { + break; // 全场无敌人提前结束 + } + + // 计算该支箭的伤害倍率与暴击 + float damageMultiplier = GetArrowDamageMultiplier(i, arrowCount, level); + bool isGuaranteedCrit = (level >= 6 && i == arrowCount - 1); // 6级+ 最后一箭必定暴击 + bool applyVulnerability = (level >= 6 && i == arrowCount - 1); // 6级+ 最后一箭施加 4 秒 30% 易伤 + + // 发射技能箭矢 + LaunchSkillArrow(currentTarget, damageMultiplier, projSpeed, isGuaranteedCrit, applyVulnerability); + + yield return new WaitForSeconds(arrowInterval); } - volleyCoroutine = null; + activeVolleyCoroutine = null; } - private GameObject FindNearestOpponent() + private float GetArrowDamageMultiplier(int index, int totalCount, int level) { - return unit.FindNearestEnemyForSkill(); + // 1级:基础 70% 伤害/箭 + float baseMult = 0.70f; + + // 3级:三连射总伤害提升 25% (0.70 * 1.25 = 0.875) + if (level >= 3 && level < 6) + { + baseMult *= 1.25f; + } + + // 6级+【弱点锁定】:伤害逐箭递增 + if (level >= 6) + { + // 逐箭递增:例如第 1 箭 0.85,第 2 箭 1.05,最后一箭 1.35 + float step = (float)index / Mathf.Max(1, totalCount - 1); + baseMult = Mathf.Lerp(0.85f, 1.35f, step); + } + + return baseMult; + } + + private void LaunchSkillArrow(GameObject targetObj, float damageMultiplier, float speed, bool forceCrit, bool applyVulnerability) + { + if (unit == null || unit.projectilePrefab == null || targetObj == null) return; + + Transform spawnPoint = unit.projectileSpawnPoint != null ? unit.projectileSpawnPoint : unit.transform; + Vector3 spawnPos = spawnPoint.position; + + Vector3 direction = (targetObj.transform.position + Vector3.up * 0.8f - spawnPos).normalized; + Quaternion rotation = Quaternion.LookRotation(direction); + + GameObject arrowObj = Instantiate(unit.projectilePrefab, spawnPos, rotation); + + float calculatedDamage = unit.attackPower * damageMultiplier; + if (forceCrit || (unit.critRate > 0f && Random.value < unit.critRate)) + { + calculatedDamage *= unit.critMultiplier; + } + + // 接管 Arrow 碰撞,挂载自定义伤害与易伤回调 + var projectile = arrowObj.GetComponent(); + if (projectile != null) + { + // 技能箭不二次积攒能量 + projectile.Initialize(targetObj, calculatedDamage, unit.gameObject, speed, 5f, false); + } + + // 6级+ 易伤监听逻辑:如果本箭命中了,自动给目标挂上 30% 易伤 + if (applyVulnerability) + { + StartCoroutine(ApplyVulnerabilityWhenHit(targetObj, 4.0f, 0.30f)); + } + } + + private IEnumerator ApplyVulnerabilityWhenHit(GameObject targetObj, float duration, float ratio) + { + // 等待箭矢飞至命中(约 0.2 ~ 0.4 秒) + yield return new WaitForSeconds(0.25f); + + if (targetObj != null && targetObj.activeInHierarchy) + { + var status = targetObj.GetComponentInParent(); + if (status != null) + { + status.ApplyVulnerability(duration, ratio); + Debug.Log($"【弱点锁定】生效! 目标 {targetObj.name} 陷入破甲易伤:受击伤害 +{ratio * 100:F0}%,持续 {duration} 秒!"); + } + } + } + + private bool IsTargetDead(GameObject targetObj) + { + if (targetObj == null) return true; + var bar = targetObj.GetComponentInParent(); + return bar != null && bar.IsDead; + } + + private void OnDestroy() + { + if (activeVolleyCoroutine != null) + { + StopCoroutine(activeVolleyCoroutine); + } } } diff --git a/Assets/Scripts/系统脚本/StatusEffectController.cs b/Assets/Scripts/系统脚本/StatusEffectController.cs index 0bc3e82..6e122ae 100644 --- a/Assets/Scripts/系统脚本/StatusEffectController.cs +++ b/Assets/Scripts/系统脚本/StatusEffectController.cs @@ -19,6 +19,23 @@ public class StatusEffectController : MonoBehaviour /// 是否处于眩晕免疫/霸体状态 public bool isStunImmune = false; + [Header("易伤状态")] + private float vulnerabilityRemaining = 0f; + private float vulnerabilityRatio = 0f; + + public bool HasVulnerability => vulnerabilityRemaining > 0f; + public float VulnerabilityRatio => vulnerabilityRemaining > 0f ? vulnerabilityRatio : 0f; + + /// + /// 施加破甲/易伤标记:使目标在持续时间内受到的所有伤害增加指定比例 + /// + public void ApplyVulnerability(float duration, float ratio) + { + if (duration <= 0f || ratio <= 0f) return; + vulnerabilityRemaining = Mathf.Max(vulnerabilityRemaining, duration); + vulnerabilityRatio = Mathf.Max(vulnerabilityRatio, ratio); + } + private void Awake() { animator = GetComponent(); @@ -50,6 +67,16 @@ public class StatusEffectController : MonoBehaviour private void Update() { + if (vulnerabilityRemaining > 0f) + { + vulnerabilityRemaining -= Time.deltaTime; + if (vulnerabilityRemaining <= 0f) + { + vulnerabilityRemaining = 0f; + vulnerabilityRatio = 0f; + } + } + if (!IsStunned) { return; diff --git a/Assets/Scripts/角色脚本/UnitBase.cs b/Assets/Scripts/角色脚本/UnitBase.cs index 2edd502..32e6426 100644 --- a/Assets/Scripts/角色脚本/UnitBase.cs +++ b/Assets/Scripts/角色脚本/UnitBase.cs @@ -492,6 +492,12 @@ public class UnitBase : MonoBehaviour damage *= (1f - cappedReduction); } + // 破甲/易伤标记结算 + if (statusEffectController != null && statusEffectController.HasVulnerability) + { + damage *= (1f + statusEffectController.VulnerabilityRatio); + } + healthBar.TakeDamage(ModifyIncomingDamage(damage, attacker), attacker); return true; } diff --git a/CODELY.md b/CODELY.md index 55a5c39..e99323e 100644 --- a/CODELY.md +++ b/CODELY.md @@ -157,6 +157,7 @@ - [2026-10-11 23:40:59] 2026-10-11 人类士兵技能实装完毕:HumanSoldierSkill.cs 接入 1/3/6/10 级阶梯体系。1级150%伤害配合SwordSlashThickWhite剑气、3级190%伤害且技能暴击率+20%、6级OnSkillHit1命中直接施加1.2秒断岳重击眩晕(ApplyStun+StunStars)、10级生命值首次跌破35%触发不屈战魂(AuraSoftBlue光环平铺地面,攻速+60%且普攻30%吸血持续6s)。已完成全流程PlayMode测试。Quad光环类地面特效实例化必须继承其Prefab自身X轴-90度(270度)旋转以保持平铺贴地。 - [2026-10-12 17:01:19] 2026-10-12 法师重构为阶梯技能体系 (CastleMageSkill.cs),包含 FireballSharpMissileFire 飞弹、MagicExplosionFire 爆破及 FireFieldRed 地面持续灼烧火海特效。 - [2026-10-12 22:31:36] 2026-10-12 精锐士兵刺客重构完毕:EliteSoldierSkill.cs 实现1级直接飞天斩后排(跃起劈砍.fbx第0帧立刻起跳、0.95s第30帧精准落地扑向敌方最远后排重劈200%);3级250%伤害且落地+35%移速;6级影袭破防眩晕1.2s;10级击杀目标后0.25s立即再次腾空连斩下一个后排(最多3连斩)。飞跃期间必须关闭 animator.applyRootMotion = false 与 navAgent.enabled = false,彻底消除动画根运动与抛物线位移打架造成的连斩异常漂移。 +- [2026-10-13 15:47:12] 2026-10-12 第二章原弓箭猎人重构为荒野猎手(投矛手):远程投掷重矛,核心技能锁定大范围内距离最远的目标超远狙杀(越远伤害越高),6级升级为直线贯穿+最远目标击退2米(移除眩晕),10级击杀返还50%能量与范围爆裂。文档已同步更新。 ### Reference - [2026-09-09 12:23:17] 飞行物脚本 Projectile.cs 负责锁敌追踪、碰撞检测和伤害结算。箭矢预制体 ArrowProjectile_White.prefab 已配置 Projectile 组件和 CapsuleCollider(Is Trigger)。远程单位需在攻击动画松弦帧添加 OnAttackEffect Event,并在 UnitBase 中设置 attackType=RangedProjectile、projectilePrefab、projectileSpawnPoint。 diff --git a/召唤之战-角色与技能说明.md b/召唤之战-角色与技能说明.md index 45296ae..7f2665d 100644 --- a/召唤之战-角色与技能说明.md +++ b/召唤之战-角色与技能说明.md @@ -73,7 +73,7 @@ | 盾卫 | 正常人形 | 高生命前排、减伤保护 | 已有 Prefab | | 城堡法师 | 正常人形 | 远程范围输出 | 已有 Prefab | | 精锐士兵 | 正常人形 | 高生命近战、精英输出 | 已有 Prefab | -| 弓箭猎人 | 正常人形 | 远程穿透输出 | 已有 Prefab | +| 荒野猎手 | 正常人形 | 远程重矛、后排狙杀 | 待更新模型(原弓箭猎人) | | 狼人 | 人形兽类 | 快速近战、持续输出 | 已有 Prefab | | 石巨人 | 大体型构造体 | 重型前排、范围控制 | 已有 Prefab | @@ -138,7 +138,7 @@ CharacterData 基础属性 ### 第二章英雄 - 狂暴狼人:快速近战,依靠攻速和持续输出压制敌人。 -- 弓箭猎人:远程穿透,适合直线压制多个目标。 +- 荒野猎手:远程重矛,锁定大范围内最远距离的敌方目标,后排狙杀与直线击退贯穿(原弓箭猎人)。 - 石巨人:高生命重型前排,拥有范围控制能力。 - 荒野祭司:辅助治疗和范围支援,后续制作。 - 荒野之王:大型精英前排,作为章节 Boss 或高阶英雄,后续制作。 @@ -156,7 +156,7 @@ CharacterData 基础属性 ### 第二章技能方向 - 狼嚎:短时间提升近战攻击速度。 -- 穿透箭:攻击穿透直线上的多个敌人。 +- 穿心猎矛:超远距离狙杀最远敌人,距离越远伤害越高。 - 地裂:范围伤害并造成短暂控制。 - 治疗波:治疗范围内友军。 - 冲击波:直线伤害并减速。 @@ -324,7 +324,7 @@ UnitBase |---|---|---|---|---| | **盾卫**
*(铁壁前排/嘲讽反伤)* | **圣盾壁垒**:举盾生成自身 **35% 最大生命值的护盾**,持续 5 秒(亮天蓝顶层护盾条,挂 `MagicShieldBlue`) | 护盾厚度提升至 **50% 最大生命值**,持续时间延长至 6 秒 | **战吼嘲讽**:举盾瞬间拍地激发声波(`ShockwaveRing`),**强制周围 4 米所有敌人攻击自己 3 秒**,完美保护身后输出! | **圣盾清算**:护盾期间免疫眩晕;**当护盾被击破或结束瞬间发生神圣冲击**(`NovaLightningBlue`),将吸收伤害的 **50% 转化为范围真实伤害反弹全场**! | | **人类士兵**
*(坚韧重战/背水一战)* | **蓄力重斩**:挥舞短剑蓄力重劈,对前方单体敌人造成 **150% 物理伤害**(带短白剑气 `SwordSlashThickWhite`) | 重斩暴击率 +20%,基础伤害提升至 **190%** | **断岳重击**:重斩附带强力震慑,命中直接使目标**眩晕 1.2 秒**(挂 `StunStars` 星星),精准打断敌人蓄力! | **不屈战魂**:生命值首次跌破 35% 时进入无畏状态(脚底光环 `AuraSoftBlue`),**攻速 +60% 且普攻附带 30% 吸血**,持续 6 秒绝地翻盘! | -| **弓箭手**
*(狙击点杀/后排压制)* | **迅捷三连**:搭弓连续高速射出 **3 支穿甲箭矢**,单体快速倾泻火力 | 箭矢飞行速度 +35%,三连射总伤害提升 **25%** | **追踪引信**:箭矢获得弧线微调追踪轨迹;且第 3 支箭命中时附带破甲标记,使目标**受到的所有伤害 +30%(持续 4s)** | **乱射风暴**:三连射升级为 **6 支风暴连射**;击杀目标后剩余箭矢自动散开弹射给周围其他敌人,兼顾单体点杀与残血收割! | +| **弓箭手**
*(狙击点杀/后排压制)* | **迅捷三连**:搭弓连续高速射出 **3 支穿甲箭矢**,单体快速倾泻火力 | 箭矢飞行速度 +35%,三连射总伤害提升 **25%** | **弱点锁定**:三连射精准打击目标同一弱点,**伤害逐箭递增且第 3 箭必定暴击**;命中附加破甲标记,使目标**受到的所有伤害 +30%(持续 4s)**! | **乱射风暴**:三连射升级为 **6 支风暴连射**;击杀目标后剩余箭矢自动散开弹射给周围其他敌人,兼顾单体点杀与残血收割! | | **城堡法师**
*(轰炸火法/阵地火海)* | **爆裂火球**:吟唱发射一颗烈焰飞弹(`FireballSharpMissileFire`),命中造成 **160% 范围伤害**(`MagicExplosionFire`) | 火球爆破半径扩大 30%,爆破中心伤害提升至 **200%** | **焦土火海**:火球爆炸处在地面留下一片燃烧焦土,对踏入火海的敌人**每秒造成 30% 攻击力的持续引燃**(持续 4 秒) | **双重轰炸**:释放技能瞬间**连续轰出 2 颗烈焰巨球**!第二颗轰炸在更深处的后排敌群,双重火海前后封锁战场! | | **精锐士兵**
*(刺客/飞天切后排)* | **裂空突袭**:核心招牌直接解锁!双手持大剑高高跃起飞扑敌方后排最深处敌人,落地重劈造成 **200% 物理暴击伤害**(带剑浪 `SwordWaveWhite`)!直接绕开前排肉盾直取后排! | **弱点锁定**:突袭伤害提升至 **250%**,暴击率额外 **+25%**,落地后 3 秒内自身移速 +35% 方便就地追杀残血! | **影袭破防**:飞天重劈落地附带强力震慑,使目标**眩晕 1.2 秒**(挂 `StunStars`)且受到物理伤害增加 35%(持续 4s)! | **死斗连环**:飞天斩若击杀目标,**立即刷新技能充能**并自动再次腾空扑向下一个后排目标!最多连续连斩 3 次,后排杀手! | @@ -332,7 +332,7 @@ UnitBase | 英雄 | 1级 (基础解锁) | 3级 (数值强化) | 6级 (机制质变 · 核心好玩点) | 10级 (终极质变大招 · 攻防高光) | |---|---|---|---|---| -| **弓箭猎人**
*(直线贯穿/控场减速)* | **穿透重矢**:蓄力射出一支贯穿重箭,**沿直线穿透所有路径上的敌人**造成 140% 伤害 | 重箭伤害提升至 **180%**,穿透路径不再衰减任何伤害 | **冰霜霜冻**:重箭附带极寒冰霜,被穿透的所有敌人**移速降低 55%(持续 3.5 秒)**,给后排输出争取充足时间! | **阻截雷爆**:重箭贯穿首个敌人瞬间触发爆震,造成 **1.5 秒硬性眩晕**(挂 `StunStars`);随后在飞行终点引爆分裂箭轰击后排! | +| **荒野猎手**
*(远程重矛/后排狙杀)* | **穿心猎矛**:锁定大范围内**距离自身最远的敌方目标**,蓄力掷出重型猎矛造成 **180% 物理伤害**;且**距离越远伤害越高**(每相距 1 米额外提升 4% 伤害,最高 +36%)! | 飞矛飞行速度 +40%,基础伤害提升至 **220%**,暴击率额外 **+20%** | **定身震荡**:重矛沿途穿透直线上的所有杂兵(造成 70% 贯穿伤害);命中最终的最远目标时,**将其向后强力击退 2.0 米**(纯击退拉扯,无眩晕冗余),打乱后排阵型! | **绝命狩猎**:飞矛附带风暴贯击,基础伤害提升至 **320% 毁灭打击**;**若成功击杀目标,立即返还 50% 技能能量**,并在倒下位置引发骨片爆裂,对周围 2 米造成 100% 范围物理伤害! | | **狂暴狼人**
*(极速刺客/嗜血续航)* | **野性狼嚎**:仰天长嚎激活狼性血脉,自身**攻速飙升 +45%(持续 4 秒)** | 攻速提升幅度增加至 **60%**,狼嚎持续时间延长至 5.5 秒 | **残虐撕裂**:狼嚎期间利爪撕裂伤口,**每次普攻恢复造成伤害 25% 的生命值**,并在敌人身上留下每秒 20% 的流血! | **血性狂欢**:狼嚎期间只要击杀敌人,**立即刷新重置 4 秒狼嚎持续时间**并额外获得 20% 移速与攻击力,在敌群中连续疯狂撕扯! | | **石巨人**
*(重装控制/护盾控场)* | **大地震击**:双拳重拍地面激发环形震荡波(`ShockwaveRing`),对周围 3.5 米造成伤害并**眩晕 1.5 秒**(`StunStars`) | 眩晕时间延长至 **2.0 秒**,震荡波伤害与范围 +25% | **坚石护体**:重拍地面击碎岩石吸附自身,拍地瞬间**获得相当于 30% 最大生命值的坚固护盾**(挂 `MagicShieldBlue`) | **天崩地裂**:拍击激起全场强震,震晕周围敌人后在地面留下震裂泥沼,**使周围所有敌人移速降低 60% 持续 4 秒**,且自身受到伤害降低 30%! | | **蓝色怪物**
*(控场反制/元素护盾)* | **寒霜扑击**:蓄力飞扑目标,造成 140% 单体伤害并使目标**攻击速度降低 35%(持续 3 秒)** | 飞扑伤害提升至 **180%**,攻速降低效果提升至 45% | **霜甲反伤**:扑击后生成持续 5 秒的极寒霜甲(自身最大血量 25% 护盾),**任何近战攻击蓝色怪物的敌人都将被减速 40%**! | **极寒爆裂**:扑击命中目标后引发暴风雪炸裂,对周围 3 米范围内所有敌人施加 **1.5 秒冰冻眩晕**(挂 `StunStars`),强力打散敌方攻势! |