diff options
author | chai <215380520@qq.com> | 2024-05-23 10:08:29 +0800 |
---|---|---|
committer | chai <215380520@qq.com> | 2024-05-23 10:08:29 +0800 |
commit | 8722a9920c1f6119bf6e769cba270e63097f8e25 (patch) | |
tree | 2eaf9865de7fb1404546de4a4296553d8f68cc3b /Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/ExampleScenes/Scenes/OldExamples/Example18_RTS/RTSWeaponSimpleRanged.cs | |
parent | 3ba4020b69e5971bb0df7ee08b31d10ea4d01937 (diff) |
+ astar project
Diffstat (limited to 'Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/ExampleScenes/Scenes/OldExamples/Example18_RTS/RTSWeaponSimpleRanged.cs')
-rw-r--r-- | Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/ExampleScenes/Scenes/OldExamples/Example18_RTS/RTSWeaponSimpleRanged.cs | 43 |
1 files changed, 43 insertions, 0 deletions
diff --git a/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/ExampleScenes/Scenes/OldExamples/Example18_RTS/RTSWeaponSimpleRanged.cs b/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/ExampleScenes/Scenes/OldExamples/Example18_RTS/RTSWeaponSimpleRanged.cs new file mode 100644 index 0000000..dd84266 --- /dev/null +++ b/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/ExampleScenes/Scenes/OldExamples/Example18_RTS/RTSWeaponSimpleRanged.cs @@ -0,0 +1,43 @@ +using UnityEngine; +using System.Collections; + +namespace Pathfinding.Examples.RTS { + [HelpURL("https://arongranberg.com/astar/documentation/stable/rtsweaponsimpleranged.html")] + public class RTSWeaponSimpleRanged : RTSWeapon { + public GameObject sourceEffect; + public GameObject targetEffect; + + public Transform sourceEffectRoot; + + public float rotationSpeed; + public Transform rotationRootY; + + public float damage; + public AudioClip[] sfx; + public float volume = 1f; + + public override bool Aim (RTSUnit target) { + bool rotationDone = true; + + if (rotationRootY != null) { + var dir = target.transform.position - rotationRootY.position; + dir.y = 0; + + var targetRot = Quaternion.LookRotation(dir); + rotationRootY.rotation = Quaternion.RotateTowards(rotationRootY.rotation, targetRot, rotationSpeed * Time.deltaTime); + + rotationDone = Quaternion.Angle(targetRot, rotationRootY.rotation) < rotationSpeed * 0.1f; + } + return base.Aim(target) && rotationDone; + } + + public override void Attack (RTSUnit target) { + base.Attack(target); + if (sfx.Length > 0) AudioSource.PlayClipAtPoint(sfx[Random.Range(0, sfx.Length)], transform.position, volume); + if (sourceEffect != null) GameObject.Instantiate(sourceEffect, sourceEffectRoot != null ? sourceEffectRoot.position : transform.position, sourceEffectRoot != null ? sourceEffectRoot.rotation : Quaternion.LookRotation(target.transform.position - transform.position, Vector3.up)); + if (targetEffect != null) GameObject.Instantiate(targetEffect, target.transform.position, Quaternion.LookRotation(transform.position - target.transform.position, Vector3.up)); + + target.ApplyDamage(damage); + } + } +} |