Wayback Machinekoobas.hobune.stream
May JUN Jul
Previous capture 12 Next capture
2021 2022 2023
1 capture
12 Jun 22 - 12 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 Sader219 · Sep 28, 2015 at 06:36 AM · c#collisioncolliderobject

Picked up objects passes through objects

As the title says when ever i pick up an object in my game the picked up item phases through other objects such as the walls and floor. How can I stop this?

 using UnityEngine;
 using System.Collections;
 
 public class GrabAndDrop : MonoBehaviour {
     GameObject grabbedObject;
     float grabbedObjectSize;
     
     
     GameObject GetMouseHoverObject(float range)
     {
         Vector3 postion = gameObject.transform.position;
         RaycastHit raycastHit;
         Vector3 target = postion + Camera.main.transform.forward * range;
         if (Physics.Linecast(postion, target, out raycastHit))
             return raycastHit.collider.gameObject;
         return null;
     }
 
     void TryGrabObject(GameObject grabObject)
     {
         if (grabObject == null || !CanGrab(grabObject))
             return;
         grabbedObject = grabObject;
         grabbedObjectSize = grabObject.GetComponent<Renderer>().bounds.size.magnitude;
 
     }
     
     bool CanGrab(GameObject candidate)
     {
         return candidate.GetComponent<Rigidbody>() != null;
     }
     
     void DropObject()
     {
         if (grabbedObject == null)
             return;
         if(grabbedObject.GetComponent<Rigidbody>()!= null)
            grabbedObject.GetComponent<Rigidbody>().velocity = Vector3.zero;
         grabbedObject = null;
     }
     void Update() {
         if (Input.GetMouseButtonDown(1))
         {
             if (grabbedObject == null)
                 TryGrabObject(GetMouseHoverObject(5));
             else
                 DropObject();
         }
    
         if (grabbedObject != null)
         {
             Vector3 newPosition = gameObject.transform.position+Camera.main.transform.forward * grabbedObjectSize;
             grabbedObject.transform.position = newPosition;
         }    
     }
 }

Thanks in advance for anyone who could help me.

PS. I just started learning C# by following tutorials so an easy explanation would be nice.

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 Suddoha · Sep 29, 2015 at 08:55 PM

I assume you expect the object to stop at walls due to having the rigidbody?

Unfortunately your script works against the physics engine. You set the objects position directly. Even though the phyics engine tries to work against it (trying to apply collision forces) you'll end up what's being applied as position before the frame is rendered to the screen.

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

Answer by Eno-Khaon · Sep 29, 2015 at 11:23 PM

If you want your object to reliably interact with static colliders, the only good way to do that is to NOT use either of "Transform.position" or "Rigidbody.MovePosition()".

Most likely, the best course of action would be make the object float in front of you by applying physics forces (Rigidbody.AddForce()), but then you run the risk of the held object being capable of smashing other physics objects out of the way with extraordinary force (although, that would potentially happen to a greater degree with MovePosition).

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

4 People are following this question.

avatar image avatar image avatar image avatar image

Related Questions

How to know from which direction there is a collision with an object? in C# 1 Answer

Fist Punch Collision 0 Answers

Weapon System with collide detection (Helps with script pls)!!! 0 Answers

Instantiate 1 object after 2 objects collide. ( C# ) 1 Answer

OnCollisionEnter problem (RocketJump script) 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