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中的相机控制功能 的相关文章

  • Unity中射线Ray和RaycastHit的简单介绍

    射线是在三维世界中从一个点沿一个方向发射的一条无限长的线 在射线的轨迹上 一旦与添加了碰撞器的模型发生碰撞 将停止发射 我们可以利用射线实现子弹击中目标的检测 鼠标点击拾取物体等功能 1 Physics Raycast public sta
  • 关于Unity中的NGUI和UGUI

    一 用Unity开发2D游戏 有三套关系 1 GUI Unity本身自带的GUI 2 NGUI 以前在Unity中广泛来做2D的 是第三方的包 需要安装 3 UGUI Unity5 X后 其实是Unity4 6以后 Unity找到NGUI的
  • Unity做一个发射炮台,1秒发射1个,5秒后消失的例子

    思路 小球要移动 移动一段时间消失 需要translate destory 一个小球不够 需要多次COPY预制体小球 copy 一 COPY代码 把这个代码放在不是复制的球的其他物体上 然后把预制体球拖入a中 using UnityEngi
  • Linux应用开发自学之路

    前言 在 关于我 那篇博文里 朋友们应该知道了我不是科班出身 是由机械强行转行到Linux应用开发方向 下面我就详细向大家介绍自己这一路上的转行历程 希望对大家有所启发 我是学机械专业的 对于机械专业我还是很感兴趣 而且当年这个专业也是我自
  • unity3d 给模型添加刚体后、或者角色控制器后下坠

    1 给模型添加一个刚体后 还要给模型添加一个碰撞器 人和地面的话 要注意地面有没有碰撞器 有的话注意地面碰撞器的Mesh网格是不是Null 还有
  • 合并两个有序数组

    给定两个有序整数数组 nums1 和 nums2 将 nums2 合并到 nums1 中 使得 num1 成为一个有序数组 说明 初始化 nums1 和 nums2 的元素数量分别为 m 和 n 你可以假设 nums1 有足够的空间 空间大
  • unity游戏中,摄像头发射红光,阻止Player前进的解决方法

    1 在摄像机下面挂一个空物体 空物体上加Light灯光 type shot intensity 强度 cookie 放灯光形状的图 2 然后在灯光下加一个灯光碰撞器检测 挂在空物体的子物体 不勾选Mesh Renderer 做OnTrigg
  • 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
  • Unity3D碰撞检测和OnTriggerEnter用法

    在目前掌握的情况分析 在Unity中参与碰撞的物体分2大块 1 发起碰撞的物体 2 接收碰撞的物体 1 发起碰撞物体有 Rigodbody CharacterController 2 接收碰撞物体由 所有的Collider 工作的原理为 发
  • Java语言的重载和重写的区别

    学习java语言中重载和重写的区别 重载 Overload 重载 overloading 是在一个类里面 方法名字相同 而参数不同 返回类型可以相同也可以不同 每个重载的方法 或者构造函数 都必须有一个独一无二的参数类型列表 最常用的地方就
  • python学习笔记(一)---第一个python程序

    1 Windows CMD命令 cd 文件夹名称 进入指定文件夹 dir 查看当前目录下的文件 2 python的运行 在命令行敲入pthon 进入python交互模式 交互模式下的提示符是 gt gt gt 然后就可以敲代码 如print
  • netcat 的使用教程

    软件准备 windows访问 netcat 1 11 for Win32 Win64 下载 linux apt install netcat 命令格式 nc 参数 主机名称 端口 参数 nc h c
  • Unity Blend Tree动画的混合,认识Blend Tree

    我们在Animator Controller中除了可以创建一个State外还可以创建一个Blend Tree 如下 那么我们看下新创建的Blend Tree和State有什么区别 唯一的区别就是Montion指向的类型变成了Blend Tr
  • unity3d实现LOL中的相机控制功能

    using UnityEngine using System Collections public class CameraController MonoBehaviour private int SightDistancespeed 15
  • Unity 小球在两点之间往返运动

    在Vectoer3类中有一个Lerp方法 可以让一个物体从一个点到另外一个点 如果要在 这里点加往返运动我们可以借助Mathf PingPong 这个方法 这个方法会从0 Lenght持续增加 达到最大值后 持续减小 然后到0 如此反复 每
  • Unity3D之触摸输入实现物体滑动

    新建一个Cube物体 创建一个脚本TouchTest04 将该脚本挂到Cube物体上 代码如下 csharp view plain copy using UnityEngine using System Collections public
  • 从头学编程:零基础入门指南

    文章目录 前言 一 编程的基础概念 二 选择一门编程语言 三 学习编程基础 四 掌握编程工具 五 参与开源社区 七 不断练习和实践 八 总结 关于Python技术储备 一 Python学习路线 二 Python基础学习 1 开发工具 2 学
  • 发现新大陆

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

    一 预定餐位 1 餐馆 1 谈论食物 Seafood is their specialty 海鲜是他们的特色菜 They serve authentic Italian food 他们供应正宗意大利菜 2 谈论餐馆名声 The restau
  • 英语学习(看病篇)

    一 预约医生 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