请选择 进入手机版 | 继续访问电脑版

查看: 186|回复: 0

[求助] 请大神来看看关于摄像机旋转的问题

[复制链接]

2

主题

23

帖子

155

贡献

初级UU族—2级

Rank: 2

积分
155
发表于 2017-5-19 02:02:22 | 显示全部楼层 |阅读模式
类似即时战略游戏的视角,按鼠标右键可以旋转视角,我的代码如下:
[C#] 纯文本查看 复制代码
void RotateView()
    {

        if (isRotating)
        {
            //Vector3 pos = transform.position;
            //Quaternion rot = transform.rotation;

            float mY = -Input.GetAxis("Mouse Y");

            float xa = transform.eulerAngles.x;

            //如果摄像机的x轴旋转角度超出范围,不进行旋转。
            if (( xa < 10 && mY < 0 ) || ( xa > 90 && mY > 0 ))
            {
                 return;
            }

            //摄像机围绕player的位置延player的Y轴旋转,旋转的速度为鼠标水平滑动的速度
            transform.RotateAround( m_tPos, new Vector3( 0, 1, 0 ), Input.GetAxis("Mouse X") * rotateSpeed);

            //摄像机围绕player的位置延自身的X轴旋转,旋转的速度为鼠标垂直滑动的速度
            transform.RotateAround( m_tPos, transform.right,  mY * rotateSpeed);

            if (Input.GetMouseButtonUp(1))
            {
                isRotating = false;
            }
        }
        else
        {
            if( Input.GetMouseButtonDown(1))
            {
                Ray r = Camera.main.ScreenPointToRay( new Vector2(Screen.width / 2, Screen.height / 2));
                RaycastHit hit;
                if( Physics.Raycast( r, out hit, LayerMask.GetMask("land")))
                {
                    m_tPos = hit.point;
                    isRotating = true;
                }
            }
        }
    }


问题出在视角旋转时角度限制问题上,我想让视角限制在10°和90°之间,用的这段代码:
[C#] 纯文本查看 复制代码
if (( xa < 10 && mY < 0 ) || ( xa > 90 && mY > 0 ))
{
return;
}

在大部分情况下,他是工作正常的!!但是,转着转着,他就不起作用了。。。甚至可以把地面转到天花板上。

请教大神,这是怎么回事,怎么破???

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

快速回复 返回顶部 返回列表