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 Party Boy · Jan 03, 2014 at 07:19 PM · weaponmononewbehaviour

Not allowed create MonoBehaviour using new keyword

Right now I have a simple weapon select. In the class WeaponSlot, I have a getSlotNumber method to return the currently selected weapon slot. How can I return this from another script? I want to have it in my ObjectPool class. So basically if I press 1, it shoots cubes, if I press 2 it shoots Spheres. So in the ObjectPool I will need to somehow use the getSlotNumber from WeaponSlots, but what is the best way of accessing the WeaponSlots class?

When I tried the following code:

WeaponSlots ws = new WeaponSlots(); int selectedWeapon = ws.getSlotNumber();

I get this warning

You are trying to create a MonoBehaviour using the 'new' keyword. This is not allowed. MonoBehaviours can only be added using AddComponent(). Alternatively, your script can inherit from ScriptableObject or no base class at all UnityEngine.MonoBehaviour:.ctor() WeaponSlots:.ctor() ObjectPool:Start() (at Assets/Resources/Scripts/ObjectPool.cs:15)

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
0
Best Answer

Answer by Kiloblargh · Jan 03, 2014 at 08:24 PM

Maybe do like the error message says and use AddComponent? I don't really see what you're doing here (without you posting more scripts) but I can tell that you're doing it wrong.

You should have a specific instance of the WeaponSlot class attached to a GameObject in the scene, and reference it by a variable.

 WeaponSlots ws;

 void Awake() {
 ws = GameObject.Find("WhateverObjectHasWeaponSlotsOnIt").GetComponent.<WeaponSlots>();
 }

Once you've done that; ws.getSlotNumber will work because ws refers to a specific instance of WeaponSlots.

Comment
Add comment · Show 2 · 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 Party Boy · Jan 03, 2014 at 08:37 PM 0
Share

@$$anonymous$$iloblargh That worked thanks a lot, it got rid of the error. I'm new to Unity so not sure how accessing things etc works.

The way my script is meant to work is if you press 1 or 2 it sets a global variable in WeaponSlots to the number and using the GetNumber method from the ObjectPool class, it returns the number selected and will change to a sphere or cube depending on the number selected. However for reason it doesn't seem to be updating the number selected?

I do weaponSelect = ws.GetNumber in the Update() method too, but it doesn't seem to change. Is there something else I must do?

avatar image Kiloblargh · Jan 03, 2014 at 08:55 PM 0
Share

I don't know, but that sounds pretty convoluted. I would do it like this:

 public GameObject[] weapons;
 public GameObject currentWeapon;

 void Update () {
 if (Input.any$$anonymous$$eyDown) {
     if (Input.Get$$anonymous$$eyDown ($$anonymous$$eyCode.Alpha1) ) {currentWeapon = weapons[1]; }
     if (Input.Get$$anonymous$$eyDown ($$anonymous$$eyCode.Alpha2) ) {currentWeapon = weapons[2]; }
     if (Input.Get$$anonymous$$eyDown ($$anonymous$$eyCode.Space) ) {FireWeapon (currentWeapon); }
     }
 }

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

19 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

Related Questions

PLease Help 1 Answer

GUI does not show my current ammo 0 Answers

How Can One Collider Recognize Contact With Another? 0 Answers

Method keeps looping when using waitForSeconds 1 Answer

Usage timer/weapon cooldown... 3 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