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 HereticRusty · Sep 03, 2017 at 08:52 PM · c#collisionphysicscustom

C# Custom Collision Script (solved)

Okay, to clarify some things, I absolutely hate using Rigidbody physics. My disliking of them is a result of bugs, as the built-in physics engine is not optimum for 2.5d dungeon crawlers, at least from my experiments. I'm trying to write a custom collision engine to work around these bugs, so that it will be much more suited for what I'm trying to accomplish.

 using System.Collections;
 using System.Collections.Generic;
 using UnityEngine;
  
 public class Physics3D : MonoBehaviour {
     public bool gravEnabled;
 
     float vSpeed;
 
     public float gravity = 3.5f;
 
 
     // Use this for initialization
     void Start () {
 
     }
 
     // Update is called once per frame
     void Update(){
         // Enable or disable gravity
         GravityEnabled (true);
     }
 
     // Check if gravity is enabled 
     bool GravityEnabled(bool enabled){
         if (enabled == true)
             Gravity ();
 
         return enabled;
     }
 
     // Gravity function
     void Gravity(){
         transform.Translate(Vector3.down * vSpeed * gravity * Time.deltaTime, Space.World);
 
         if (Physics.Raycast(transform.position, Vector3.down, 1)) {
             vSpeed = 0;
         } else {
             vSpeed=1.5f;
         }
     }

     // This is where I need help
     void OnCollisionEnter(Collision other){
         foreach (ContactPoint c in other.contacts) {
             if (transform.position.z == c.thisCollider.transform.position.z - 0.5f) {
                     // Block the direction
             } //else if(other collision stuff)
         }
     }
 }

Now, this may be relatively simple, but simple is all I need. The question is, how can I have it correctly block directions without disabling the entire axis? (If the object that was blocking was to the left, the player could not walk walk to the right in my previous version of this script)

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 toddisarockstar · Sep 04, 2017 at 05:21 AM 0
Share

there are many games/situations that are better suited with custom hand written physics or components, but i'm not sure your situation necessitates replacing unity's physics... when set up properly they can work well bug free.

Anyways with the script you are showing you are definatly using unity's rigidbody components and unitys collider system. If you are going to use thier collision system then your movement script (that we cant see) should simply use velocity so stops are automatic.

1 Reply

· Add your reply
  • Sort: 
avatar image
1

Answer by ollie_payne · Sep 04, 2017 at 05:37 AM

If you're looking to block directions (presumably when you walk into a wall, object, etc.), you may want to look into using a LayerMask within you Raycast, as they make it so the Ray will only return true if it hits an object on a certain layer.

For instance create a Layer called "Solid" (or something similar) and change your Raycast to this:

 if (Physics.Raycast(transform.position, Vector3.down, 1, 1 << LayerMask.NameToLayer("YourLayerName"))) 
     {
          vSpeed = 0
     } 
     else 
     {
         vSpeed=1.5f;
     }

This should help you if I am understanding your issue correctly. Regardless, would love to know what works for you once you get it working.

Comment
Add comment · Show 6 · 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 HereticRusty · Sep 04, 2017 at 08:14 PM 0
Share

That's similar to what I need. The main issue here is that blocking one direction (setting the speed for that axis to 0) will not allow the player to move the other direction.

avatar image ollie_payne · Sep 04, 2017 at 08:19 PM 0
Share

Ok, I see. Alternatively you could store the direction of the Raycast within a Vector3 variable, and change the direction when you press a movement key. Hence "colliding" only in the direction of movement.

avatar image HereticRusty ollie_payne · Sep 04, 2017 at 11:17 PM 0
Share

I'll try that out, and post results. Sounds pretty solid

avatar image HereticRusty · Sep 05, 2017 at 12:16 AM 0
Share

I tried it, though I don't believe it will work properly, mainly because of the inaccuracy of the collisions. I may use built in if worst comes to worst.

avatar image HereticRusty HereticRusty · Sep 05, 2017 at 12:34 AM 0
Share

Originally, it was how hard it is to capture the "classic style" with it, as well as a couple bugs where gameobjects would fly across the map, and never stop. (probably shouldn't be developing it around that type of thing... but, you know.) Now that I've been working with it thought (increasing drag, disabling some of the axes), it's starting to show its strengths.

avatar image ollie_payne · Sep 05, 2017 at 12:26 AM 0
Share

That's surprising as that should work. What is it exactly that's putting you off using the built in collision system?

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

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

Related Questions

Restrict two objects from getting too close. 1 Answer

I want my Player to have collision physics 1 Answer

OnCollisionEnter() not firing when collision occurs 2 Answers

Show trajectory path a ball will take based on collision 0 Answers

Unity's Breakout Tutorial Ball Issue. 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