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.
		
		
		
		
		
			
		
			
	
	
		
			42 lines
		
	
	
		
			1.9 KiB
		
	
	
	
		
			C#
		
	
		
		
			
		
	
	
			42 lines
		
	
	
		
			1.9 KiB
		
	
	
	
		
			C#
		
	
| 
								 
											1 year ago
										 
									 | 
							
								using System.Collections;
							 | 
						||
| 
								 | 
							
								using System.Collections.Generic;
							 | 
						||
| 
								 | 
							
								using System.Linq;
							 | 
						||
| 
								 | 
							
								using UnityEngine;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								namespace Autohand {
							 | 
						||
| 
								 | 
							
								    public class AutoHandPlayerForceArea : MonoBehaviour
							 | 
						||
| 
								 | 
							
								    {
							 | 
						||
| 
								 | 
							
								        public AutoHandPlayer player;
							 | 
						||
| 
								 | 
							
								        public float force = 1;
							 | 
						||
| 
								 | 
							
								        public ForceMode forceMode = ForceMode.Force;
							 | 
						||
| 
								 | 
							
								        public LayerMask layers = ~0;
							 | 
						||
| 
								 | 
							
								        Collider[] colliders = new Collider[30];
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        private void FixedUpdate()
							 | 
						||
| 
								 | 
							
								        {
							 | 
						||
| 
								 | 
							
								            var direction = new Vector3 { [player.bodyCollider.direction] = 1 };
							 | 
						||
| 
								 | 
							
								            var offset = player.bodyCollider.height / 2 - player.bodyCollider.radius;
							 | 
						||
| 
								 | 
							
								            var localPoint0 = player.bodyCollider.center - direction * offset;
							 | 
						||
| 
								 | 
							
								            var localPoint1 = player.bodyCollider.center + direction * offset;
							 | 
						||
| 
								 | 
							
								            var point0 = transform.TransformPoint(localPoint0);
							 | 
						||
| 
								 | 
							
								            var point1 = transform.TransformPoint(localPoint1); 
							 | 
						||
| 
								 | 
							
								            var r = transform.TransformVector(player.bodyCollider.radius, player.bodyCollider.radius, player.bodyCollider.radius);
							 | 
						||
| 
								 | 
							
								            var radius = Enumerable.Range(0, 3).Select(xyz => xyz == player.bodyCollider.direction ? 0 : r[xyz])
							 | 
						||
| 
								 | 
							
								                .Select(Mathf.Abs).Max();
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								            var overlaps = Physics.OverlapCapsuleNonAlloc(point0, point1, radius, colliders, layers);
							 | 
						||
| 
								 | 
							
								            for (int i = 0; i < overlaps; i++)
							 | 
						||
| 
								 | 
							
								            {
							 | 
						||
| 
								 | 
							
								                if (colliders[i].attachedRigidbody != null)
							 | 
						||
| 
								 | 
							
								                {
							 | 
						||
| 
								 | 
							
								                    if (colliders[i].attachedRigidbody != player.body && colliders[i].attachedRigidbody != player.handRight.body && colliders[i].attachedRigidbody != player.handLeft.body)
							 | 
						||
| 
								 | 
							
								                    {
							 | 
						||
| 
								 | 
							
								                        var adjustedForce = (colliders[i].transform.position - player.transform.position).normalized * force;
							 | 
						||
| 
								 | 
							
								                        adjustedForce.y /= 10f;
							 | 
						||
| 
								 | 
							
								                        colliders[i].attachedRigidbody.AddForce(adjustedForce, forceMode);
							 | 
						||
| 
								 | 
							
								                    }
							 | 
						||
| 
								 | 
							
								                }
							 | 
						||
| 
								 | 
							
								            }
							 | 
						||
| 
								 | 
							
								        }
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								}
							 |