码迷,mamicode.com
首页 > 编程语言 > 详细

unity学习--004:镜头控制器

时间:2015-01-22 09:20:09      阅读:240      评论:0      收藏:0      [点我收藏+]

标签:

这节介绍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的拖动,但有两个问题,只有当鼠标移动到屏幕的边缘而不是当前窗口的边缘,还有就是鼠标会脱界。

 

unity学习--004:镜头控制器

标签:

原文地址:http://www.cnblogs.com/ben1992/p/4191768.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!