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

2023-11-13

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);  
         
    }  
}  

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

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

  • seaborn.heatmap操作手册

    本文转自seaborn heatmap官方操作手册 http seaborn pydata org generated seaborn heatmap html heatmap很好 很强大 seaborn heatmap seaborn0
  • 自学微信小程序开发第九天-关于分包

    自学微信小程序开发第九天 关于分包 分包前后的项目构成 分包的加载规则 文件分配 分包的配置定义 分包的一些原则 打包原则 引用原则 分包举例 独立分包 独立分包的应用场景举例 声明独立分包 进入独立分包页面 分包预下载 分包指的是把一个完
  • Unity做一个发射炮台,1秒发射1个,5秒后消失的例子

    思路 小球要移动 移动一段时间消失 需要translate destory 一个小球不够 需要多次COPY预制体小球 copy 一 COPY代码 把这个代码放在不是复制的球的其他物体上 然后把预制体球拖入a中 using UnityEngi
  • Unity Android手机触屏事件

    一 下面先说经常用的三个事件 手指按下 手指移动 手指松开 1 手指按下 if input touchCount 1 if input touches 0 phase TouchPhase Beagn 手指按下时 要触发的代码 2 手指在屏
  • Unity 官方教程,坦克大战,AR版,联机版,PC版学习

    pc https pan lanzou com i0q5fyf 局域网 https pan lanzou com i0q5fyf EXE https pan lanzou com i0q5rle AR ASEET https pan lan
  • 微信公众号测试号url和token绑定失败解决问题

    前提准备 在本地搭建一个本地服务器 具体查看如何搭建一个本地服务器 首先 我们需要到natapp获取一个信道 博主这里买的是vip1型的 当然也可以使用免费型的 根据需要选择 完了之后 去 我的隧道 查看购买的信道 复制里面的authtok
  • Unity3D碰撞检测和OnTriggerEnter用法

    在目前掌握的情况分析 在Unity中参与碰撞的物体分2大块 1 发起碰撞的物体 2 接收碰撞的物体 1 发起碰撞物体有 Rigodbody CharacterController 2 接收碰撞物体由 所有的Collider 工作的原理为 发
  • 软件测试自学怎么学?

    很多朋友想要入行软件测试 但是都不知道该怎么学 抽个时间简单的给大家说下 对于0基础的朋友 应该怎么去学习软件测试 学习软件测试有2条路可以选 1 最省事的当然是找个靠谱的培训机构去培训啦 你就什么都不用想了 跟着培训结构认真的学习就行了
  • python学习笔记(一)---第一个python程序

    1 Windows CMD命令 cd 文件夹名称 进入指定文件夹 dir 查看当前目录下的文件 2 python的运行 在命令行敲入pthon 进入python交互模式 交互模式下的提示符是 gt gt gt 然后就可以敲代码 如print
  • 自学C语言(10)define定义常量和宏 内存 指针变量

    文章前言 学的太多 更新的太少了哈哈 总不能把学的忘记了 回顾知识 继续总结 文章目录 一 define定义常量和宏 1 define定义标识符常量 2 define定义宏 二 内存 内存 如何产生地址 计算机32位 二进制 计算机64位
  • Unity Blend Tree动画的混合,认识Blend Tree

    我们在Animator Controller中除了可以创建一个State外还可以创建一个Blend Tree 如下 那么我们看下新创建的Blend Tree和State有什么区别 唯一的区别就是Montion指向的类型变成了Blend Tr
  • 测试中BUG定义、测试BUG的等级划分、Bug流程以及Bug解决优先级

    一个优秀的软件测试师不仅仅能够发现软件中的bug 还能分析出bug产生的原因 总结了一些软件测试入门必须要了解和学习的BUG基础知识 主要包括BUG定义 测试BUG的等级划分 Bug流程以及Bug解决优先级等内容 下面一起来梳理一遍这些基础
  • java小笔记,List实体类对象的去重

    java小笔记 List实体类对象的去重 去除重复的数据 ArrayList lt 实体类 gt collect orderPOList stream collect Collectors collectingAndThen Collect
  • Unity3D UNET 模仿局域网游戏(二)

    紧接着上一篇博客 上一篇博客中 我们已经能够分别移动角色 并且控制他射击了 而且还稍微区分了一下不同的角色 这篇博客中我们继续讲解后面的内容 既然角色都已经可以射击了 那肯定还得需要一个血量对吧 所以现在我们就添加血量 给Player添加H
  • Unity3D之简单的点击拾取

    新建一个Cube物体和一个脚本Cube 将Cube脚本挂到Cube物体上 代码如下 csharp view plain copy using UnityEngine using System Collections public class
  • STM32如何利用串口发送接收数据

    STM32如何利用串口发送接收数据 我现在计划利用STM32F103X的串口对迪文屏发送及接收数据 手中硬件 正点原子开发板 旗舰版 迪文屏 4 3寸 电脑 软件 MCU程序下载 FLYMCU 串口助手 XCOM 迪文屏配置 DGUS TO
  • Unity3D之触摸输入实现物体滑动

    新建一个Cube物体 创建一个脚本TouchTest04 将该脚本挂到Cube物体上 代码如下 csharp view plain copy using UnityEngine using System Collections public
  • 使用Keras进行LSTM实战

    0 前言 在上文中进行ARIMA时序预测后 了解到强大的LSTM在处理时序预测有更为优秀的表现 因此对LSTM进行了学习 LSTM是一种时间递归神经网络 它出现的原因是为了解决RNN的一个致命的缺陷 原生的RNN会遇到一个很大的问题 叫做T
  • 发现新大陆

    csdn很久没有发博客了 当发现博客园可以进行一些骚操作之后 而CSDN又存在很多限制 相比较下 毅然选择了博客园 博主博客园首页链接地址 https www cnblogs com twq46 如果有想继续看博主的分享可以访问该链接
  • 英语学习(看病篇)

    一 预约医生 1 基本病症 1 I feel terrible 我感觉不舒服 2 I ve been vomiting all night 我昨天吐了一晚上 3 I have diarrhea 我腹泻 4 使用医疗词汇 搭配动词 have

