Search Unity

  1. Welcome to the Unity Forums! Please take the time to read our Code of Conduct to familiarize yourself with the forum rules and how to post constructively.
  2. Dismiss Notice

Resolved Opening a door

Discussion in 'Scripting' started by Laperen, Aug 15, 2023.

  1. Laperen

    Laperen

    Joined:
    Feb 1, 2016
    Posts:
    1,065
    An interactable door is relatively simple in VR, put the door on a hinge joint and the XR grab interactable takes care of the rest.

    I'm trying to do the same thing but with a raycast on a PC player, but am rather clueless about how the XR toolkit's XR grab interactable does what it does. Naively I tried Fixed joint, but all that did was pick up the door, not open it while still gripped by the hinges.

    Hoping for at the very least some direction on what to seach for. Preferably this is done within unity Physics.
     
  2. wideeyenow_unity

    wideeyenow_unity

    Joined:
    Oct 7, 2020
    Posts:
    728
    I'm pretty sure with anything, you always need to get the objects script(if locked, turn handle, etc...) so the door should just have a method in it like
    SetDoorRotation(float percent);
    , which then could be simplified by VR or PC raycast to say
    hit.position = found
    and
    player.rotation = this way
    .

    You could simplify it more, if you're not trying to make PC version with grab/move like VR, I would just say
    click = DoorOpen()
    .

    Ohh ok, that leads me to think you want speed relevant(slowly opening, throwing door open, etc...). So in that case, you would still need to get the doors script, and by motion calculated from
    hit.position
    would tell the doors physics to AddForce(left/right of door hinge).
     
  3. Kurt-Dekker

    Kurt-Dekker

    Joined:
    Mar 16, 2013
    Posts:
    36,563
    Start with tutorials for the commodity API you are using. There are many.

    If a series of Youtube tutorials targeting this feature is not useful to you, no mad wild scribblings in this little box will help you either. :)

    Tutorials and example code are great, but keep this in mind to maximize your success and minimize your frustration:

    How to do tutorials properly, two (2) simple steps to success:

    Step 1. Follow the tutorial and do every single step of the tutorial 100% precisely the way it is shown. Even the slightest deviation (even a single character!) generally ends in disaster. That's how software engineering works. Every step must be taken, every single letter must be spelled, capitalized, punctuated and spaced (or not spaced) properly, literally NOTHING can be omitted or skipped.

    Fortunately this is the easiest part to get right: Be a robot. Don't make any mistakes.
    BE PERFECT IN EVERYTHING YOU DO HERE!!


    If you get any errors, learn how to read the error code and fix your error. Google is your friend here. Do NOT continue until you fix your error. Your error will probably be somewhere near the parenthesis numbers (line and character position) in the file. It is almost CERTAINLY your typo causing the error, so look again and fix it.

    Step 2. Go back and work through every part of the tutorial again, and this time explain it to your doggie. See how I am doing that in my avatar picture? If you have no dog, explain it to your house plant. If you are unable to explain any part of it, STOP. DO NOT PROCEED. Now go learn how that part works. Read the documentation on the functions involved. Go back to the tutorial and try to figure out WHY they did that. This is the part that takes a LOT of time when you are new. It might take days or weeks to work through a single 5-minute tutorial. Stick with it. You will learn.

    Step 2 is the part everybody seems to miss. Without Step 2 you are simply a code-typing monkey and outside of the specific tutorial you did, you will be completely lost. If you want to learn, you MUST do Step 2.

    Of course, all this presupposes no errors in the tutorial. For certain tutorial makers (like Unity, Brackeys, Imphenzia, Sebastian Lague) this is usually the case. For some other less-well-known content creators, this is less true. Read the comments on the video: did anyone have issues like you did? If there's an error, you will NEVER be the first guy to find it.

    Beyond that, Step 3, 4, 5 and 6 become easy because you already understand!

    Finally, when you have errors, don't post here... just go fix your errors! Here's how:

    Remember: NOBODY here memorizes error codes. That's not a thing. The error code is absolutely the least useful part of the error. It serves no purpose at all. Forget the error code. Put it out of your mind.

    The complete error message contains everything you need to know to fix the error yourself.

    The important parts of the error message are:

    - the description of the error itself (google this; you are NEVER the first one!)
    - the file it occurred in (critical!)
    - the line number and character position (the two numbers in parentheses)
    - also possibly useful is the stack trace (all the lines of text in the lower console window)

    Always start with the FIRST error in the console window, as sometimes that error causes or compounds some or all of the subsequent errors. Often the error will be immediately prior to the indicated line, so make sure to check there as well.

    Look in the documentation. Every API you attempt to use is probably documented somewhere. Are you using it correctly? Are you spelling it correctly?

    All of that information is in the actual error message and you must pay attention to it. Learn how to identify it instantly so you don't have to stop your progress and fiddle around with the forum.

    Imphenzia: How Did I Learn To Make Games:

     
  4. Laperen

    Laperen

    Joined:
    Feb 1, 2016
    Posts:
    1,065
    You are nowhere close. I want to be able to "grab" the door and have it rotate relative to my grab point, as would happen in VR.

    This is easily done in VR through Unity's XR Toolkit. I am looking to replicate what the XR Toolkit does using raycast and physics for keyboard and mouse controls, but am stumped about how XR Toolkit does it, or alternatives which manage to do it this way.

    I am also not looking for alternative solutions such as tap to open.
     
  5. Laperen

    Laperen

    Joined:
    Feb 1, 2016
    Posts:
    1,065
    Did you even read my post, I already know how to use XR Toolkit's components for doors, and am hoping to mimic XR Toolkit's grab effect on doors with Unity physics.
     
  6. wideeyenow_unity

    wideeyenow_unity

    Joined:
    Oct 7, 2020
    Posts:
    728
    uh huh.. So just as I hinted to...

    Grab point will be raycast.hit.position. The doors rotation can be handled by either player, or preferably the door itself, which would be best referenced by a percent(-1.0f open outwards, 0f door closed, 1.0f open inwards). The force applied, or even just currentRotation would be calculated by player.rotation and relative distance from the initial "grab" world position to the current "grab" world position.

    This is of course making your own hard code for said function ^.

    I'm sure if you find the hard code on the XR Toolkit, and how it calculates the same function, would easily be a couple hundred lines of code. You are of course seeing "the easy one call" method, and think it's something simple. which it's not.

    But to put it into layman's terms, you have one rotation for door, and one modifier for rotation should be "here" with "this" speed. Sounds simple, I know, but when it comes to coding it all out, it never is just simple.
     
  7. Kurt-Dekker

    Kurt-Dekker

    Joined:
    Mar 16, 2013
    Posts:
    36,563
    Yes I did and I'm not going to retype everything about HingeJoints for the door, and SpringJoints to connect your hand to the door, or forces, constraints, or any one of the 27,000 other possible ways you could do physics.

    People have already made FAR better tutorials than anything I could hammer here and it sounds like you haven't even looked at one of them.

    Grabbing stuff, dragging bodies, picking up items, ALL of these things contain elements of what you need to know.

    At a bare minimum, first do it in 2D with sprites so you understand all the states of not being connected, being connected, breaking the connection, etc. This is all just learning your problem space.
     
    wideeyenow_unity likes this.
  8. Laperen

    Laperen

    Joined:
    Feb 1, 2016
    Posts:
    1,065
    I was asking for direction, and that was all you had to mention.
     
  9. Laperen

    Laperen

    Joined:
    Feb 1, 2016
    Posts:
    1,065
    It'd be RaycastHit.point, but I digress.
    Yes, and finding where they handle this in XR Toolkit has been headache inducing, hence why I have resorted to asking the forums.
     
  10. wideeyenow_unity

    wideeyenow_unity

    Joined:
    Oct 7, 2020
    Posts:
    728
    See! you're getting it! from one small piece of pseudo code to a small piece of actual code.. Man, at this rate, you'll have your own function written out in no time! :cool: