【问题标题】:Rotate a position according to forward根据forward旋转位置
【发布时间】:2019-02-22 22:33:05
【问题描述】:

我目前正在制作一个攀爬检测系统,它可以跟随玩家并检测玩家可以攀爬的最近点。我有一个根据玩家位置投射光线的游戏对象。光线随玩家移动,但不旋转。如何让它们随播放器旋转?

这是绘制光线的代码

void Update()
{
    //Debug.DrawRay();
    raySpace = surfaceWidth / definition;
    raySpaceDividedByTwo = raySpace / 2;
    surfaceWidthDividedByTwo = surfaceWidth / 2;

    for (int i = 0; i < definition; i++)
    {
        for (int y = 0; y < definition; y++)
        {
            raycastCoordinates = new Vector3(
                (this.transform.position.x + (i * raySpace) + raySpaceDividedByTwo) - surfaceWidthDividedByTwo,
                 this.transform.position.y,
                (this.transform.position.z + (y * raySpace) + raySpaceDividedByTwo) - surfaceWidthDividedByTwo);

            //offset = Quaternion.AngleAxis(Input.GetAxis("Mouse X") * turnSpeed, Vector3.up) * offset;
            //raycastCoordinates = Quaternion.AngleAxis(this.transform.rotation.y, Vector3.up) * raycastCoordinates;

            raycastUpHitsList.Add(Physics.RaycastAll(raycastCoordinates, Vector3.up, detectionHeight, LayerMask.GetMask("Water")));
            Debug.DrawRay(raycastCoordinates, Vector3.up * detectionHeight, Color.green, 0.1f);
        }
    }
}

【问题讨论】:

    标签: unity3d rotation raycasting


    【解决方案1】:

    这应该可行:

    void Update()
    {
        //Debug.DrawRay();
        raySpace = surfaceWidth / definition;
        raySpaceDividedByTwo = raySpace / 2;
        surfaceWidthDividedByTwo = surfaceWidth / 2;
    
        for (int i = 0; i < definition; i++)
        {
            for (int y = 0; y < definition; y++)
            {
                raycastCoordinates = new Vector3(
                    (this.transform.position.x + (i * raySpace) + raySpaceDividedByTwo) - surfaceWidthDividedByTwo,
                     this.transform.position.y,
                    (this.transform.position.z + (y * raySpace) + raySpaceDividedByTwo) - surfaceWidthDividedByTwo) * transform.forward;//if this doesn't work, try transform.right instead
    
                //offset = Quaternion.AngleAxis(Input.GetAxis("Mouse X") * turnSpeed, Vector3.up) * offset;
                //raycastCoordinates = Quaternion.AngleAxis(this.transform.rotation.y, Vector3.up) * raycastCoordinates;
    
                raycastUpHitsList.Add(Physics.RaycastAll(raycastCoordinates, Vector3.up, detectionHeight, LayerMask.GetMask("Water")));
                Debug.DrawRay(raycastCoordinates, Vector3.up * detectionHeight, Color.green, 0.1f);
            }
        }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-07-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多