# unity place object at exact bottom of capsule collider

I'm trying to make a 3D game with unity using the character controller and I'm just parenting the model to it and rotating only the model when moving for my character.

The problem is that I want to programmatically load in this setup by creating the capsule etc. with code, but by default when my mesh is loaded, it's halfway offset, so I try to move it down by half of the capsule's height, but for some reason the height I'm getting from the renderer or capsule collider bounds is always a little too big and half of the height is always a little BELOW the bottom of the capsule collider.

This can be seen by just me testing to position a small cylinder (was supposed to be the new origin of the capsule to get the origin to be at the bottom, but that's another story), and I set it to EXACTLY HALF OF THE HEIGHT but for some reason it's a little bit lower, here's the pic:

as you can see, the cylinder is for some reason a little bit BELOW the bottom of the capsule, but I want it to be exactly at the bottom, so it can be the new origin (and so I can position the player on top of things really easily).

Here's the code I use to generate the player, capsule, and new origin:

    void makePlayer()
{
GameObject player = GameObject.CreatePrimitive(PrimitiveType.Capsule);
player.name = "Player";

//      player.GetComponent<MeshRenderer>().enabled = false;//.material.color = new Color(1f, 0.5f, 0.6f, 1f);
//   player.tag = "Player";

GameObject chassid = Instantiate(mesh);
chassid.name = "chassid";

chassid.GetComponent<Animator>().runtimeAnimatorController = playerMov;
chassid.transform.GetChild(1).tag = "Player";

string pathToMaterial = "Materials/playerMat";
chassid.transform.GetChild(1).GetComponent<SkinnedMeshRenderer>().material = playerMat;

Vector3 capsuleSize = player.GetComponent<Renderer>().bounds.size;
Vector3 chassidSize = chassid.GetComponentsInChildren<Renderer>()[0].bounds.size;
chassid.transform.parent = player.transform;
Vector3 tempPos = chassid.transform.localPosition;

tempPos.y -= (chassidSize.y / 2);// + chassidSize.y / 12;

chassid.transform.localPosition = tempPos;
GameObject origin = GameObject.CreatePrimitive(PrimitiveType.Cylinder);
origin.transform.localScale = new Vector3(0.1f, 0.1f, 0.1f);
origin.transform.position = player.transform.position - new Vector3(0,player.GetComponent<CapsuleCollider>().bounds.size.y / 2,0);
player.transform.parent = origin.transform;
//Camera
GameObject tempCam = GameObject.Find("Main Camera");
GameObject mainCamera;
if(tempCam == null)
{
mainCamera = new GameObject("Main Camera");