Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/unity3d/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sqlite/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 我怎样才能找到游戏对象所看方向的2D方向向量_C#_Unity3d_Vector_Quaternions - Fatal编程技术网

C# 我怎样才能找到游戏对象所看方向的2D方向向量

C# 我怎样才能找到游戏对象所看方向的2D方向向量,c#,unity3d,vector,quaternions,C#,Unity3d,Vector,Quaternions,以下是重要的内容: private RaycastHit2D[] FillRaycastArray() { List<RaycastHit2D> RaycastList = new List<RaycastHit2D>(); Vector2 rayOrigin = new Vector2(animalTransform.position.x, animalTransform.position.y); anima

以下是重要的内容:

private RaycastHit2D[] FillRaycastArray()
    {

        List<RaycastHit2D> RaycastList = new List<RaycastHit2D>();

        Vector2 rayOrigin = new Vector2(animalTransform.position.x, animalTransform.position.y);

        animalTransform.rotation.ToAngleAxis(out float angle, out Vector3 axis);

        for (int i = 0; i < genes.sightQuality; i++)
        {
            float rightEyeAngle = angle - (genes.sightAngle / 2 + genes.sightWidth * i);
            float leftEyeAngle = angle + (genes.sightAngle / 2 + genes.sightWidth * i);

            Vector2 rightEyeDirectionVector = new Vector2((float)-Math.Sin(Mathf.Deg2Rad * rightEyeAngle), (float)Math.Cos(Mathf.Deg2Rad * rightEyeAngle));
            Vector2 leftEyeDirectionVector = new Vector2((float)-Math.Sin(Mathf.Deg2Rad * leftEyeAngle), (float)Math.Cos(Mathf.Deg2Rad * leftEyeAngle));

            Debug.DrawRay(rayOrigin, rightEyeDirectionVector, Color.red);
            Debug.DrawRay(rayOrigin, leftEyeDirectionVector, Color.red);

            int predatorLayer = 1 << 8;
            predatorLayer = ~predatorLayer;

            RaycastHit2D hitR = Physics2D.Raycast(rayOrigin, rightEyeDirectionVector, 20f, predatorLayer);
            RaycastHit2D hitL = Physics2D.Raycast(rayOrigin, leftEyeDirectionVector, 20f, predatorLayer);
            RaycastList.Add(hitR);
            RaycastList.Add(hitL);
        }

        RaycastHit2D[] raycastArray = RaycastList.ToArray();

        return raycastArray;
    }
private RaycastHit2D[]FillRaycastArray()
{
List RaycastList=新列表();
Vector2光线原点=新Vector2(animalTransform.position.x,animalTransform.position.y);
动物转换。旋转。到角轴(外浮动角度,外矢量3轴);
for(int i=0;iint traderlayer=1使用
Transform.TransformDirection
[*见下文]将眼睛的“向前”方向从局部空间转换为世界空间,然后使用
四元数.AngleAxis
创建左右旋转以查找眼睛方向

Vector2 frontLocalDirection = new Vector2(0.7071f,0.7071f); 
// or whatever the local "front" direction is.

private RaycastHit2D[] FillRaycastArray()
{
    List<RaycastHit2D> RaycastList = new List<RaycastHit2D>();

    Vector2 rayOrigin = animalTransform.position;

    // will be converted to Vector2 later
    Vector3 frontWorldDirection = animalTransform.TransformDirection(
            frontLocalDirection);

    for (int i = 0; i < genes.sightQuality; i++)
    {
        float eyeAngleOffset = genes.sightAngle / 2 + genes.sightWidth * i;

        Vector2 rightEyeDirectionVector = Quaternion.AngleAxis(eyeAngleOffset, 
                Vector3.back) * frontWorldDirection;
        Vector2 leftEyeDirectionVector = Quaternion.AngleAxis(eyeAngleOffset, 
                Vector3.forward) * frontWorldDirection;

        Debug.DrawRay(rayOrigin, rightEyeDirectionVector, Color.red);
        Debug.DrawRay(rayOrigin, leftEyeDirectionVector, Color.red);

        int predatorLayer = 1 << 8;
        predatorLayer = ~predatorLayer;

        RaycastHit2D hitR = Physics2D.Raycast(rayOrigin, rightEyeDirectionVector, 20f,
                predatorLayer);
        RaycastHit2D hitL = Physics2D.Raycast(rayOrigin, leftEyeDirectionVector, 20f,
                predatorLayer);
        RaycastList.Add(hitR);
        RaycastList.Add(hitL);
    }

    RaycastHit2D[] raycastArray = RaycastList.ToArray();

    return raycastArray;
}

Transform.forward
。我试过了,但是如果我得到的只是指向前方的矢量3,我就不能通过sightAngle和sightWitdh来改变角度。你的问题是“如何找到游戏对象所看方向的2D方向矢量?”这就是
forward
提供的功能。你说得对,我的错。我这里的第一个问题。@3Dave在2D游戏的典型设置中,
Vector2 foobar=transform。forward
通常会导致
foobar==Vector2.zero
,这不是很有用:)
private RaycastHit2D[] FillRaycastArray()
{
    List<RaycastHit2D> RaycastList = new List<RaycastHit2D>();

    Vector2 rayOrigin = animalTransform.position;

    // will be converted to Vector2 later
    Vector3 frontWorldDirection = animalTransform.up;

    for (int i = 0; i < genes.sightQuality; i++)
    {
        float eyeAngleOffset = genes.sightAngle / 2 + genes.sightWidth * i;

        Vector2 rightEyeDirectionVector = Quaternion.AngleAxis(eyeAngleOffset,
                Vector3.back) * frontWorldDirection;
        Vector2 leftEyeDirectionVector = Quaternion.AngleAxis(eyeAngleOffset, 
                Vector3.forward) * frontWorldDirection;

        Debug.DrawRay(rayOrigin, rightEyeDirectionVector, Color.red);
        Debug.DrawRay(rayOrigin, leftEyeDirectionVector, Color.red);

        int predatorLayer = 1 << 8;
        predatorLayer = ~predatorLayer;

        RaycastHit2D hitR = Physics2D.Raycast(rayOrigin, rightEyeDirectionVector, 20f,
                predatorLayer);
        RaycastHit2D hitL = Physics2D.Raycast(rayOrigin, leftEyeDirectionVector, 20f,
                predatorLayer);
        RaycastList.Add(hitR);
        RaycastList.Add(hitL);
    }

    RaycastHit2D[] raycastArray = RaycastList.ToArray();

    return raycastArray;
}