issue with bullet hole decal

I hope you can help me with this issue, as you can see in the image that i’ve attached below, when my bullet hits the wall (i’m using a raycast) a bullet hole decal is instantiated, but when the bullet hit wall really close to the edge, the decal looks ugly, the decal is out of the edge.

does anybody know how to solve this issue?

here is my code

var speed:float=500;
var lifeTime:float=3;
var bulletGravity:float=9.8;
var decalHitWall:GameObject;
var dustParticle:GameObject;
var floatInFrontOfWall : float = 0.01;
@HideInInspector
var moveDirection: Vector3;
@HideInInspector
var shortestSoFar: float;
@HideInInspector
var instantiatePoint:Vector3;
@HideInInspector
var instantiateRotation: Quaternion;
@HideInInspector
var foundHit: boolean=false;
@HideInInspector
var parentToAdd :Transform;
@HideInInspector


function Awake()
{
  transform.Rotate(0,0,0);
  moveDirection=transform.forward*speed;
  shortestSoFar=Mathf.Infinity;
  foundHit=false;
  
}

function Update()
{
  transform.rotation=Quaternion.LookRotation(moveDirection);
  var hits: RaycastHit[];
  hits=Physics.RaycastAll(transform.position,transform.forward,speed*Time.deltaTime);
  for(var hit in hits)
  {
    if(hit.transform.tag=="Level Parts")
    {
      if(Vector3.Distance(transform.position,hit.point)<shortestSoFar)
      {
      	instantiatePoint=hit.point+(hit.normal * (floatInFrontOfWall+Random.Range(0,0.001)));
        instantiateRotation=Quaternion.LookRotation(hit.normal);
        parentToAdd=hit.transform;
        shortestSoFar=Vector3.Distance(transform.position,hit.point);
        foundHit=true;
        
      }
    
    }
  }
  
  if(foundHit)
  {
  	var SpawnBulletHole: GameObject = Instantiate(decalHitWall,instantiatePoint,instantiateRotation);
  	Instantiate(dustParticle, instantiatePoint,instantiateRotation);
  	if(parentToAdd)
  		SpawnBulletHole.transform.parent=parentToAdd;
    Destroy(gameObject);}
    
    transform.position+=moveDirection*Time.deltaTime;
    //moveDirection.y-=bulletGravity*Time.deltaTime;
    lifeTime-=Time.deltaTime;
    if(lifeTime<0)
    {
       Destroy(gameObject);
    }
    
  
  
}

Why is there no help for this issue ANYWHERE?
If you did get it can you let me know?