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 AxionJaxon · Oct 26, 2012 at 04:01 AM · collisionphysicsraycast

Physics.Raycast doesn't work with all collidables

For the sake of making a third person camera that makes sure there are no "scenery" objects between the player and itself, I have created a CameraControls C# script based on the initial MouseLook script that comes with Unity. Initially, I made a camera that moved logically and stayed focus on the player character:

 float rotationX = transform.localEulerAngles.y + Input.GetAxis("Mouse X") * sensitivityX;
     
 rotationY += Input.GetAxis("Mouse Y") * sensitivityY;
 rotationY = Mathf.Clamp (rotationY, minimumY, maximumY);
 
 float theta = Mathf.Deg2Rad * rotationX;
 float alpha = Mathf.Deg2Rad * rotationY;
             
 float currentLocation = new Vector3( -1 * Mathf.Sin (theta) * Mathf.Cos (alpha), -1 * Mathf.Sin (alpha), -1 * Mathf.Cos (theta) * Mathf.Cos (alpha));
 
 transform.localPosition = currentLocation * cameraDistance;
 
 transform.localEulerAngles = new Vector3(-rotationY, rotationX, 0);



Next, I added a Physics.Raycast to find any collisions between where the camera would be (at maximum distance) and where there player is:

 ...
 
 currentLocation = new Vector3(...); // same code as before
 
 Ray ray = new Ray(center, currentLocation);
 
 RaycastHit hit;
 
 if(Physics.Raycast(ray, out hit, cameraDistance))
 {
     transform.localPosition = currentLocation * (ray.origin - hit.point).magnitude;
 } 
 else
 {
     transform.localPosition = currentLocation * cameraDistance;
 }
 
 transform.localEulerAngles = ... // same code as before
 ...



The problem I'm having is that the camera is working well detecting the cube I have placed and stretched to function as a floor, but doesn't interact with any of the cubes I have similarly stretched and placed to act as walls. I have made sure that my cubes are all in the same layer, and are not being ignored by the raycast.

The raycast also doesn't seem to be working well with selective layers either in other tests, but I thought I might solve a more fundamental problem before moving on to that.

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

Answer by Owen-Reynolds · Oct 26, 2012 at 05:56 PM

Just one thing that stands out. RayCasts use world positions, but your `currentLocation`, which you build the ray from, is a local position (of your camera to the player.) Ex: if the player is at x=100, with the camera at 90, then currentLoc is -10, which aims the ray off the left side of the world.

The ray should be something roughly like `Ray r = new Ray(transform.position, transform.rotation);`. Of course, it should really start ahead of the camera by the minimum draw distance.

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

10 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

Related Questions

Raycast to Terrain (Conditional Statements) 1 Answer

Prevent shooting when gun is inside wall 1 Answer

Ray is not rotating with Object using Physics.Raycast 1 Answer

Surface with hole and Raycast - Which collider 1 Answer

How do you perform a stationary SphereCastAll? 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