- Home /
Rotating object to face target, while being rotated to match terrain slope

In the image above
- the red vector is the spider's forward vector 
- the blue vector is the vector representing the direction between the spider and it's target 
In the code below, orientation is a vector that's representing the normal of the terrain, so that the spider gets aligned to it:
 Quaternion rotationNeeded = Quaternion.FromToRotation(Vector3.up, orientation);
 
 transform.rotation = Quaternion.RotateTowards(
             transform.rotation,
             rotationNeeded,
             RotationSpeed * Time.deltaTime
 );
My issue is that I cannot manage to make the spider face its target... When I add any code that would make it rotate towards it, then it's not aligned with the terrain's normals...
Answer by niuage · May 06, 2020 at 04:01 PM
Found the solution, thanks to stackoverflow and this answer here: https://forum.unity.com/threads/look-at-object-while-aligned-to-surface.515743/ (which solves this issue https://i.imgur.com/NPwHzpx.png)
 
    // target is the player
    // transform is the spider
                
                Vector3 orientation = GetTerrainNormal();
 Vector3 directionToTarget = (target.position - transform.position).Y(0);
 float d = Vector3.Dot(directionToTarget, orientation);
 directionToTarget -= d * orientation;
 if (directionToTarget.sqrMagnitude > 0.00001f) {
     directionToTarget.Normalize();
     Quaternion rotationNeeded = Quaternion.LookRotation(directionToTarget, orientation);
     transform.rotation = Quaternion.RotateTowards(
         transform.rotation,
         rotationNeeded,
         xRotationSpeed * Time.deltaTime
     );
 }
Maybe it'll be useful to someone one day :D
Your answer
 
 
              koobas.hobune.stream
koobas.hobune.stream 
                       
                
                       
			     
			 
                