Wayback Machinekoobas.hobune.stream
May JUN Jul
Previous capture 13 Next capture
2021 2022 2023
1 capture
13 Jun 22 - 13 Jun 22
sparklines
Close Help
  • Products
  • Solutions
  • Made with Unity
  • Learning
  • Support & Services
  • Community
  • Asset Store
  • Get Unity

UNITY ACCOUNT

You need a Unity Account to shop in the Online and Asset Stores, participate in the Unity Community and manage your license portfolio. Login Create account
  • Blog
  • Forums
  • Answers
  • Evangelists
  • User Groups
  • Beta Program
  • Advisory Panel

Navigation

  • Home
  • Products
  • Solutions
  • Made with Unity
  • Learning
  • Support & Services
  • Community
    • Blog
    • Forums
    • Answers
    • Evangelists
    • User Groups
    • Beta Program
    • Advisory Panel

Unity account

You need a Unity Account to shop in the Online and Asset Stores, participate in the Unity Community and manage your license portfolio. Login Create account

Language

  • Chinese
  • Spanish
  • Japanese
  • Korean
  • Portuguese
  • Ask a question
  • Spaces
    • Default
    • Help Room
    • META
    • Moderators
    • Topics
    • Questions
    • Users
    • Badges
  • Home /
avatar image
0
Question by Peterwerd · Feb 19, 2015 at 02:04 PM · arrayenemydamagemanager

Attack selected Enemy Turn Based Combat

Hey everyone, I have my battlescene and my turn cycle setup. Now in the playerschoice I want to select one of the enemies. I have an Array of the enemies and select my enemy and execute one of my attacking abilities. Each ability has a Script that has the damage amount of the attack in it. Every enemy has a health Script on it. Now I m stuck in how to manage the whole take damage thing on the selected enemy. I first thought I could call a function Inside the enemy health script depending on which attack I did but this seems not so good because every ability would have to be set inside the enemy health script makeing it very unflexible. Any pointers towards how to manage this situation best a very welcome. Thanks.

Comment
Add comment
10 |3000 characters needed characters left characters exceeded
▼
  • Viewable by all users
  • Viewable by moderators
  • Viewable by moderators and the original poster
  • Advanced visibility
Viewable by all users

2 Replies

· Add your reply
  • Sort: 
avatar image
1

Answer by Hollow Mockery · Feb 19, 2015 at 03:35 PM

Set up parameters in your damage function.

like this for example:

     public float CurrentHealth;
     public float DamageThreshold;
     public float DamageResistance;
 
 public void takeDamage(float Damage, float AP){
 
       CurrentHealth -= (Damage - Mathf.Max(DamageThreshold - AP,0)) * (1-DamageResistance);
 
 }


so when you want to apply damage you'd have script on your projectile for example that would find the takeDamage function in the Health script on the target.

 public float Damage;
 public float AP;
 
 /* With a raycast hit for example */
 
 health = hit.transform.gameObject.GetComponent<Health>();
 if(health != null){health.takeDamage(Damage, AP);}

I'm using armor penetration and damage resistance, but you could take those out or add in other types of resistance, damage or effects.

Comment
Add comment · Share
10 |3000 characters needed characters left characters exceeded
▼
  • Viewable by all users
  • Viewable by moderators
  • Viewable by moderators and the original poster
  • Advanced visibility
Viewable by all users
avatar image
0

Answer by DRRosen3 · Feb 19, 2015 at 02:38 PM

You don't have to have every ability in the enemy script. Put this in the enemy script.

 public void AdjustHealth(int amount)
 {
    health += amount;
 }

Now you need some sort of mediator between player and enemies. I've done something similar in a project of mine called a "TurnBasedCombatStateMachine".

A great tutorial series on this can be found here: Make A RPG Series. In it he teaches you how to make a turn-based combat state machine, a damage calculation script, and various other things. However, the two I mentioned are most important because you use the state machine to determine whose turn it is to attack and to calculate the damage. Once the damage is calculated, you'd call the function above. Something such as...

 if(player_damage != null)
 {
    enemy.AdjustHealth(-damage);
 }


Comment
Add comment · Share
10 |3000 characters needed characters left characters exceeded
▼
  • Viewable by all users
  • Viewable by moderators
  • Viewable by moderators and the original poster
  • Advanced visibility
Viewable by all users

Your answer

Hint: You can notify a user about this post by typing @username

Up to 2 attachments (including images) can be used with a maximum of 524.3 kB each and 1.0 MB total.

Follow this Question

Answers Answers and Comments

4 People are following this question.

avatar image avatar image avatar image avatar image

Related Questions

Can't manage to damage enemies... 1 Answer

Object Not Recieving Damage 3 Answers

Staged bullet damage? 1 Answer

Health below zero but shows negative numbers 1 Answer

checking how many objects with the same tag are on screen 2 Answers


Enterprise
Social Q&A

Social
Subscribe on YouTube social-youtube Follow on LinkedIn social-linkedin Follow on Twitter social-twitter Follow on Facebook social-facebook Follow on Instagram social-instagram

Footer

  • Purchase
    • Products
    • Subscription
    • Asset Store
    • Unity Gear
    • Resellers
  • Education
    • Students
    • Educators
    • Certification
    • Learn
    • Center of Excellence
  • Download
    • Unity
    • Beta Program
  • Unity Labs
    • Labs
    • Publications
  • Resources
    • Learn platform
    • Community
    • Documentation
    • Unity QA
    • FAQ
    • Services Status
    • Connect
  • About Unity
    • About Us
    • Blog
    • Events
    • Careers
    • Contact
    • Press
    • Partners
    • Affiliates
    • Security
Copyright © 2020 Unity Technologies
  • Legal
  • Privacy Policy
  • Cookies
  • Do Not Sell My Personal Information
  • Cookies Settings
"Unity", Unity logos, and other Unity trademarks are trademarks or registered trademarks of Unity Technologies or its affiliates in the U.S. and elsewhere (more info here). Other names or brands are trademarks of their respective owners.
  • Anonymous
  • Sign in
  • Create
  • Ask a question
  • Spaces
  • Default
  • Help Room
  • META
  • Moderators
  • Explore
  • Topics
  • Questions
  • Users
  • Badges