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 boddole · Apr 04, 2015 at 03:24 AM · c#collidermeshproceduralmeshcollider

Trouble with Inaccurate Mesh Collider

Hello everyone, I'm stumped as to why (sometimes) when I apply a Mesh Collider to a procedurally create mesh, it is sometimes completely correct, but other times completely inaccurate.

In Detail:

I'm creating a procedural mesh (effectively a trapezoid shape), where like a camera, I create a 'near clip plane', then figure out where the 'far clip plane' points should be based on desired vertical angles, desired horizontal angles, and desired depth.

The mesh itself is always correct (and debugging the building portion of the mesh shows all the correct points and angles. The problem is that sometimes, the mesh collider can be somewhat inaccurate or even totally inaccurate once it gets applied.

It seems the issues can occur with when certain changes to the input parameters are changed, like greatly increasing the depth for a given setting, or making the near clip plane smaller for a given setting. So either changing the angles, near clip plane size, or depth can make this happen.

I'm pretty sure I always end up with a convex shape, so I'm not sure why this is happening and have no clue on how to fix it. I am more than happy to attach any code that you think might be helpful to figuring this out and hopefully the attached pictures will illustrate what I'm talking about.

Any ideas as to what is happening are greatly appreciated, thank you for reading.

I've also made a quick example that you should be able to plug in and see. If you change the Z distance from 500 to 1000, you will see the type of failure I'm experiencing.

using UnityEngine; using System.Collections; using System.Linq;

public class zTest_CubeMaker : MonoBehaviour {

 public Material mat;

 void Start()
 {
     MeshFilter filter = gameObject.AddComponent< MeshFilter >();
     Mesh mesh = filter.mesh;
     mesh.Clear();
     
     #region Vertices
     //bottom
     Vector3 p0 = new Vector3(-0.5f, 0f, 0f); //bottom left close
     Vector3 p1 = new Vector3(0.5f, 0f, 0f); //bottom right close
     Vector3 p2 = new Vector3(20f, -25f, 500f); //bottom right far
     Vector3 p3 = new Vector3(-20f, -25f, 500f); //bottom right far

     //top
     Vector3 p4 = new Vector3(-0.5f, 1f, 0f); //top left close
     Vector3 p5 = new Vector3(0.5f, 1f, 0f); //top right close
     Vector3 p6 = new Vector3(20f, 200f, 500f); //top right far
     Vector3 p7 = new Vector3(-20f, 200f, 500f); //top left far
     
     Vector3[] vertices = new Vector3[]
     {
         // Bottom
         p0, p1, p2, p3,
         
         // Left
         p7, p4, p0, p3,
         
         // Front
         p4, p5, p1, p0,
         
         // Back
         p6, p7, p3, p2,
         
         // Right
         p5, p6, p2, p1,
         
         // Top
         p7, p6, p5, p4
     };
     #endregion
     
     #region Normales
     Vector3 up     = Vector3.up;
     Vector3 down     = Vector3.down;
     Vector3 front     = Vector3.forward;
     Vector3 back     = Vector3.back;
     Vector3 left     = Vector3.left;
     Vector3 right     = Vector3.right;
     
     Vector3[] normales = new Vector3[]
     {
         // Bottom
         down, down, down, down,
         
         // Left
         left, left, left, left,
         
         // Front
         front, front, front, front,
         
         // Back
         back, back, back, back,
         
         // Right
         right, right, right, right,
         
         // Top
         up, up, up, up
     };
     #endregion    
     
     #region UVs
     Vector2 _00 = new Vector2( 0f, 0f );
     Vector2 _10 = new Vector2( 1f, 0f );
     Vector2 _01 = new Vector2( 0f, 1f );
     Vector2 _11 = new Vector2( 1f, 1f );
     
     Vector2[] uvs = new Vector2[]
     {
         // Bottom
         _11, _01, _00, _10,
         
         // Left
         _11, _01, _00, _10,
         
         // Front
         _11, _01, _00, _10,
         
         // Back
         _11, _01, _00, _10,
         
         // Right
         _11, _01, _00, _10,
         
         // Top
         _11, _01, _00, _10,
     };
     #endregion
     
     #region Triangles
     int[] triangles = new int[]
     {
         // Bottom
         3, 1, 0,
         3, 2, 1,            
         
         // Left
         3 + 4 * 1, 1 + 4 * 1, 0 + 4 * 1,
         3 + 4 * 1, 2 + 4 * 1, 1 + 4 * 1,
         
         // Front
         3 + 4 * 2, 1 + 4 * 2, 0 + 4 * 2,
         3 + 4 * 2, 2 + 4 * 2, 1 + 4 * 2,
         
         // Back
         3 + 4 * 3, 1 + 4 * 3, 0 + 4 * 3,
         3 + 4 * 3, 2 + 4 * 3, 1 + 4 * 3,
         
         // Right
         3 + 4 * 4, 1 + 4 * 4, 0 + 4 * 4,
         3 + 4 * 4, 2 + 4 * 4, 1 + 4 * 4,
         
         // Top
         3 + 4 * 5, 1 + 4 * 5, 0 + 4 * 5,
         3 + 4 * 5, 2 + 4 * 5, 1 + 4 * 5,
         
     };
     #endregion
     
     mesh.vertices = vertices;
     mesh.normals = normales;
     mesh.uv = uvs;
     mesh.triangles = triangles;
     mesh.triangles = mesh.triangles.Reverse().ToArray();

     mesh.RecalculateBounds();
     mesh.Optimize();

     MeshRenderer mRender = gameObject.AddComponent<MeshRenderer>();
     mRender.material = mat;

     MeshCollider mCollide = gameObject.AddComponent<MeshCollider>();
     mCollide.convex = true;
 }

}

pic2.jpg (266.7 kB)
pic1.jpg (339.7 kB)
Comment
Add comment · Show 1
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 boddole · Apr 04, 2015 at 03:24 AM 0
Share

Two other images the show the issue.

pic3.jpg (304.8 kB)
pic4.jpg (263.4 kB)

0 Replies

· Add your reply
  • Sort: 

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

19 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

Related Questions

Mesh collider on procedurally generated mesh 1 Answer

Turn Off Mesh.Bake Scaled Mesh PhysX CollisionData ? 0 Answers

Mesh Collider on a 2D mesh creating a 3D box? 0 Answers

How to remove internal triangle/faces when combining mesh 0 Answers

How to make mesh having array of vertices? 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