Question by
NechyporukEvgen · Dec 11, 2015 at 11:31 PM ·
collisionraycastvector3raycastingcapsulecollider
I need to make rayscast in four edge areas depending on the direction
Hey. I need to make rayscast in four edge areas depending on the direction. One more, the length of the beam must be sufficient for the collision with the capsule. It is necessary to check the ray collision with other obstacles as he tends to the capsule. Please advise how to implement optimized. Thanks Now I realize this is not optimized in order to work. this my bad implement
Transform t_player = playerCapsuleCollider.transform;
Vector3 playerCapsuleCenter = t_player.TransformPoint(playerCapsuleCollider.center);
float playerCollRad = playerCapsuleCollider.radius;
float playerCollHalfH = playerCapsuleCollider.height * 0.5f;
Vector3 heading = playerCapsuleCenter - t_enemy.position;
float distance = heading.magnitude;
Vector3 direction = heading.normalized;
Vector3 directionHEdge = Vector3.Cross(direction, t_player.up).normalized; // l, r edge
Vector3 directionVEdge = Vector3.Cross(direction, -directionHEdge).normalized; // u, d edge
float rayHLeng = distance - playerCollRad - 0.1f; // l, r edge - this distance not correct. need calculate after update each direction
float rayVLeng = distance - playerCollHalfH - 0.1f; // u, d edge - this distance not correct. need calculate after update each direction
RaycastHit hitInfo;
if (Physics.Raycast(t_enemy.position, direction, out hitInfo, rayHLeng, lightLayers)) // center
{
Debug.DrawLine(t_enemy.position, hitInfo.point, Color.red);
direction = ((playerCapsuleCenter + directionHEdge * playerCollRad) - t_enemy.position).normalized;
if (Physics.Raycast(t_enemy.position, direction, out hitInfo, rayHLeng, lightLayers)) // right edge
{
Debug.DrawLine(t_enemy.position, hitInfo.point, Color.green);
direction = ((playerCapsuleCenter + -directionHEdge * playerCollRad) - t_enemy.position).normalized;
if (Physics.Raycast(t_enemy.position, direction, out hitInfo, rayHLeng, lightLayers)) // left edge
{
Debug.DrawLine(t_enemy.position, hitInfo.point, Color.blue);
direction = ((playerCapsuleCenter + directionVEdge * playerCollHalfH) - t_enemy.position).normalized;
if (Physics.Raycast(t_enemy.position, direction, out hitInfo, rayVLeng, lightLayers)) // up edge
{
Debug.DrawLine(t_enemy.position, hitInfo.point, Color.magenta);
direction = ((playerCapsuleCenter + -directionVEdge * playerCollHalfH) - t_enemy.position).normalized;
if (Physics.Raycast(t_enemy.position, direction, out hitInfo, rayVLeng, lightLayers)) // down edge
{
Debug.DrawLine(t_enemy.position, hitInfo.point, Color.yellow);
continue; // collision detect before ray hit player
}
}
}
}
}
13123.png
(114.5 kB)
Comment
Your answer
Follow this Question
Related Questions
Raycasting not detecting collider 0 Answers
Raycast not always detecting floor 1 Answer
Raycast does not seem to properly detect object it hit 0 Answers
I can't get RayCast to report the collider I want. 1 Answer
Blink, Dash, Raycasting 0 Answers