private void OnParticleCollision(GameObject other) { collisions.Clear(); int count = attachedParticleSystem.GetCollisionEvents(other, collisions); if (SpawnControl == SpawnControl.ByReceiver) { for (int i = 0; i < count; i++) { DecalReceiverHelper.SendParticleCollisionEvent(collisions[i]); } } else if (SpawnControl == SpawnControl.BySpawnController) { for (int i = 0; i < count; i++) { var point = collisions[i].intersection; var normal = collisions[i].normal; var decal = SpawnController.SpawnDecal(); decal.transform.position = point + normal * Offset; decal.transform.up = normal; decal.transform.rotation *= Quaternion.AngleAxis(Random.value * 360f * RotationJitter, Vector3.up); if (ParentOnCollide) { decal.transform.SetParent(collisions[i].colliderComponent.transform); } } } }
void SpawnOnCollision(Collision collision) { if (string.IsNullOrEmpty(TagCheck) || collision.gameObject.CompareTag(TagCheck)) { if (SpawnControl == SpawnControl.ByReceiver) { DecalReceiverHelper.SendCollision(collision); } else if (SpawnControl == SpawnControl.BySpawnController) { var contact = collision.contacts[0]; var point = contact.point; var normal = contact.normal; var decal = SpawnController.SpawnDecal(); decal.transform.position = point + normal * Offset; decal.transform.up = normal; decal.transform.rotation *= Quaternion.AngleAxis(Random.value * 360f * RotationJitter, Vector3.up); if (ParentOnCollide) { decal.transform.SetParent(collision.transform); } } } }
private void Update() { bool shift = Input.GetKey(KeyCode.LeftShift); if ((Input.GetMouseButtonDown(0) && !shift) || (Input.GetMouseButton(0) && shift)) { if (UseGPURaycast) { Vector2 uv = Vector2.zero; uv.x = Input.mousePosition.x / RaycastCamera.pixelWidth; uv.y = Input.mousePosition.y / RaycastCamera.pixelHeight; bool isHitted = GPURaycast.RaycastToRegisteredTargets(RaycastCamera, uv, out hitInfo); if (isHitted) { DecalReceiverHelper.SendGPURaycastInfo(hitInfo); } } else { Ray r = RaycastCamera.ScreenPointToRay(Input.mousePosition); RaycastHit hitInfo; if (Physics.Raycast(r, out hitInfo)) { DecalReceiverHelper.SendPhysicsRaycastInfo(hitInfo); } } } }