Impact Raycasting
This section provides some simple examples for raycasting with Impact CFX.
For comprehensive documentation of ImpactRaycaster, please refer to the API Reference.
ImpactRaycaster is a helper class that can assist in playing effects from raycasts. There are two types of methods available for both 3D and 2D raycasts:
- QueueRaycast - This method is used to play an effect using the provided Impact Material.
- QueueRaycastInverted - This method is used to play an effect using the object that was hit by the raycast.
Code Examples
This first example will play en effect when the user left-clicks.
//Inspector field for the Impact Material to associate with the raycast public ImpactMaterialAuthoring Material; private void Update() { //When the player left-clicks, show a collision effect. if (Input.GetMouseButtonDown(0)) { //Get a ray from the cursor position Ray cursorRay = Camera.main.ScreenPointToRay(Input.mousePosition); //Do a raycast if (Physics.Raycast(cursorRay, out RaycastHit raycastHit)) { //A velocity to give to the raycast. float collisionVelocity = 10; //Call the QueueRaycast3D method with these parameters ImpactRaycaster.QueueRaycast3D( raycastHit, //The raycast hit info cursorRay.direction * collisionVelocity, //The velocity vector of the raycast Material, //The Impact Material for the raycast CollisionType.Collision, //Use the single-collision type. 0, //Raycast ID is not needed for CollisionType.Collision 1); //The number of materials to get from the object that was hit. } } }
This example is similar to the first, but uses the Inverted method to play an effect using the object that was hit instead. Note the use of ImpactTagMask as a serialized inspector field.
//Inspector field for the Impact Tag Mask to associate with the raycast public ImpactTagMask TagMask; private void Update() { //When the player left-clicks, show a collision effect. if (Input.GetMouseButtonDown(0)) { //Get a ray from the cursor position Ray cursorRay = Camera.main.ScreenPointToRay(Input.mousePosition); //Do a raycast if (Physics.Raycast(cursorRay, out RaycastHit raycastHit)) { //A velocity to give to the raycast. float collisionVelocity = 10; //Call the QueueRaycastInverted3D method with these parameters ImpactRaycaster.QueueRaycastInverted3D( raycastHit, //The raycast hit info cursorRay.direction * collisionVelocity, //The velocity vector of the raycast TagMask, //The Impact Tags for the raycast CollisionType.Collision, //Use the single-collision type. 0, //Raycast ID is not needed for CollisionType.Collision 2); //The number of materials to get from the object that was hit. } } }
Finally, this last example demonstrates using raycasting for a sliding effect.
//Inspector field for the Impact Material to associate with the raycast public ImpactMaterialAuthoring Material; //The previous raycast hit point for determining sliding velocity private Vector3 previousHitPoint; //Use FixedUpdate because Update may run multiple times before FixedUpdate, resulting in duplicate effects. private void FixedUpdate() { //When the player holds right-click, show a slide effect. if (Input.GetMouseButton(1)) { //Get a ray from the cursor position Ray cursorRay = Camera.main.ScreenPointToRay(Input.mousePosition); //Do a raycast if (Physics.Raycast(cursorRay, out RaycastHit raycastHit)) { //Determine the velocity by subtracting the current hit point from the previous hit point. Vector3 dragVelocity = (raycastHit.point - previousHitPoint) / Time.deltaTime; ImpactRaycaster.QueueRaycast3D( raycastHit, //The raycast hit info dragVelocity, //The velocity vector of the raycast Material, //The Impact Material for the raycast CollisionType.Slide, //Use the slide collision type. GetInstanceID(), //Raycast ID is needed here so that the slide audio can update properly. Use this script's instance ID. 1); //The number of materials to get from the object that was hit. //Set previous hit point. previousHitPoint = raycastHit.point; } } }