Wayback Machinekoobas.hobune.stream
May JUN Jul
Previous capture 12 Next capture
2021 2022 2023
1 capture
12 Jun 22 - 12 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 bunnynsnake · Mar 25, 2018 at 04:03 AM · c#eventevent triggering

c# code help -- events part 1

got a few questions on coding, i'll just ask one at a time.

I would like, when the player walks in the field of view of the enemy, the enemy rushes at the player and then disappears, causing a raise in heart rate by 20 BPM.

I think events, PlayerInViewEvent, and RateIncreaseEvent are what would work for this. but i do not know how to get that all to work in the code, and i don't know if those are even the best way to go about this. Can i please get some coding help.

here is the code i have so far.

 using System.Collections;
 using System.Collections.Generic;
 using UnityEngine;
 
 public class HeartRate : MonoBehaviour {
 
     public GameObject Player;
     public GameObject Enemy;
     float heartRateBase = 80; // 80 BPM
    public float heartRate = 100;
 
     float safeDistance = 5; // distance away form the enemy where heart rate goes down
 
     float relaxRate = 0.005f; //  how fast the player recovers
     float stressRate = 0.05f;// The closer the plauer is to the enemy the more it will increase
 
     void FixedUpdate()
     {
         // Find distance from enemy
         float dist = Vector3.Distance (Player.transform.position, Enemy.transform.position);
        
         // Check to see if player is safe
         if (dist > safeDistance)
         {
             // Decrease player heart Rate
             if (heartRate > heartRateBase)
                 heartRate -= relaxRate;
         }
         else
         {
             // Increase the players heart rate depending on how close they are
             float rate = 1 - dist / safeDistance;
             heartRate += stressRate * rate;
         }
 
     }
 }


Comment
Add comment · Show 4
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 hexagonius · Mar 25, 2018 at 12:03 PM 1
Share

why do you think you're supposed to use events? is this code working?

avatar image bunnynsnake hexagonius · Mar 25, 2018 at 02:46 PM 0
Share

this code does work, but its only for when the player is close to the enemy. That is all the code i have so far. and i thought that events would be the best way to do what i need. Is an event not the right way to go about this?

avatar image RobAnthem bunnynsnake · Mar 25, 2018 at 04:27 PM 1
Share

Events build up too much garbage to want to run them constantly. They are very useful, but just remember not to abuse them.

So the enemy needs a controller script, that checks distance, and raycasts or linecasts a line of sight, then if it has a clear path, you can use your own movement system, or a Nav$$anonymous$$eshAgent to send the enemy toward to player, and if he is less than or equal to the attack or disappearing distance, that's when you make him disappear, and call the spike in heart rate.

To implement a UnityEvent, which let me be clear, is very different from a c# event.

 public UnityEngine.Events.UnityEvent OnWhateverAction;
 
 void Update()
 {
     if(blah >= blahblah)
     {
         OnWhateverAction.Invoke();
     }
 }

That is the absolute simplest way to implement events. Now, events can have parameters as well, and can even be tied to methods with parameters in the inspector.

As well, you can use the Action system to create our own types of event handlers. Basically an event works kind of like this...

 public class Event
 {
     public List<Action> actions;
     public Event()
     {
         actions = new List<Action>();
     }
     public void AddListener(Action action)
     {
        actions.Add(action);
     }
     public void RemoveListener(Action action)
     {
        actions.Remove(action);
     }
     public void Invoke()
     {
         foreach (Action action in actions)
         {
            action.Invoke();
         }
     }
 }

Show more comments

1 Reply

· Add your reply
  • Sort: 
avatar image
1
Best Answer

Answer by NoMoneys · Mar 25, 2018 at 06:44 PM

You could use certain colliders as children of the enemy to represent it's field of view, then when the player enters one of these colliders you could make the enemy do something.

For example: You could use a state-machine for the enemy using an enum; whenever the player is in sight, change the state of the enemy to aggresive, and do something based on that state.

As for making it disappear when it gets within range, You could enable or disable the meshrenderer of the enemy component based on the distance to the player.

Comment
Add comment · Show 3 · 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 bunnynsnake · Mar 25, 2018 at 06:51 PM 0
Share

Thank you, that is a possible solution. as i am still new to coding, i don't know exactly how to make it actually work. Can you please give me an example of how i would do this?

avatar image NoMoneys bunnynsnake · Mar 25, 2018 at 07:13 PM 1
Share

This is how I would do it.

The enemy:

public class Enemy : $$anonymous$$onoBehaviour { public enum EnemyState { Nice, Aggresive }

 public EnemyState currentState;


 private void Update()
 {
     CheckStates();
 }

 private void CheckStates()
 {
     if(currentState == EnemyState.Nice)
     {
         // Do nice stuff
     }

     if(currentState == EnemyState.Aggresive)
     {
         // Do aggresive stuff
     }
 }

}

The enemy's collider (field of view in this case):

public class EnemyCollider : $$anonymous$$onoBehaviour { public Enemy masterObject;

 public void OnTriggerEnter(Collider other)
 {
     if(other.gameObject.tag == "Player")
     {
         masterObject.currentState = Enemy.EnemyState.Aggresive;
     }
 }

 public void OnTriggerExit(Collider other)
 {
     if(other.gameObject.tag == "Player")
     {
         masterObject.currentState = Enemy.EnemyState.Nice;
     }
 }

}

The enemy collider changes the current state of the enemy (which I called masterObject). Then in the enemy script you can execute code based on the current state.

avatar image bunnynsnake NoMoneys · Mar 25, 2018 at 07:33 PM 0
Share

thank you, i really appreciate it. I've had a lot of problems with this. hopefully i can get this to work. i will try and tag you in any other questions if i need help with this further.

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

467 People are following this question.

avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image

Related Questions

Multiple Cars not working 1 Answer

Distribute terrain in zones 3 Answers

Is there a smarter way to implement event sequencing? 1 Answer

Making a bubble level (not a game but work tool) 1 Answer

Passing Java String to C# for use in Wwise Post Event = Fail 0 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