unity3d实现LOL中的相机控制功能

using UnityEngine;  
using System.Collections;  
  
public class CameraController : MonoBehaviour {  
  
    private int SightDistancespeed = 15;  
    private bool CameraIsLock = false; //相机是否锁定  
    private float RectSize = 50f; //矩形大小  
    private float CameraMoveSpeed=0.5f; //相机移动速度  
    private Transform Player; //player的Transform  
    private float CamerafieldOfView=60; //相机的锥形视野范围  
    private Camera camera; //相机  
  
    //屏幕边缘四个矩形  
    private Rect RectUp;  
    private Rect RectDown;  
    private Rect RectLeft;  
    private Rect RectRight;  
    void Start () {  
        //实例化屏幕边缘的四个矩形出来  
         RectUp = new Rect(0,Screen.height-RectSize,Screen.width,Screen.height);  
         RectDown = new Rect(0,0,Screen.width,RectSize);  
         RectLeft = new Rect(0,0,RectSize,Screen.width);  
         RectRight = new Rect(Screen.width-RectSize,0,Screen.width,Screen.height);  

[csharp] view plain copy
<span style="white-space:pre">    </span>//在场景内查找Tag为Player的物体  
         Player = GameObject.FindGameObjectWithTag("Player").transform;  
           
          
         camera = this.GetComponent<Camera>();  
      
    }  
      
      
    void Update () {  
  
        //如果按下Y键锁定相机再次按下解锁。  
        if(Input.GetKeyDown(KeyCode.Y))  
        {  
            CameraIsLock = !CameraIsLock;  
        }  
  
          
        CameraMoveAndLock();//视角移动和锁定  
        SightDistance();//视距的缩放  
        
    }  
    //视角移动  
    void CameraMoveAndLock()  
    {  
        //空格回到自己  
        if (Input.GetKey(KeyCode.Space))  
        {  
            transform.position = new Vector3(Player.position.x, transform.position.y, Player.position.z - 5f);  
        }  
        //如果没有锁定相机(视野)可以移动  
        if(CameraIsLock==false)  
        {  
            //如果鼠标在屏幕上的位置包含在这个矩形里  
            if (RectUp.Contains(Input.mousePosition))  
            {  
                transform.position = new Vector3(transform.position.x, transform.position.y, transform.position.z + CameraMoveSpeed);  
            }  
            if (RectDown.Contains(Input.mousePosition))  
            {  
                transform.position = new Vector3(transform.position.x, transform.position.y, transform.position.z - CameraMoveSpeed);  
            }  
            if (RectLeft.Contains(Input.mousePosition))  
            {  
                transform.position = new Vector3(transform.position.x - CameraMoveSpeed, transform.position.y, transform.position.z);  
            }  
            if (RectRight.Contains(Input.mousePosition))  
            {  
                transform.position = new Vector3(transform.position.x + CameraMoveSpeed, transform.position.y, transform.position.z);  
            }  
            //判断相机移动的边缘在哪里,不能 超过设定的最远距离  
            if (transform.position.z >= 70f)  
            {  
                transform.position = new Vector3(transform.position.x, transform.position.y, 70f);  
            }  
            if (transform.position.z <= -80f)  
            {  
                transform.position = new Vector3(transform.position.x, transform.position.y, -80f);  
            }  
            if (transform.position.x >= -5)  
            {  
                transform.position = new Vector3(-5, transform.position.y, transform.position.z);  
            }  
            if (transform.position.x <= -200f)  
            {  
                transform.position = new Vector3(-200, transform.position.y, transform.position.z);  
            }  
        }  
        else if (CameraIsLock == true)  
        {  
            //如果锁定视角,相机视野显示主角  
            transform.position = new Vector3(Player.position.x, transform.position.y, Player.position.z - 5f);  
        }  
          
    }  
  
  
    //中键滑轮拉远拉近  
    void SightDistance()  
    {  
        float MouseScrollWheel = Input.GetAxis("Mouse ScrollWheel");  
  
        CamerafieldOfView += MouseScrollWheel * -SightDistancespeed;  
        CamerafieldOfView = Mathf.Clamp(CamerafieldOfView, 30, 60);  
        camera.fieldOfView = Mathf.Lerp(camera.fieldOfView, CamerafieldOfView, Time.deltaTime * SightDistancespeed);  
         
    }  
}  

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值