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
1
Question by stephanholding · Oct 01, 2020 at 08:04 AM · accesspermissionsfunction call

Is there a way to make certain functions accessible by only certain classes?

I have an InputManager that has public functions that can be called from any script, but also functions that must only be called from certain scripts with "permission." The script that has permission is the InputReader, but other classes shouldn't have access to those particular functions.

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

1 Reply

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

Answer by Bunny83 · Oct 01, 2020 at 08:53 AM

Not really possible unless you compile those scripts to a seperate assembly and use the internal access modifier. Things defined internal are like public for the current assembly / module but are private from the outside. There are no "friend" declarations like in C++ as this generally leads to a maintenance hell since it's hard to tell who has access to what parts. That's most likely the main reason why they didn't include such a keyword in C# ;) See this SO question for some reasons.


C# has another feature called partial classes which can lead to similar issues when abused. Partial classes have been implemented mainly to seperate auto generated code (like from the visual studio form designer) and user code.


There are other ways to achieve some sort of contract between classes. One way is something like this:

 public interface IInputHandler
 {
     void OnKeyDown(KeyCode aKey);
 }
 public interface IInputReader
 {
     void SetHandler(IInputHandler aHandler);
 }
 
 public class InputManager : MonoBehaviour
 {
     private InputHandler handler = new InputHandler();
     private class InputHandler : IInputHandler
     {
         public void OnKeyDown(KeyCode aKey)
         {
             // handle
         }
     }
     public void RegisterReader(IInputReader aReader)
     {
         aReader.SetHandler(handler);
     }
 }
 
 public class InputReader : IInputReader
 {
     IInputHandler inputHandler;
     public void SetHandler(IInputHandler aHandler)
     {
         inputHandler = aHandler;
     }
     void SomeMethod()
     {
         inputHandler.OnKeyDown(key);
     }
 }

In this case you can only get access to the "handler" if you are implementing the IInputReader interface. So only a certain type of classes are able to get access to the methods provided by the InputHandler class.


Keep in mind that access modifiers are by no means security measures. They are languages constructs to convey an idea and to restrict yourself from misusing this idea. With the help of reflection it's possible to circumvent all of those measures and there's no way to prevent that. After all code is just code and data is just data on the CPU level.

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

135 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

Related Questions

How to check camera permission in ios app? 1 Answer

Serial ports permissions in android 1 Answer

Grant access permission to my project unity android M ? 0 Answers

Access Denied 1 Answer

Monodevelop-Unity on OSX still requires admin rights to run. 4 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