Stack boxes

Hello together,

i’m planning to develop a game where the CharacterController has to pick up, carry and stack packages to build stairs.

How can do this best ?

Needs every package a BoxCollider and a Rigidbody ?

Thanks an regards,
Chrissi

I tried it this way:

using UnityEngine;
using System.Collections;

public class packageMovement : MonoBehaviour {

public GameObject package;
public GameObject packageCol;
public bool carriesPackage = false;
public bool collidesWithPackage = false;

void Update () {

//auf den Boden legen
if(packageCol==null Input.GetKey(KeyCode.Y)){

carriesPackage = false;

BoxCollider packageBoxCollider = package.AddComponent(); //sonst lässt es sich nicht aufheben
packageBoxCollider.center = new Vector3(-0.1f,0.1f,0f);
packageBoxCollider.size = new Vector3(0.35f,0.25f,0.4f);

Rigidbody packageRigitBody = package.AddComponent();
packageRigitBody.mass = Random.Range(1,2);
packageRigitBody.isKinematic = true;//important
packageRigitBody.useGravity=true;

package.transform.position=
new Vector3(package.transform.position.x+1,0.1f,package.transform.position.z+1);

}

//stapeln wenn anderes Paket dort liegt
else if(packageCol!=null Input.GetKey(KeyCode.Y)){

carriesPackage = false;

BoxCollider packageBoxCollider = packageCol.AddComponent(); //sonst lässt es sich nicht aufheben
packageBoxCollider.center = new Vector3(-0.1f,0.1f,0f);
packageBoxCollider.size = new Vector3(0.35f,0.25f,0.4f);

Rigidbody packageRigitBody = packageCol.AddComponent();
packageRigitBody.mass = Random.Range(1,2);
packageRigitBody.isKinematic = true;//important
packageRigitBody.useGravity=true;

package.transform.position=
new Vector3(packageCol.transform.position.x+1,packageCol.transform.position.y,packageCol.transform.position.z+1);

}

//mit dem Paket laufen
else if(carriesPackage == true){
package.transform.position = transform.position + new Vector3(0.5f,transform.position.y,0.5f);
}

}

void OnControllerColliderHit(ControllerColliderHit hit){ //OnControllerColliderHit

if(hit.collider.gameObject.name.Contains(“packet”)){
packageCol = hit.collider.gameObject;
collidesWithPackage=true;
}

if(hit.collider.gameObject.name.Contains(“packet”) Input.GetKey(KeyCode.A) carriesPackage==false){
package = hit.collider.gameObject;
carriesPackage = true;
collidesWithPackage = false;
Destroy(package.transform.GetComponent(“Rigidbody”));
Destroy(package.transform.GetComponent(“BoxCollider”));
}

}

}

But when I want to stack the second package on a package which is on the ground, the carried package is fixed in the air … ?!?
Whats wrong here ?