You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
39 lines
1.9 KiB
C#
39 lines
1.9 KiB
C#
using UnityEngine;
|
|
|
|
namespace Autohand.Demo{
|
|
public class CubeBreak : MonoBehaviour{
|
|
public float force = 10f;
|
|
Vector3[] offsets = { new Vector3(0.25f, 0.25f, 0.25f), new Vector3(-0.25f, 0.25f, 0.25f), new Vector3(0.25f, 0.25f, -0.25f), new Vector3(-0.25f, 0.25f, -0.25f),
|
|
new Vector3(0.25f, -0.25f, 0.25f), new Vector3(-0.25f, -0.25f, 0.25f), new Vector3(0.25f, -0.25f, -0.25f), new Vector3(-0.25f, -0.25f, -0.25f),};
|
|
[ContextMenu("Break")]
|
|
public void Break() {
|
|
for(int i = 0; i < 8; i++) {
|
|
var smallerCopy = Instantiate(gameObject, transform.position, transform.rotation);
|
|
foreach(var joint in smallerCopy.GetComponents<FixedJoint>()) {
|
|
Destroy(joint);
|
|
}
|
|
try{
|
|
smallerCopy.transform.parent = transform;
|
|
}
|
|
catch { }
|
|
smallerCopy.transform.localPosition += offsets[i];
|
|
smallerCopy.transform.parent = null;
|
|
smallerCopy.transform.localScale = transform.localScale/2f;
|
|
smallerCopy.layer = LayerMask.NameToLayer(Hand.grabbableLayerNameDefault);
|
|
var body = smallerCopy.GetComponent<Rigidbody>();
|
|
body.ResetCenterOfMass();
|
|
body.ResetInertiaTensor();
|
|
body.velocity = GetComponent<Rigidbody>().velocity;
|
|
body.AddRelativeForce(transform.rotation*(offsets[i]*force), ForceMode.Impulse);
|
|
body.AddRelativeTorque(transform.rotation*(offsets[i]*force + Vector3.one*(Random.value/3f)), ForceMode.Impulse);
|
|
body.mass /= 2;
|
|
smallerCopy.GetComponent<Grabbable>().jointBreakForce /= 2;
|
|
if(smallerCopy.transform.localScale.x < 0.03f)
|
|
smallerCopy.GetComponent<Grabbable>().singleHandOnly = true;
|
|
}
|
|
Destroy(gameObject);
|
|
}
|
|
|
|
}
|
|
}
|