1
\$\begingroup\$

I'm trying to make a pong game where the player has to move both paddles. They are currently set as dynamic 2D Rigidbodies (collision detection continuous) and have a box collider (is NOT trigger) attached. The problem is the paddles won't collide with the surrounding box colliders I set on the camera, using the following script:

 using UnityEngine;
 using System.Collections;

  namespace UnityLibrary
     {
      public class EdgeCollider : MonoBehaviour 
      {


public float colDepth = 4f;
public float zPosition = 0f;
private Vector2 screenSize;
private Transform topCollider;
private Transform bottomCollider;
private Transform leftCollider;
private Transform rightCollider;
private Vector3 cameraPos;
// Use this for initialization
void Start () {
//Generate our empty objects
    topCollider = new GameObject().transform;
    bottomCollider = new GameObject().transform;
    rightCollider = new GameObject().transform;
    leftCollider = new GameObject().transform;

//Name our objects 
    topCollider.name = "TopCollider";
    bottomCollider.name = "BottomCollider";
    rightCollider.name = "RightCollider";
    leftCollider.name = "LeftCollider";

//Add the colliders
    topCollider.gameObject.AddComponent<BoxCollider2D>();
    bottomCollider.gameObject.AddComponent<BoxCollider2D>();
    rightCollider.gameObject.AddComponent<BoxCollider2D>();
    leftCollider.gameObject.AddComponent<BoxCollider2D>();

//Make them the child of whatever object this script is on, preferably on the Camera so the objects move with the camera without extra scripting
    topCollider.parent = transform;
    bottomCollider.parent = transform;
    rightCollider.parent = transform;
    leftCollider.parent = transform;

//Generate world space point information for position and scale calculations
    cameraPos = Camera.main.transform.position;
    screenSize.x = Vector2.Distance (Camera.main.ScreenToWorldPoint(new Vector2(0,0)),Camera.main.ScreenToWorldPoint(new Vector2(Screen.width, 0))) * 0.5f;
    screenSize.y = Vector2.Distance (Camera.main.ScreenToWorldPoint(new Vector2(0,0)),Camera.main.ScreenToWorldPoint(new Vector2(0, Screen.height))) * 0.5f;

//Change our scale and positions to match the edges of the screen...   
    rightCollider.localScale = new Vector3(colDepth, screenSize.y * 2, colDepth);
    rightCollider.position = new Vector3(cameraPos.x + screenSize.x + (rightCollider.localScale.x * 0.5f), cameraPos.y, zPosition);
    leftCollider.localScale = new Vector3(colDepth, screenSize.y * 2, colDepth);
    leftCollider.position = new Vector3(cameraPos.x - screenSize.x - (leftCollider.localScale.x * 0.5f), cameraPos.y, zPosition);
    topCollider.localScale = new Vector3(screenSize.x * 2, colDepth, colDepth);
    topCollider.position = new Vector3(cameraPos.x, cameraPos.y + screenSize.y + (topCollider.localScale.y * 0.5f), zPosition);
    bottomCollider.localScale = new Vector3(screenSize.x * 2, colDepth, colDepth);
    bottomCollider.position = new Vector3(cameraPos.x, cameraPos.y - screenSize.y - (bottomCollider.localScale.y * 0.5f), zPosition);
}

  }
 }

The ball collides with the paddles and bounces off as it should as well as collides with the surrounding box colliders and bounces off perfectly. However the paddles move right through the surrounding box colliders (EdgeColliders). Please note that I use the Touchscript package from the Unity Asset Store to control movement. It does not move the Rigidbody, it uses transform. Another thing to note is that when I make the paddles very light (0.0001 mass) and add gravity to them, they do collide with the edge colliders and don't go through the screen.

\$\endgroup\$

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Browse other questions tagged or ask your own question.