纳金网

标题: 摄像头如何固定Z轴 [打印本页]

作者: sparten    时间: 2013-11-11 16:48
标题: 摄像头如何固定Z轴
我想实现摄像头原地旋转的动画,就类似人站在一个点观察周围环境的视角,z轴方向应该固定不动,下面的代码可以实现旋转,但是z轴会发生变化,也就是竖直方向会发生倾斜,通俗点说,比如我现在站在一个大厅里观察四面的环境,我要的效果是只转动脖子来观察,而下面的代码包含了歪动(倾斜)脖子的功能,我想把它去掉,但是一直没找到解决办法。该怎么修改,求大神支招。
void Update () {
                                     //鼠标左键按下,旋转摄像头
        if(Input.GetMouseButton(0))
{
            if (PreMouseLPos.x<=0)
            {
                PreMouseLPos =new Vector3(Input.mousePosition.x, Input.mousePosition.y, 0.0f);
            }
            else
            {//用Quaternion.Euler(new Vector3(x,y,0))
                Vector3 CurMouseLPos=new Vector3(Input.mousePosition.x, Input.mousePosition.y, 0.0f);
                Vector3 offset=CurMouseLPos-PreMouseLPos;
                Quaternion tt=Quaternion.Euler(offset);
               transform.Rotate(new Vector3(tt.y*20.0f,-tt.x*20.0f,0.0f));
               //transform.Rotate(tt.y*20.0f,-tt.x*20.0f,0.0f);
//              transform.localRotation = Quaternion.Euler((CurMouseLPos.y-PreMouseLPos.y)*20.0f,-(CurMouseLPos.x - PreMouseLPos.x)*20.0f,0.0f);

                PreMouseLPos=CurMouseLPos;
            }
        }
        else
        {
            PreMouseLPos=new Vector3(0.0f,0.0f,0.0f);
        }  


作者: sparten    时间: 2013-11-11 17:33
求大神啊!!能不能下班靠你们了
作者: 王者再临    时间: 2013-11-11 19:59
你这个语法上就有问题了啊,你用Mouse Look的脚本来改不是快些?
作者: ZackD    时间: 2013-11-11 20:42
王者再临 发表于 2013-11-11 19:59
你这个语法上就有问题了啊,你用Mouse Look的脚本来改不是快些?

安装Character Controller调用里面的Mouse Look试试
作者: sparten    时间: 2013-11-11 22:54
语法没有问题啊,编译可以通过的。mouselook那个我试过了,只能水平方向变动,变动的很不规律,感觉是跳着变的。改的话,应该是。加个X方向的旋转吧。但是旋转很不规律这个问题怎么破?万分感谢,跪舔大神
if (axes == RotationAxes.MouseXAndY)
                {
                        float rotationX = transform.localEulerAngles.y + Input.GetAxis("Mouse X") * sensitivityX;
                       
                        rotationY += Input.GetAxis("Mouse Y") * sensitivityY;
                        rotationY = Mathf.Clamp (rotationY, minimumY, maximumY);
                       
                        transform.localEulerAngles = new Vector3(-rotationY, rotationX, 0);
                }
                else if (axes == RotationAxes.MouseX)
                {
                        transform.Rotate(0, Input.GetAxis("Mouse X") * sensitivityX, 0);
                }
                else
                {
                        rotationY += Input.GetAxis("Mouse Y") * sensitivityY;
                        rotationY = Mathf.Clamp (rotationY, minimumY, maximumY);
                       
                        transform.localEulerAngles = new Vector3(-rotationY, transform.localEulerAngles.y, 0);
                }

作者: sparten    时间: 2013-11-11 22:58
ZackD 发表于 2013-11-11 20:42
安装Character Controller调用里面的Mouse Look试试

试过了啊。这个问题困扰我好多天了,改来改去就是不行,网上也找了好久的解决办法,未果啊。这个实现在unity3d里是不是算简单的?无奈啊,新手刚接触。
作者: sparten    时间: 2013-11-12 09:59
huhumark 发表于 2013-11-12 09:41
希望楼主已经解决问题

还木有,你有没有什么办法
作者: 王者再临    时间: 2013-11-12 11:00
Mouse Look不就是只有XY的作用吗?你直接套看看就知道了,也可以去掉Y
作者: sparten    时间: 2013-11-12 17:20
ZackD 发表于 2013-11-11 20:42
安装Character Controller调用里面的Mouse Look试试

不可以啊,不能上下旋转,水平方向的旋转也是跳跃性的,称不上是旋转。就没有别的办法了吗?困扰了我三天了
作者: apostle    时间: 2013-11-25 20:48
Please try this one, I hope it can help you

        private List<float> rotArrayX = new List<float>();
        float rotationX = 0F;
        float rotAverageX = 0F;
        public float sensitivityX = 15F;

                        rotAverageX = 0f;

                        rotationX += Input.GetAxis("Mouse X") * sensitivityX;

                        rotArrayX.Add(rotationX);

                        if (rotArrayX.Count >= frameCounter) {
                                rotArrayX.RemoveAt(0);
                        }
                        for(int i = 0; i < rotArrayX.Count; i++) {
                                rotAverageX += rotArrayX[i];
                        }
                        rotAverageX /= rotArrayX.Count;

                        Quaternion xQuaternion = Quaternion.AngleAxis (rotAverageX, Vector3.up);
                        transform.localRotation = originalRotation * xQuaternion;




欢迎光临 纳金网 (http://rs.narkii.com/club/) Powered by Discuz! X2.5