Wayback Machinekoobas.hobune.stream
May JUN Jul
Previous capture 12 Next capture
2021 2022 2023
2 captures
12 Jun 22 - 14 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 Nekosan_Metalcat · Jun 29, 2018 at 07:19 AM · c#scripting problemraycastscripting beginnerdoor

setting a bool on another object's animator by player's raycast

So I'm really not a programmer... I went through some tutorials to make a door open and close on a playerraycast (interaction). This door object has an animator and should open and close with animations that are made in Blender with a rig and stuff. but I don't know how to set the bool if the door is open or closed... this is what I got:

 public float distanceToSee;
 RaycastHit whatIHit;
 public GameObject player;

 void Start () {
     player = GameObject.FindWithTag ("Player");
 }

 void Update () 
 {
     Debug.DrawRay (this.transform.position, this.transform.forward * distanceToSee, Color.magenta);

     if (Physics.Raycast (this.transform.position, this.transform.forward, out whatIHit, distanceToSee)) 
     {
         if (Input.GetKeyDown (KeyCode.E)) 
         {
             if (whatIHit.collider.tag == "Door")
             { 
                 //this is where the magic should happen
                 }
             }
         }
     }
 }


and it should have somehing like this?:

animator.SetBool ("IsOpen", true);

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 Harinezumi · Jun 29, 2018 at 07:45 AM

You can get components from other GameObjects or even component like Collider using GetComponent() function. With this you can get the Animator or a specific script that you create for doors (or if you want to be more general, interactable objects).

So the simpler solution is:

 Animator animator = whatIHit.collider.GetComponent<Animator>();
 if (animator != null) { // if the hit object has an Animator...
     animator.SetBool("name of animator variable", true); // the second parameter tells you what state it should change
 }

A somewhat better solution is to create a class for the door, which will store the internal state of the door and handle the use of the Animator. This will also make sure that you use the correct animator variables with the correct object types:

 // add this component to the game object that has the door's collider
 public class Door : MonoBehaviour {
 
     private Animator animator;
 
     private bool isOpen = false;
 
     private void Awake () {
         animator = GetComponent<Animator>();
         animator.SetBool("name of animator variable to control door", isOpen);
     }
 
     public void ToggleDoor () {
         isOpen = !isOpen;
         animator.SetBool("name of animator variable to control door", isOpen);
     }
 
 }

And you use it like this:

 Door door = whatIHit.collider.GetComponent<Door>();
 if (door != null) { door.ToggleDoor(); }

Finally, you can create an interface, a kind of template, for all objects that you will be able to interact. By implementing an interface (which looks the same as sub-classing) you promise that this class has the functions the interface has. This way, you won't need to know what is the type of object you hit and try to interact with, you just do:

 public interface Interactable {
     void Interact();
 }

 public class Door : MonoBehaviour, Interactable { // you also implement the Interactable interface
 // everything the same as before, but you change ToggleDoor() to Interact()

 public class Lever : MonoBehaviour, Interactable { // this would be a new class, a lever that you can pull, and it animates it and does stuff...

And you use it like this:

 Interactable interactable = whatIHit.collider.GetComponent<Interactable>();
 if (interactable != null) { interactable.Interact(); } // you don't need to care anymore what the exact type is, you just know you can interact with it, because it implements the Interactable interface

There are a lot of small other things you could do to make this design as flexible and clean as possible, but I think this is already too much information. Good luck! :)

Comment
Add comment · Show 1 · 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 Nekosan_Metalcat · Jun 29, 2018 at 08:06 AM 1
Share

man! you are a lifesaver! : D works like a charm! Thank you very very much! I went with the middle script because I'm using it for a really simple project with only doors for now. But thanks a lot for all the effort!

avatar image
0

Answer by Hellium · Jun 29, 2018 at 07:45 AM

 void Update () 
  {
      Debug.DrawRay (this.transform.position, this.transform.forward * distanceToSee, Color.magenta);
      if ( Input.GetKeyDown (KeyCode.E) && Physics.Raycast (this.transform.position, this.transform.forward, out whatIHit, distanceToSee)) 
      {
          if ( whatIHit.collider.CompareTag( "Door" ) )
         { 
             Animator animator = whatIHit.collider.GetComponent<Animator>();
             if( animator != null )
             {
                 animator.SetBool("IsOpen", true);
             }
         }
      }
  }
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

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

I'm trying to allow my character to only jump when grounded 1 Answer

Storing gameObjects in an array and essentially printing them? 1 Answer

Problems with Gyroscope VR Car Game 0 Answers

How to shoot with a raycast? 2 Answers

Unity 3D: How to make the gameobject speed increase continuously on tapping quickly? 1 Answer


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