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
1
Question by SynergyStudios · Jul 13, 2018 at 07:40 PM · c#programming

[Solved] How to disable function in same script? C#

 using UnityEngine;
 
 public class RaycastShoot : MonoBehaviour
 {
 
     [SerializeField]
     private float range = 300f;
     [SerializeField]
     private float timer;
 
     private RaycastHit hit;
     private Transform  myTransform;
 
     void Start()
     {
         myTransform = transform;
     }
 
     void Update()
     {
         timer -= Time.deltaTime;
         if (timer < 0)
         {
             timer = 0;
             Shoot();
         }
         timer += Time.deltaTime;
         if (timer >= .2)
         {
             Shoot() = false;
         }
     }
 
     void Shoot ()
     {
         if (Input.GetButton("Fire1"))
         {
             Debug.DrawRay(myTransform.TransformPoint(0, 0, 1f), myTransform.forward, Color.green, 3);
             if (Physics.Raycast(myTransform.TransformPoint(0, 0, .1f), myTransform.forward, out hit, range))
             {
                 if (hit.transform.CompareTag("Enemy"))
                 {
                     Debug.Log("Enemy" + hit.transform.name);
                 }
                 else
                 {
                     Debug.Log("Not an enemy");
                 }
             }
         }
     }
 }

I am trying to make a timer to disable the Shoot() function in void Update. Help?

Comment
Add comment · Show 2
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 SynergyStudios · Jul 13, 2018 at 07:42 PM 0
Share

i need help on line 30 please :)

avatar image SynergyStudios · Jul 14, 2018 at 09:38 PM 0
Share

Thank you both for answering my question! thanx :)

2 Replies

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

Answer by JVene · Jul 13, 2018 at 08:12 PM

The particular way you've posed your question brings up an interesting topic, a technique referred to as "delegates".

Now, for a simple situation you could just create a bool, say "shouldShoot", which the shoot function honors by returning immediately when false (or alternatively, only does something if shouldShoot is true).

That works, and is typically a great choice for simple use cases.

However, you specifically asked for help with line 30 in which this won't compile:

 shoot() = false;

This doesn't compile because the () operator treats shoot as a function call, and since that function returns a void, that void can't be assigned to false. If shoot returned a valid type in which such an assignment made sense, it might compile, but probably wouldn't do what you want. This latter explanation is the basis for text like:

 GetComponent<Script>().Function();

Where GetComponent returns a Script object, which can be used as any object to call a member function (or, if it were appropriate, assign to something - a dubious choice, but perhaps syntactically appropriate in the right circumstances, like setting a property).

However, what you are thinking is the notion of treating Shoot as if it were a variable you could change, even though it is a function.

That's what delegates offer.

To use this technique for your goal, you'd need to declare a delegate to a function of the same signature of your Shoot function with something like:

 delegate void ShootFunc();

At this point, ShootFunc is a type. The type is a delegate to a function that returns void and takes no parameters (though it could take parameters in other contexts and return a type if you required).

Next, you create a member variable in your script using this type. Something like:

 ShootFunc Shoot;

It is important to note that Shoot is now a variable. It represents a function call, but it is a variable. In this declaration the variable is null, so using it would generate an exception.

Next, you create two "Shoot" type functions, something like:

 void DoShoot(){....}
 void DontShoot(){....}

These two functions now represent two possible ways a call to Shoot would respond. To enable shooting, you assign Shoot to one or the other function with something like:

 Shoot = DoShoot;

This is what you'd want to do with Shoot() = true (which doesn't work, you know). Instead, you're assigning the delegate so it calls DoShoot, and shooting is thus performed any time code does:

 Shoot();

Now, to disable shooting, you do something like:

 Shoot = DontShoot;

Whatever the real function DontShoot does, it does not shoot. Maybe it makes a strange "no-shot" sound, or warning, or whatever.

This is how you can make a single function call used throughout your code change the behavior among several possible options.

Shoot, a member variable of the type delegate to a void f() function type, can be assigned to select specific behavior among any number of possible actual functions, mutating behavior based on circumstances you choose.

It is a bit more sophisticated than is typically applied to a "shoot/don't shoot" option, but I was prompted by your peculiar fashion of the question which indicates you're thinking along the lines of delegates, and you may have reason to use this in more complex scenarios, and you might enjoy avoiding bools but use a more sophisticated technique that offers cleaner code as a result.

Cheers @SynergyStudios

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 bolkay · Jul 13, 2018 at 07:47 PM

Use booleans

 using UnityEngine;
      
      public class RaycastShoot : MonoBehaviour
      {
      
     //Create a boolean variable
          private bool shoot=true;
          [SerializeField]
          private float range = 300f;
          [SerializeField]
          private float timer;
      
          private RaycastHit hit;
          private Transform  myTransform;
      
          void Start()
          {
              myTransform = transform;
          }
      
          void Update()
          {
              timer -= Time.deltaTime;
              if (timer < 0)
              {
                  timer = 0;
                  Shoot();
              }
              timer += Time.deltaTime;
              if (timer >= .2)
              {
     shoot=false;
                  //Shoot() = false;
              }
          }
      
          void Shoot ()
          {
     
              if (Input.GetButton("Fire1")&&shoot==true)
              {
                  Debug.DrawRay(myTransform.TransformPoint(0, 0, 1f), myTransform.forward, Color.green, 3);
                  if (Physics.Raycast(myTransform.TransformPoint(0, 0, .1f), myTransform.forward, out hit, range))
                  {
                      if (hit.transform.CompareTag("Enemy"))
                      {
                          Debug.Log("Enemy" + hit.transform.name);
                      }
                      else
                      {
                          Debug.Log("Not an enemy");
                      }
                  }
              }
          }
      }
 
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

527 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 avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image 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

Avatar constructor returns null 1 Answer

Use local instantiated variable outside of scope 2 Answers

Method to stop enemies from spawning Unity5 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