OPENING a DOOR in UNITY on TRIGGER EVENT
Vložit
- čas přidán 23. 08. 2024
- In this Unity C# tutorial I show you how to animate a door, interact with it to open and close with animation using a basic trigger event script. I show you how to set the pivot, create the animation, write the scripts and then implement a fully open/close door feature!
➡️Playing and Creating Animations: • Creating SIMPLE Animat...
➡️Creating a Crosshair UI: • Creating a Crosshair i...
➡️Door Interaction Kit: • Door Interaction Kit -...
➡️Check out the FREE tutorials here:
➡️Basic Raycast Door: • INSPECT System Tutoria...
➡️Trigger Door: • INSPECT System Tutoria...
➡️Raycast Button Raycast Door - • OPENING a DOOR using a...
➡️Key Open Door Raycast - • OPENING a DOOR with a ...
➡️Hinge Door - • Creating a HINGE DOOR ...
➡️Door Sounds: • Door SOUNDS in Unity |...
🎁 Get OVER 220+ Scripts, Projects and premium content on my PATREON HERE:
➡️bit.ly/SpeedTut...
·························································································
➡️(My Game) Left Alone on Steam: tinyurl.com/Lef...
🔥SpeedTutor Unity Store: bit.ly/STUnity...
🔥 INSANE UNITY SAVINGS: bit.ly/UnitySa...
🕹️Unity Sales: bit.ly/UnitySa...
🕹️Quick-Start Bundle: bit.ly/UnityQu...
🕹️Weekly Publisher Sale (+FREE Asset): bit.ly/WeeklyP...
🕹️Unity New Release Discount Sale: prf.hn/l/BdvEmg3
🔥 INSANE HUMBLE SAVINGS: bit.ly/HumbleB...
🕹️Learn To Code Bundle: tinyurl.com/Com...
🕹️UE5 Game Making Tutorials: tinyurl.com/Mak...
🔥 FANATICAL GAMEDEV BUNDLES: bit.ly/Fanatic...
🕹️Fanatical Bundle Savings (+20% OFF): bit.ly/Fanatic...
🕹️Low Poly Unity Bundle: bit.ly/Fanatic...
🕹️RPG Game Builder Assets: bit.ly/Fanatic...
🕹️Unity-Unreal-Godot eLearning Bundle: bit.ly/Massive...
🔥Synty Discounts & Savings: bit.ly/SyntyLo...
🔥Unity Pro Deals: bit.ly/UnityPr...
🔥Topcashback: bit.ly/Topcash...
·························································································
💰BIG DISCOUNTS on my website, for my UNITY ASSETS:
➡️www.speed-tuto...
💬Join the Community Discord:
➡️ / discord
💝 Make a donation to the channel:
➡️www.paypal.me/s...
·························································································
⬇️ SpeedTutor Puzzle Assets:
➡️Unity Store: bit.ly/STUnity...
➡️My Website Discounts: www.speed-tuto...
⬇️ SpeedTutor Best Selling Assets:
🧩Adventure Puzzle Kit: bit.ly/STAdven...
🗒️ Note & Letter System: bit.ly/STNoteL...
🔍Examine System: bit.ly/STExami...
🔢Keypad System: bit.ly/STKeypa...
⬇️SpeedTutor Model Packs:
➡️Unity Store: bit.ly/STUnity...
➡️My Website Discounts: www.speed-tuto...
My Assets include: Gas Mask, Flashlight, Generator, Themed Key , Padlock, Phone, Chess Puzzle, Lever, Valve Puzzle, Fuse Box & Safe Systems. Cardboard, Debris, Massive Models and more!
························································································
⭐ Connect with me:
💬| Discord: / discord
🐦| Twitter: / speedtutor
📱 | Facebook: / speedtutoruk
🖥 | Website: www.speed-tutor...
·······················································································
#Unity #GameDevelopment #DoorTrigger #OpeningDoor
If you TRIGGER me, this door is going to open SO FAST!
🔥UNITY SAVINGS: bit.ly/UnitySalesHub
🔥SpeedTutor Unity Store: bit.ly/STUnityStorePuzzlePacks
🔥HUMBLE SAVINGS: bit.ly/HumbleBundleDeals
hi
For the door open/close animations, easier to copy DoorOpen in the animator and set the playback speed to -1 and rename it DoorClose. That way it's less data since both animations are sourced from the same clip file! Just needs to not loop and not write default state either.
I didn't know this but thanks for the suggestion! :) I'll be sure to share this in my next video and mention your comment!
Good video :) ... May I suggest an improvement. You could make just 1 trigger around the door. When the player enters the trigger, it opens the door. When the player exits the trigger, the door closes ... Further to this, if you have multiple players accessing the door, you don't want the door to close when any player exits the trigger. In this case you want the door to close when ALL the players exit the trigger. To do this, the door keeps a counter of how many objects (Players) there are in its trigger and it would open when this counter is equal to 1 (first Player entered the trigger). The trigger exit event would decrement the counter every time an object exits the trigger and the door would close when the counter goes down to zero (ie. no more objects in the trigger).
This is very, very true! There are multiple ways to do things within games, not just on trigger events and if I showed every eventuality it would be a really long video. I was just showing one way, which is a basic concept of how you could implement it! :) Thanks for the comment though! :)
@@SpeedTutor ... Hello again SpeedTutor. Thanks for the reply. Yes, there are many ways to implement the same features in games. It's always nice to share ideas to help the game development community :) ... Keep up the good work.
Thanks again for taking the time to comment! Really helpful! :)
In my game, I have made it so that when the player is colliding with the door, if the player presses a certain key, the door opens up. and if the player presses a different key it closes. Also, the door opening up and closing doesn't even have to be an animation, it could very well be a rotation that is implemented in update. That way, if we want to implement this script on multiple doors, it would work. Idk really know if animations from one door is transferable to others.
@@MarioSpiteri how do you do this??? I really want to add this but I just cant figure it out.
This tutorial is pure gold
I'm glad you think so, my friend! Thanks for coming to watch! :D
THANK YOU SO MUCH I'VE BEEN TRYING TO DO THIS FOR WEEKS
I'm so glad you thought so! Thanks for coming to watch my friend! :D
Ive been trying to do this for two straight days which has been very frustrating. Thank you so much for your video. Now I just have to figure out how to make it so it opens and closes on both sides
I figured it out! If anyone finds this video and wants to do the same thing I did, here is the code I used
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class TriggerDoorControl : MonoBehaviour
{
[SerializeField] private Animator myDoor = null;
[SerializeField] private bool openTrigger = false;
[SerializeField] private bool closeTrigger = false;
private void OnTriggerEnter(Collider other)
{
if (other.CompareTag("Player"))
{
myDoor.Play("open", 0, 0.0f);
}
}
private void OnTriggerExit(Collider other)
{
if (other.CompareTag("Player"))
{
myDoor.Play("close", 0, 0.0f);
}
}
}
Thanks for sharing your thoughts, my friend! I hope you found my tutorial useful! :D
even better than Brackeys, it's...
SpeedTutor, congrats on 100k subs too :)
Thanks man! I appreciate it! :D
I got it in the end. The video missed a couple of points I had to figure out cos some parts of the video editing were cut short. But I'd recommend this vid for learning.
Thanks very much! :)
Thank you for this, very helpful building block for a beginner
That's no problem at all, thanks for coming to watch! :D
Thx for this Tutorial VERY VERY HELPFUL =)
I'm glad you think so, thanks for watching! :)
hi, thankyou for your tutorial and it really helps me alot, but i want to add audio when my door open and close, how to add audio in it?
Hey there, thanks for checking this out. I have a tutorial all about door sounds on my channel, I've got the link in the description too :)
Really useful tutorial as always
Glad you think so!
SORRY, Matt... Another bloody good video m8!!.. I nearly forgot to say that cos I was confused about the "FIRST" viewer
Don't worry about it! :)
How can I do this with 3 or more buttons/triggers/etc to open a door? So 3 buttons have to be pressed before the door will open.
You'd have to keep track of which buttons you've pressed and then once all have been pressed, use a method to open the door :)
Thanks lot, I had a button trigger before but when ent5ering a let's say a arena I wanted them closed on a trigger, this helped me alot! Thank you!
You're very welcome, I'm glad I could help :) How did you find me? :)
@@SpeedTutor just typed open/close door on trigger unity3d hahah
Nice Simple vid !
Thanks very much! :)
Used this method thank you
Fantastic! I'm glad this was helpful to you! :D
Thank you so much
You're very welcome! :D
Thanks its work
I'm glad you found it useful! :)
if the animator was empty it could just be because youve lost the origin. to fix close the animator tab then open it again and it should put you back to 0,0
Thanks for the tip!
It's not working for me, idk whats wrong. I did everyting step by step and correctly. Mine's a mobile app. I'm using unity nav mesh if that has anything to with why it's not working? I'm walking on the trigger but the door isn't opening
I tried ticking the "Provide Contact" on the box colllider of my Trigger Objects, still didn't do anything. I tried adding a rigidbody on my Player, since i saw that you have one on your. Still nothing. Please help
Is there a tag you're missing? Did you try and add a debug log to this and see if it fires when you walk into the trigger?
too good
Thanks very much! :)
Thank you very much
Any thoughts on why the triggers don't work in VR? I have a scene with triggers , and the XR Rig tagged as "Player". However, my door does not open when I approach the trigger.
I'm not sure at all, does one of your objects you're trying to trigger use a Rigidbody?
@@SpeedTutor I will look when im home and check -- thanks!
Raycast Locked Door and Key Plz :)
Anyone else having trouble getting the tick boxes to appear? And Unity won't let me use [SerializedField] :(
Why not? Are you missing a "Using namespace" at the top?
can you put the code in the description for the people who struggle to write that?
All the scripts and projects are on my Patreon :)
And how to make Door like RE 7? If player collide with Door slighty, the Door will open A bit and if player force in to the door, The door will open properly.
Like the player and the door have a physics
I was actually creating something like this, it was a combination of a hinge joint with a limit and then if you push on it again, it will open fully.
Figured out most of the process here. But i am getting error code: CS0542 "member names cannot be the same as their enclosing type". Everything looks right to me.
My Code:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class ButtonPress : MonoBehaviour
{
[SerializeField] private Animator ButtonDown = null;
[SerializeField] private bool ButtonTrigger = false;
[SerializeField] private string ButtonPress = "ButtonPress";
private void OnTriggerEnter(Collider other)
{
if (other.CompareTag("Player"))
{
if (ButtonTrigger)
{
ButtonDown.Play(ButtonPress, 0, 0, 0f); //ButtonPress is name of animation
gameObject.SetActive(false);
}
}
}
}
That's because your field "ButtonPress" is the same name as your class. Make sure you have field names in a different case, like: buttonPress, buttonDown, buttonTrigger. It's usually good practise! :)
hey do you know how to fix the door starting open?
Make sure to check your animation :)
SpeedTutor do you you have eny weapon pic up system.
I really struggle to make the weapon pickup system in the fps I'm working now I have make omost all the systems the only problem I have now is how to check if is the corect object on the ground if use the tags method I will have a to meny tags and if use the name method I by not able to duplicate objects that mens both methods is not working correctly I need to find same alternative method eny idia? Maybe is same way I don't know yet if you have eny segestions I want to heard
One more question haw I'm using layers in code and what is the difference if use layers instead form tags in code?
Quick question: the door doesn't open, the errors are: "Animator.GotoState: State could not be found" and "The referenced script (Unknown) on this Behaviour is missing". I'm very new to coding, what does that mean and how do I make it work?
Is the animation name the same as what you referenced in the script? Is the correct animation component on your door?
How did you create the box triggers (the green ones)?
Just choose Create > 3D > Cube and then give it a green material :)
Nice vids ! How can I make it work multiple time ?
You would have to make some logic that when you exit the trigger the door might close or make a check to see when the door is open and if you walk into it again, it closes. It's really up to you! :)
I've been trying this tutorial for hours but still not working 😢 welp.. The triggers seem okay, and the controller also could detect and made a transition from null to DoorOpen. But still the door didn't move at all T----T
Your door isn't marked as static, is it?
What if i coming from out side its will open or not?
Selecting a method, whether is it using raycast or triggers, depends on the game? Or there are some benefits using one or another?
Raycast is much better than triggers
It's very dependant on your use case, if it's a top down 2D style game you might want this solution but raycasts can be either first or third person.
@SpeedTutor my code doesnt work it says "Animator" does not contain a definition for 'play' etc can you help
Did you create the correct reference at the top?
Nothing is in my animator? how did you get all of those buttons in there at 3:18
Have you clicked on the object with the animator component?
@@SpeedTutor Uh... Nope... 😂 That was the fix haha, cheers buddy 😀
Haha, you're very welcome! :D
anybody know how to make it so the door automaticaly closes when you step off?
Use OnTriggerExit :)
ye I got it thanks@@SpeedTutor
Is the free asset still available? I can't find it
It's on my Patreon but if you downloaded this before, it's available on the Unity store within your account :)
i followed tuturial but trigger doesn't open door , Need Help
Any errors?
I'm getting a "invalid Layer Index '-1' error
Did you create the layer?
When I wanted to create a double door feature with this script. I did the same exact thing for "Door2" as I did with "Door1" (with door 1 being the door i created by following the tutorial). However, even when I created new triggerclose, triggeropen & scripts + animations with it, it comes up with the error "Animator.GotoState: State could not be found". I double checked my Animator Base Layer and I have properly set "Idle" as the layer default state. I've looked everywhere and tried everything I could come up with and I have still not been able to find an answer for this.
Did you give the code the correct animation name?
@@SpeedTutor Haha sadly i forgot about that until my brother pointed it out! Thanks for responding though! Good to know you respond! Love the tutorial and will definitely watch more ❤️
No worries at all! :D It's just sometimes I miss the odd comment because replies aren't easily accessible and all the comments get in the way. Thanks for watching though! :D
Hey i get this error after i save the script. NullReferenceException: Object reference not set to an instance of an object. i followed it to a Tee but it is saying Animator myDoor Null is is not set to a instance of an object, i tried fixing but cannot figure it out. Would Appreciate help.
So it wont allow me to add my door to the script
You must have an error? Is your script name the same as your class name?
what is wrong with myy code in unity it says assets\TriggerDoorController2.cs(13,34): error CS0246: The type or namespace name 'collider' could not be found (are you missing a using directive or an assembly reference?) please help
What's the code on that line?
@@SpeedTutor private void ontriggerenter (collider other)
If you did spell it just like this, it needs to be: void OnTriggerEnter(Collider other)
- I hope that helps! :)
I want to learn how to use OnTriggerExit to make the door automatically close upon exiting the trigger
Did you work it out?
@@SpeedTutor No. I tried something and it didn't work. I need a proper tutorial on it
I know im late but it keeps on crashing when I put the script in the trigger boxes
That's pretty strange, does your Unity crash often?
I used double door in my project, the open door script is working but the close door doesnt, also the trigger doesnt disapear when i touched it, any solution?):
Do you disable the trigger when you walk into it?
@@SpeedTutor actually it was because i havent changed the closedoor on the script, but thank you for the reply
Great work on fixing it! :)
@@SpeedTutor do you have any tutorial on making jumpscare? i need one, i tried the one that using multiple camera but there's a bug which makes the audio wont play, if you have one please let me know :)
I could not move that white scroll when i tried to travel between key frames😶? any idea
Was it locked?
@@SpeedTutor idk i anyhow got work from that scroller by after 20 mins 🙂 thx for the tutorial.
Hi, I wonder if you can help?..I have a music play system that i want to put on my pause menu. I need to put a donotdetroyonload on it. BUT i need it to be on on a child off the pause menu but donotdestroyonload DOESNT work on childobjects, is there any other way around this? Thanks.
That is a really good question, what about having the DontDestroyOnLoad - On your parent object?
@@SpeedTutor that's what I had it on originally. I've tried every way can't do it..bit silly that you can't have a deactivated object on a do not destroy on load
I know exactly what you mean, I don't know if there is another way around it. Do you need them to be attached?
@@SpeedTutor I'll show you what it is (in the link) , it's a CD player canvas, that I only want to be displayed in an option in the pause menu,. So that means it still be set active(false) until you need it, the only way it works of its displayed all the time which is what I want.
czcams.com/video/r1iDr3HTKxc/video.html
hey man, ive been trying for days to get the triggers working on my 2d game, i have not used your code as my doors work a little different. so basically when the player stands in the trigger, he can press F to "buy" the door with points, but currently i come across issues where my player can either press F from anywhere around the map, or it doesnt work at all. would you ever consider making a video on this? thanks
What about you create a boolean or use "OnTriggerStay" (Which is like update but in a trigger scenario). So in these cases that ONLY when you're inside the collider / trigger can you buy the door! :)
@@SpeedTutor hello, i tried that but i dont think my triggers work properly, when i press F even outside the trigger the door still opens. i really thought my script would work
public class BuyDoor : MonoBehaviour
{
public Transform door;
public void BuyDoor1()
{
gameObject.SetActive(false);
}
}
other script
public class DoorTrigger : MonoBehaviour
{
[SerializeField] private BuyDoor door;
void OnTriggerStay2D (Collider2D collider)
{
if (Input.GetKeyDown(KeyCode.F))
{
door.BuyDoor1();
}
}
}
Are you sure this isn't being activated anywhere else?
@@SpeedTutor ive fixed the issue, turns out when i shoot at the door my bullet activates the trigger, hence why i was able to open the door from anywhere around the map, i used comparetag to fix it
Haha, good spot! :) You're a smart man.
I REALLY don't get this "FIRST" statement people have got going on with themselves? or is it me? I'm not arsed if I'm first or last that views the videos LOL
It's always appreciated Roy! :)
im coming up with a problem where the trigger isnt getting "triggered". nothing happens. I set the box collider's IsTrigger state to true. not sure what else I could be missing? The script is on the box, and the OpenTrigger button is set to true. I even put a Debug.Log inside of the function but it is never called, as if no trigger had entered
Did you tag the player controller you're using?
@@SpeedTutor I did, it has the Player tag
No errors?
@@SpeedTutor no errors at all :( just nothing happens
@@oscarlopez8186 same
im not sure if i missed anything whenever i copied it down but whenever i try to drag the script onto the triggers it says "the script dont inherit a native class that can manage a script" i literally started coding yesterday so i have no clue what that means lol. also my [SerializeField] code is not getting highlighted and recognized for some reason????
Is the name of your script the same as your class name?
@@SpeedTutor oh i accidently put spaces for the name lol. thank you for your help
No worries! Haha. :)
@@SpeedTutor what is a class name?
Edit: I kind of understand it now, Your video is AMAZING!!!!!!!+!%++!/!!
Hello, this is the first video from You I see, and I'm just starting to do Stuff in Unity, at 5:30 why do You use myDoor, the door is named Single_Door_Model, the animations for the door are named DoorOpen and DoorClose, so neither of these 3 are myDoor. I don't understand that part; Could You please help?
@SpeedTutor
myDoor is literally just a variable name, you can name it however you want! I only use "myDoor" so you know where you'll put the door gameobject!
@@SpeedTutor Thank You 👍
I have big problem
I have same Script And same settings
But when i go to trigger , doors doesnt start open animation. Please HELP
You didn't set your door to static, did you?
@@SpeedTutor ah thank you
Did that fix it? :)
@@SpeedTutor yes Now Its ok
hey man it seems like a great tutorial and im sure its something on my side but ive spent a good hour trying to figure out whats wrong and i have no clue. followed everything and theres no issues with the code or the names but the doors just wont open for some reason. if anyone could help me out thatd be great! :)
No errors at all? Add some Debug.Log lines into your code and see if it adds that to the console when you run specific code? Then you can try and find the culprit! :)
@@SpeedTutor hi it doesnt work for me to, do you have any tips?
My player will walk into the trigger but nothing happens...what did I do wrong?
Did you tag your player?
@@SpeedTutor yes, I followed step by step by the trigger blocks don’t work when I walk into them
I really don't know why this is happening but My code doesn't work
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class TriggerController : MonoBehaviour
{
[SerializeField] private Animator ObstaclesRise = null;
[SerializeField] private bool RiseTrigger = false;
[SerializeField] private bool DownTrigger = false;
[SerializeField] private string Rise = "Rise";
[SerializeField] private string Rise2 = "Rise2";
[SerializeField] private string Rise3 = "Rise3";
private void OnTriggerEnter(Collider other)
{
if (other.CompareTag("Player"))
{
if (RiseTrigger)
{
ObstaclesRise.Play(Rise3, 0, 0.0f);
ObstaclesRise.Play(Rise2, 0.0, 0.0f);
ObstaclesRise.Play(Rise1, 0, 0.f);
}
}
}
}
Only "Rise3" works but not "Rise2" and "Rise1" can you help me?
I know this is a super late response but incase anyone else needs help with this issue, You are using "Rise1" instead of the Private string name "Rise" you also forgot to put "" on ObstaclesRise.Play(Rise3, 0, 0.0f);
ObstaclesRise.Play(Rise2, 0.0, 0.0f);
ObstaclesRise.Play(Rise1, 0, 0.f);
So the fixed version of this would look as shown
ObstaclesRise.Play("Rise3", 0, 0.0f);
ObstaclesRise.Play("Rise2", 0, 0.0f);
ObstaclesRise.Play("Rise", 0, 0.0f);
any other changes are up to you, hope this helps :)
@@ducker5815 lol I already stopped coding
I want to create an event system for the door so that it only opens if the Pinpad is correct. How can I implement it with your triggerdoorcontroller script. This is my code(I already delegate my pinpad script):
public class DoorEvent: MonoBehaviour
{
void OnEnable()
{
PinPadtwo.open += ;
}
void OnDisable()
{
PinPadtwo.open -= ;
}
public void ()
{
}
}
You can use the EventSystem in Unity. Check out my tutorial on this channel for events and I explain them there! :)
does anyvody know how to make the triggers reapear?
Use .SetActive(true) when you walk into the other?
how do you make the triggers stay
I'm not sure what you mean?
did you figure it out? if not take out the game object set active false part of the code. (its under the myDoor.Play(doorClose, 0, 0.0f) code), hope that helped :)
i followed this tutorial and it still doesnt work
Any errors?
why is Play for myDoor.Play red for me?
What is your line of code?
how to select both cubes
I'm not sure what you mean?
@@SpeedTutor dw i got it now
can you please just upload the scripts in your vids, i cant code and i need atleast an hour even if you show it because theres always like lowercase and uppercase letters that i got wrong. adn then i need to open the script again and correct them, its so anoying. please upload scripts :D
Hey there, all of my scripts are on my Patreon and you can check out all the stuff on there too in the big list in my description :)
@@SpeedTutor Thank you!
It’s called DOOR, not DAW. Smh
I swear it's said in an almost identical way, haha. It's how people have mentioned the way I've said "Sauce" for "Source" but I literally can't say it any differently. Haha. It's exactly the same.
Yeah free..
Sadly it had to be moved from the asset store because of issues and it's now on my Patreon but this tutorial is absolutely free on CZcams here! :)
Be nice if it did not open all doors of that type!
This opens all of your doors?
@@SpeedTutor Yes. My environment is placed procedurally, So every door has the sane animator and scripts etc. Which means, all the doors open or close, when activated.
ITS NOT WORKING
What happens?
it’s not working.
Any errors?
@@SpeedTutor I don’t know, there are no errors, everything in the script is error-free, but it still doesn’t work.
Did you check out my video in the description about trigger event checklist? That might help? :)
FIRST EVERYTHING
Good job! :)
@@SpeedTutor I've put another game on ITCH.IO you dont fancy giving me some Constructive Criticism? if I give you the link?
video so baddd
I'm happy to listen to suggestions on making it better! :)
When I did the could I got Animator.GotoState: State could not be found, I was wondering if you could help me, I don't understand what this means
Did you give the correct name for your animation and in the code?
Can I have this work in a multiplayer game cause Iv been looking all over for a multiplayer door system for my game with photon.pun