随机推荐

  • “拖延症”的良方——对于追求完美,自制力差,情绪化的人很受用。

    上大学以后 我开始有了拖延的毛病 立下目标无数 但时常却动力奇缺 常常在网上浏览着各色的小说和帖子 或是玩很无聊的弱智在线小游戏 却不愿碰专业书本或文献一下 甚至哪怕deadline就在几天之后 只有在deadline之前一点点时间才会因紧
  • 关系型数据库与非关系型数据库的区别

    当前主流的关系型数据库有Oracle DB2 Microsoft SQL Server Microsoft Access MySQL等 非关系型数据库有 NoSql Cloudant nosql和关系型数据库比较 优点 1 成本 nosql
  • Improved Denoising Diffusion Probabilistic Models 论文阅读

    前言 DDPM模型虽然在生成任务上达到了不错的效果 但是也同样存在一些问题 例如采样时间过长 对数似然不高等 对数似然是生成模型中广泛使用的指标 优化对数似然迫使生成模型学习各个数据分布 使得模型的多样性大大提高 此外 对数似然性的微小改进
  • element Drawer 抽屉无法渲染

    出现的问题 不使用脚手架和node js时drawer不渲染 原因 没有引入最新的样式 解决方案 cdn引入
  • 性能测试(Jemeter)

    1 性能指标 响应时间 一次请求的往返时间 tps 每秒系统能够处理的事务数 比如订单中的下单操作 下单后续有很多操作 比如创建订单 扣除库存 清算库存等 这个完整操作就是一个完整的事务 qps 每秒系统能处理的查询数 就是每秒系统能够承受
  • 数据库技术的发展历史是怎么样的?

    数据库技术产生于20世纪60年代末70年代初 其主要主要研究如何存储 使用和管理数据 随着计算机硬件和软件的发展 数据库技术也不断地发展 数据库技术在理论研究和系统开发上都取得了辉煌的成就 从数据管理的角度看 数据库技术到目前共经历了如下三
  • 前端拿到后台接口返回的数据,并根据实际情况按需处理数据

    方法一 通过数据数组的map方法 创建一个假数据 用于模拟后台返回的多级数据 let options id 1 name 水果 children id 11 name 榴莲 prices 55 id 12 name 苹果 prices 45
  • AD常用快捷键总结

    1 shift s 键 切换单层显示 2 q Ctrl Q 英寸和毫米 尺寸切换 3 D R进入布线规则设置 其中 Clearance 是设置最小安全线间距 覆铜时候间距的 比较常用 4 CTRL 鼠标单击某个线 整个线的NET 网络 呈现
  • C盘如何扩容

    一 使用Windows自带的磁盘管理 1 1 清空D盘 单击D 然后选择 删除卷 然后D盘显示 未分配 1 2 C盘右键 选择 拓展卷 1 3 选择 未分配的 D盘 1 4 完成 可以看到C盘已经是合并后的大小了
  • linux学习:chmod

    Linux权限 1 Linux常见权限 444 dr r r 666 lrw r r 666 rw rw rw 700 drwx 744 drwxr r 755 drwxr xr x 777 drwxrwxrwx 我们从左到右看 第一二三位
  • ConfigurationSettings.AppSettings已过时的解决办法

    开始使用VS 2005 习惯性的使用ConfigurationSettings类来读取应用程序配置文件的信息时 却被编译器提示说 警告 1 System Configuration ConfigurationSettings AppSett
  • Anaconda中创建新的Python虚拟环境并安装Tensorflow框架

    一 问题 在安装Anaconda后 默认的Python版本是3 8 3 由于深度学习框架tensorflow的不同版本匹配的Python版本也不同 所以需要创建一个新的Python虚拟环境3 7版本 二 如何创建 打开Anaconda Pr
  • vue3 使用 vite 构建的项目打包后无法访问

    解决办法 1 安装 vitejs plugin legacy D npm i vitejs plugin legacy D 2 vite config js 添加配置 import legacy from vitejs plugin leg
  • springboot中对redis的操作封装工具类

    我们可以自己写一个工具类把redisTemplate进行封装 方便我们调用 这是一种很好的开发方式 简化开发 狂神教程中的封装 package com kuang utils import org springframework beans
  • HTML表单(属性/元素/输入类型/输入属性):看这一篇就够了

    HTML表单 HTML 表单用于搜集不同类型的用户输入
  • 使用Python绘画象棋棋盘(turtle)

    通过使用turtle绘画象棋棋盘 绘制象棋棋盘 import turtle t turtle Pen t width 2 设置画笔粗细 t speed 1 设置画笔移动速度 画竖线 t penup t goto 400 400 for i
  • Linux之线程-读写锁pthread_rwlock_t

    主要内容 1 互斥量及如何使用 2 什么是死锁 如何解决 3 什么是读写锁 如何使用 4 条件变量实现的生产消费者模型 5 信号量实现的生产消费者模型 3 读写锁 特点 读共享 写独占 写优先级高 读写锁仍然是一把锁 有不同的状态 未加锁
  • Linux添加PYTHONPATH方法以及3种修改环境变量方法

    方法一 用于当前终端 export PATH PATH lt 你的要加入的路径 gt 上面的方法只适用于当前终端 一旦当前终端关闭或在另一个终端中 则无效 方法二 用于当前用户 在用户主目录下有一个 bashrc 隐藏文件 可以在此文件中加
  • python数据结构:栈(匹配花括号、尖括号、圆括号、方括号)

    利用数据结构中的栈实现检查花括号 尖括号 圆括号 方括号是否匹配 相比较网上其他的方法 这种自定义类及函数的方法使用起来更加自动化 class StackNode object 初始化结点 def init self self data N
  • unity3d实现LOL中的相机控制功能

    using UnityEngine using System Collections public class CameraController MonoBehaviour private int SightDistancespeed 15