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);
 | 
						|
        }
 | 
						|
 | 
						|
    }
 | 
						|
}
 |