当前位置: 代码迷 >> .NET相关 >> unity学习-004:画面控制器
  详细解决方案

unity学习-004:画面控制器

热度:254   发布时间:2016-04-24 02:58:11.0
unity学习--004:镜头控制器

这节介绍Camera,在 角色控制器 

这一节中介绍了一点镜头和屏幕还有场景位置的皮毛,今天介绍几种Camera的引用场景。

1 跟随主角(单机rpg ,网游 )

  首先介绍常用的一种镜头跟随,参考一些常用的网游等,这一类的特点是以角色为中心,镜头跟随主角,并且可以通过右击滑动来旋转3D场景

  先处理跟随,

  先调整相机的大概位置,

  

  点击左上角调整相机角度,看下图摄像机

     

  

  调整好大概的角度,我设置的在猪脚的斜后方,然后给镜头添加脚本

private GameObject player;    private Vector3 cameraToPlayer;    void Awake()    {        //获取猪脚对象        player = GameObject.FindGameObjectWithTag(Tags.player);        //相机和角色的相对位置        cameraToPlayer = transform.position - player.transform.position;    }    void FixedUpdate()    {        //移动相机的位置跟随猪脚               相机当前位置              相机移动目标位置                      速度        transform.position = Vector3.Lerp(transform.position, player.transform.position + cameraToPlayer, 1.5f);    }

 这样相机就勉强算跟上猪脚了

 然后我们来设置通过鼠标划屏来移动镜头的朝向。

    private GameObject player;    private Vector3 cameraToPlayer;    void Awake()    {        //获取猪脚对象        player = GameObject.FindGameObjectWithTag(Tags.player);        //相机和角色的相对位置        cameraToPlayer = transform.position - player.transform.position;    }    void Update()    {              float mouseX;        float mouseY;        if(Input.GetMouseButton(0))         {             mouseX = Input.GetAxis("Mouse X") * 10;             mouseY = -Input.GetAxis("Mouse Y") * 10;                        transform.Rotate(mouseY, mouseX, 0);         }                           //移动相机的位置跟随猪脚                       相机当前位置              相机移动目标位置                                                速度        transform.position = Vector3.Lerp(transform.position, player.transform.position + cameraToPlayer, 1.5f);    }

 这里设置左键来调整camera的角度,虽然简单的实现了,当camera角度属性的Z一直变,实际使用效果不是很好。

 

2.第一视角(cf,cs)

  大三亿类的游戏以第一视角为主,很有代入感。

  要实现第一视角,要将Camera放在猪脚脑袋上

  

  然后调整下初始视野

  

  这样,camera算是猪脚的子对象了,会更随猪脚移动

  现在处理camera的角度,在大三亿中,进游戏后鼠标点会变成准心,我们根据鼠标的在屏幕的轨迹来改动camera的角度属性

  给camera添加脚本

void Update () {        transform.Rotate(-Input.GetAxis("Mouse Y"), Input.GetAxis("Mouse X"), 0);}

   是不是很简单,rotate的参数指围绕xyz轴旋转的角度。运行游戏后

真的很带感啊。

这里会有几个问题,1 镜头的角度需要微调,2 向后旋转会看到自己(这和初始位置有关)

 

3.第三视角(lol dota)

  最后介绍的一种视角就是著名的小学生系列上帝视角。这种视角的特点就是自上而下观看,触到屏幕的边缘时会拖动屏幕。

  我们先调整摄像机的角度。

  

  这里就不需要改动摄像机的角度,只要改变摄像机的location就行了,Y轴由滚轮控制

  先设置滚轮。

  

	 void Update()    {         //滚轮的返回值         if (Input.GetAxis("Mouse ScrollWheel") != 0)         {             //判断范围             if (transform.position.y +Input.GetAxis("Mouse ScrollWheel") >= 6.4 && transform.position.y + Input.GetAxis("Mouse ScrollWheel")<=9.4)             {                 transform.position += new Vector3(0, Input.GetAxis("Mouse ScrollWheel"), 0);             }         }    }

   然后设置屏幕的移动,当鼠标移动到边缘时移动Camera,想法就是先获取屏幕的大小,获取鼠标的位置,判断鼠标是否在边缘,然后获取鼠标的移动向量来移动Camera

 Resolution screen;    void Start()    {        screen = Screen.currentResolution;    }	 void Update()    {         //滚轮的返回值         if (Input.GetAxis("Mouse ScrollWheel") != 0)         {             //判断范围             if (transform.position.y +Input.GetAxis("Mouse ScrollWheel") >= 6.4 && transform.position.y + Input.GetAxis("Mouse ScrollWheel")<=9.4)             {                 transform.position += new Vector3(0, Input.GetAxis("Mouse ScrollWheel"), 0);             }         }         //判断鼠标位置        if(MouseScreen())        {            //移动Camera的position            transform.position += new Vector3(Input.GetAxis("Mouse X"), 0, Input.GetAxis("Mouse Y"));        }    }    private bool MouseScreen()     {         bool temp = false;         Vector2  tempPosition= Input.mousePosition;         if (tempPosition.x <2 || tempPosition.x > screen.width - 2)         {             temp = true;                     }         if (tempPosition.x < 2 || tempPosition.x > screen.width - 2)         {             temp = true;         }         return temp;     }

 这里能实现Camera的拖动,但有两个问题,只有当鼠标移动到屏幕的边缘而不是当前窗口的边缘,还有就是鼠标会脱界。

 

  相关解决方案