【问题标题】:Unity 2D Raycasting from a Rotating Transform旋转变换的 Unity 2D 光线投射
【发布时间】:2014-09-02 20:31:04
【问题描述】:

我正在尝试在 Unity 2d 中创建一个视野。我正在从一个旋转的游戏对象投射光线投射,该游戏对象根据角色的视线旋转。然而,这个角色来回移动,所以当他们向左移动时,我将 transform.scale 设置为 -1。问题是当我这样做时,光线投射不会随着角色改变方向并保持指向正确!这是代码,我可能遗漏了一些明显的东西!任何帮助将不胜感激!

        Transform parent;
    float vision_angle_ = 50;
    float direction;
    Vector3 angle;
    Vector2 position;
    Quaternion q;
    int x = 10;

    void Start ()
    {
            parent = transform.parent;
    }

    void Update ()
    {

            direction = parent.GetComponent<Behaviour>().direction;

            angle = new Vector2 (x, Mathf.Tan ((vision_angle_) * .5f * Mathf.Deg2Rad) * x);
            q = Quaternion.AngleAxis (1, -transform.forward);       
            position = new Vector2 (transform.position.x, transform.position.y);

            for (float i = 0; i < 50; i++) {
                    angle = q * angle;
                    RaycastHit2D tile_hit = Physics2D.Raycast (position, transform.TransformDirection (angle), 10);
                    Debug.DrawRay (position, transform.TransformDirection (angle), Color.green);
            }       

    }

【问题讨论】:

    标签: c# unity3d 2d raycasting


    【解决方案1】:

    TransformDirection 不考虑转换的规模。您可以调整补偿:

    Vector2 direction = transform.TransformDirection(angle);
    if (transform.localScale.x < 0f) {
        direction.x = -direction.x;
    }
    
    RaycastHit2D tile_hit = Physics2D.Raycast(position, direction, 10);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-06-14
      • 2023-03-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多