コード例 #1
0
ファイル: JSMovePath.cs プロジェクト: gangadeya/HelloWorld
 private Vector3 GetCharacterDirectllyColliderVector(JSCharacterCollider collider, Vector3 start, Vector3 end, float radius)
 {
     crossPoint.Clear();
     LineCircleCrossPoint(start, end, collider.ColliderCenterTransform.position, collider.SelfCollider.radius + radius);
     if (crossPoint.Count > 0)
     {
         return(crossPoint [0] + Vector3.Normalize(start - end) * Mathf.Sqrt(Mathf.Pow(collider.SelfCollider.radius + radius, 2.0f) - Mathf.Pow(Vector3.Distance(collider.colliderCenterTransform.position, crossPoint [0]), 2.0f)));
     }
     return(end);
 }
コード例 #2
0
ファイル: JSMovePath.cs プロジェクト: gangadeya/HelloWorld
    private Vector3 ClosestVectorBetweenCharacterAndObstacle(JSCharacterCollider character, JSObstacleCollider obstacle, Vector3 start, float radius, List <Vector3> vectorInDirection)
    {
        Vector3[] obstacleVertexs = new Vector3[4];
        Vector3   closestVector   = Vector3.zero;
        float     closestDistance = 0;
        float     vectorDistance  = 0;

        obstacleVertexs [0] = new Vector3(obstacle.SelfCollider.size.x * 0.5f + radius,
//			obstacle.ColliderCenterTransform.position.y - start.y,
                                          0,
                                          obstacle.SelfCollider.size.z * 0.5f + radius);
        obstacleVertexs [1] = new Vector3(obstacle.SelfCollider.size.x * 0.5f + radius,
//			obstacle.ColliderCenterTransform.position.y - start.y,
                                          0,
                                          -obstacle.SelfCollider.size.z * 0.5f - radius);
        obstacleVertexs [2] = new Vector3(-obstacle.SelfCollider.size.x * 0.5f - radius,
//			obstacle.ColliderCenterTransform.position.y - start.y,
                                          0,
                                          obstacle.SelfCollider.size.z * 0.5f + radius);
        obstacleVertexs [3] = new Vector3(-obstacle.SelfCollider.size.x * 0.5f - radius,
//			obstacle.ColliderCenterTransform.position.y - start.y,
                                          0,
                                          -obstacle.SelfCollider.size.z * 0.5f - radius);

        obstacleVertexs [0] = obstacle.ColliderCenterTransform.TransformPoint(obstacleVertexs [0]);
        obstacleVertexs [1] = obstacle.ColliderCenterTransform.TransformPoint(obstacleVertexs [1]);
        obstacleVertexs [2] = obstacle.ColliderCenterTransform.TransformPoint(obstacleVertexs [2]);
        obstacleVertexs [3] = obstacle.ColliderCenterTransform.TransformPoint(obstacleVertexs [3]);

        for (int i = 0; i < obstacleVertexs.Length; ++i)
        {
            if (!vectorInDirection.Contains(obstacleVertexs [i]))
            {
                closestVector = obstacleVertexs [i];
                break;
            }
        }
        closestDistance = Vector3.Distance(start, closestVector);
        vectorDistance  = 0;
        for (int i = 0; i < obstacleVertexs.Length; ++i)
        {
            if (!vectorInDirection.Contains(obstacleVertexs [i]) &&
                CheckColliderVector(obstacleVertexs [i], character.SelfCollider.bounds.size))
            {
                vectorDistance = Vector3.Distance(start, obstacleVertexs [i]);
                if (vectorDistance < closestDistance)
                {
                    closestDistance = vectorDistance;
                    closestVector   = obstacleVertexs [i];
                }
            }
        }

        return(closestVector);
    }
コード例 #3
0
ファイル: JSMovePath.cs プロジェクト: gangadeya/HelloWorld
    private Vector3 ClosestVectorBetweenCharacterAndCharacter(JSCharacterCollider character, JSCharacterCollider obstacle, Vector3 start, Vector3 end, List <Vector3> vectorInDirection)
    {
        Vector3[] obstacleVertexs       = new Vector3[2];
        Vector3   centerDiretcionVector = Vector3.Normalize(obstacle.ColliderCenterTransform.position - character.ColliderCenterTransform.position);
        Vector3   closestVector         = Vector3.zero;
        float     closestDistance       = 0;
        float     vectorDistance        = 0;
        float     characterRadius       = Sqrt2 * character.SelfCollider.radius;
        float     obstacleRadius        = Sqrt2 * obstacle.SelfCollider.radius;

        obstacleVertexs [0] = obstacle.ColliderCenterTransform.position + VerticalQuaternionUp * centerDiretcionVector * (obstacleRadius + characterRadius);
        obstacleVertexs [1] = obstacle.ColliderCenterTransform.position + VerticalQuaternionDown * centerDiretcionVector * (obstacleRadius + characterRadius);

        for (int i = 0; i < obstacleVertexs.Length; ++i)
        {
            if (!vectorInDirection.Contains(obstacleVertexs [i]) &&
                CheckColliderVector(obstacleVertexs [i], character.SelfCollider.bounds.size))
            {
                closestVector = obstacleVertexs [i];
                break;
            }
        }
        closestDistance = Vector3.Distance(end, closestVector);
        for (int i = 0; i < obstacleVertexs.Length; ++i)
        {
            if (!vectorInDirection.Contains(obstacleVertexs [i]) &&
                CheckColliderVector(obstacleVertexs [i], character.SelfCollider.bounds.size))
            {
                vectorDistance = Vector3.Distance(end, obstacleVertexs [i]);
                if (vectorDistance < closestDistance)
                {
                    closestDistance = vectorDistance;
                    closestVector   = obstacleVertexs [i];
                }
            }
        }

        return(closestVector);
    }