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
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 ?