unity限制相机可移动区域(box collider)

2023-11-01

1.创建一个空对象并命名为box(什么名字都可以 但要与代码中的一致)
2.选中box在属性面板点击add component添加一个box collider组件
在这里插入图片描述

3.把box collider的大小设置到你想限制的区域范围大小(我直接设置成场景的大小)
在这里插入图片描述

3.在相机脚本定义一个变量box(用于选中)刚刚创建的box对象

public GameObject box;

4.在相机的脚本添加限制位置的函数

    private void limitation()
    {
        if (box)
        {
            Vector3 boxSize= box.GetComponent<BoxCollider>().size;
            Vector3 boxCenter= box.GetComponent<BoxCollider>().center;
            Vector3 min= box.transform.position + boxCenter- boxSize* 0.5f;
            Vector3 max= box.transform.position + boxCenter+ boxSize* 0.5f;

            Vector3 cameraP = transform.position;

            if (cameraP.x < min.x)
            {
                cameraP.x = min.x;
            }
            else if (cameraP.x > max.x)
            {
                cameraP.x = max.x;
            }

            if (cameraP.y < min.y)
            {
                cameraP.y = min.y;
            }
            else if (cameraP.y > max.y)
            {
                cameraP.y = max.y;
            }

            if (cameraP.z < min.z)
            {
                cameraP.z = min.z;
            }
            else if (cameraP.z > max.z)
            {
                cameraP.z = max.z;
            }

            transform.position = cameraP ;
        }

    }

5.把limitation函数放在相机更新的Update函数中
6.保存脚本 在编辑器中把box添加到脚本创建的变量中
在这里插入图片描述

注意:脚本是挂载在摄像机上的,代码保存后我们看到脚本上多了一个box属性(通过public GameObject box;)创建的,然后把场景中的box对象拖进去

7.保存运行 相机就只能在限制的区域内移动

完整代码:

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class cameraHandle : MonoBehaviour
{

    public GameObject box;
    // Start is called before the first frame update
    void Start()
    {
        
    }

    // Update is called once per frame
    void Update()
    {
        limitation();
    }
      private void limitation()
    {
        if (box)
        {
            Vector3 boxSize= box.GetComponent<BoxCollider>().size;
            Vector3 boxCenter= box.GetComponent<BoxCollider>().center;
            Vector3 min= box.transform.position + boxCenter- boxSize* 0.5f;
            Vector3 max= box.transform.position + boxCenter+ boxSize* 0.5f;

            Vector3 cameraP = transform.position;

            if (cameraP.x < min.x)
            {
                cameraP.x = min.x;
            }
            else if (cameraP.x > max.x)
            {
                cameraP.x = max.x;
            }

            if (cameraP.y < min.y)
            {
                cameraP.y = min.y;
            }
            else if (cameraP.y > max.y)
            {
                cameraP.y = max.y;
            }

            if (cameraP.z < min.z)
            {
                cameraP.z = min.z;
            }
            else if (cameraP.z > max.z)
            {
                cameraP.z = max.z;
            }

            transform.position = cameraP ;
        }

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

unity限制相机可移动区域(box collider) 的相关文章

  • VLC 媒体播放器有 C# 界面吗? [关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 是否可以使用 C 控制台应用程序中的包装器从 VLC 播放中当前播放的文件中读取曲目统计信息 时间 标
  • 如何从字符串中提取子字符串直到遇到第二个空格?

    我有一个像这样的字符串 o1 1232 5467 1232 5467 1232 5467 1232 5467 1232 5467 1232 5467 如何仅提取 o1 1232 5467 要提取的字符数并不总是相同 因此 我只想提取直到遇到
  • 与 for_each 或 std::transform 一起使用时,如何调用 C++ 函子构造函数

    我以前从未使用过 C 函子 所以我只是想了解它们是如何工作的 例如假设我们有这个函子类 class MultiplyBy private int factor public MultiplyBy int x factor x int ope
  • 格式说明符%02x

    我有一个简单的程序 include
  • 使用 ADAL v3 使用 ClientID 对 Dynamics 365 进行身份验证

    我正在尝试对我们的在线 Dynamics CRM 进行身份验证以使用可用的 API 我能找到的唯一关于执行此操作的官方文档是 https learn microsoft com en us dynamics365 customer enga
  • EntityHydrate 任务失败

    我最近安装了 Visual Studio 11 Beta 和 Visual Studio 2010 之后 我无法在 Visual Studio 2010 中构建依赖于 PostSharp 的项目 因此我卸载了 Visual Studio 1
  • 在 C++ 代码中转换字符串

    我正在学习 C 并开发一个项目来练习 但现在我想在代码中转换一个变量 字符串 就像这样 用户有一个包含 C 代码的文件 但我希望我的程序读取该文件并插入将其写入代码中 如下所示 include
  • Boost ASIO 串行写入十六进制值

    我正在使用 ubuntu 通过串行端口与设备进行通信 所有消息都必须是十六进制值 我已经在 Windows 环境中使用白蚁测试了通信设置 并得到了我期望的响应 但在使用 Boost asio 时我无法得到任何响应 以下是我设置串口的方法 b
  • Selenium - C# - Webdriver - 无法找到元素

    在 C 中使用 selenium 我试图打开浏览器 导航到 Google 并找到文本搜索字段 我尝试下面的 IWebDriver driver new InternetExplorerDriver C driver Navigate GoT
  • 防止控制台应用程序中的内存工作集最小化?

    我想防止控制台应用程序中的内存工作集最小化 在Windows应用程序中 我可以这样做覆盖 SC MINIMIZE 消息 http support microsoft com kb 293215 en us fr 1 但是 如何在控制台应用程
  • 为什么这个 makefile 在“make clean”上执行目标

    这是我当前的 makefile CXX g CXXFLAGS Wall O3 LDFLAGS TARGET testcpp SRCS main cpp object cpp foo cpp OBJS SRCS cpp o DEPS SRCS
  • Makefile 和 .Mak 文件 + CodeBlocks 和 VStudio

    我对整个 makefile 概念有点陌生 所以我对此有一些疑问 我正在 Linux 中使用 CodeBlocks 创建一个项目 我使用一个名为 cbp2mak 的工具从 CodeBlocks 项目创建一个 make 文件 如果有人知道更好的
  • Linux 上的 RTLD_LOCAL 和dynamic_cast

    我们有一个由应用程序中的一些共享库构成的插件 我们需要在应用程序运行时更新它 出于性能原因 我们在卸载旧插件之前加载并开始使用新插件 并且只有当所有线程都使用旧插件完成后 我们才卸载它 由于新插件和旧插件的库具有相同的符号 我们dlopen
  • 测量进程消耗的 CPU 时钟

    我用 C 语言编写了一个程序 它是作为研究结果创建的程序 我想计算程序消耗的确切 CPU 周期 精确的循环次数 知道我怎样才能找到它吗 The valgrind tool cachegrind valgrind tool cachegrin
  • 我们可以通过指针来改变const定义的对象的值吗?

    include
  • 使用 gcc 时在头文件中查找定义的好方法是什么?

    在使用 gcc 时 有人有推荐的方法在头文件中查找定义吗 使用 MSVC 时 我只需右键单击并选择 转到定义 这非常好 我使用过 netbeans gcc 它确实有代码帮助 包括到定义的超链接 所以这是一种选择 但是 我想知道是否有任何其他
  • 如果将变量设置为等于新对象,旧对象会发生什么?

    假设我们有一个 X 类not有一个超载的operator 功能 class X int n X n 0 X int n n n int main X a 1 an object gets constructed here more code
  • winform c# 中的弹出窗口

    我正在开发一个需要弹出窗口的项目 但问题是我还希望能够通过表单设计器在此弹出窗口中添加文本框等 所以基本上我有一个按钮 当您单击它时 它将打开我在表单设计器中设计的另一个窗口 我一直在谷歌搜索 但还没有找到我需要的东西 所以我希望你们能帮助
  • 声明一个负长度的数组

    当创建负长度数组时 C 中会发生什么 例如 int n 35 int testArray n for int i 0 i lt 10 i testArray i i 1 这段代码将编译 并且启用 Wall 时不会出现警告 并且似乎您可以分配
  • 如何为有时异步的操作创建和实现接口

    假设我有数百个类 它们使用 计算 方法实现公共接口 一些类将执行异步 例如读取文件 而实现相同接口的其他类将执行同步代码 例如将两个数字相加 为了维护和性能 对此进行编码的好方法是什么 到目前为止我读到的帖子总是建议将异步 等待方法冒泡给调

随机推荐

  • Linux应用编程之多次打开同一文件进行读写操作与 O_APPEND 标志

    重复打开同一个文件 进行写操作 譬如一个进程中两次调用 open 函数打开同一个文件 分别得到两 个文件描述符 fd1 和 fd2 使用这两个文件描述符对文件进行写入操作 那么它们是分别写 各从各的位置 偏移量开始写 还是接续写 一个写完
  • 《Linux运维总结:Centos7.6之OpenSSH7.4升级版本至9.3》

    一 环境信息 操作系统 Centos7 6 1810 OpenSSH 7 4p1 OpenSSL 1 0 2k fips 如下图所示 注意 升级后由于加密算法的区别 低版本的SSH工具可能无法连接 建议改用Xshell7或SecureCRT
  • 【高级Java架构师系统学习】最新Java高级面试题汇

    性能调优 影响MySQLServer 性能的相关因素 商业需求对性能的影响 系统架构及实现对性能的影响 Query语句对系统性能的影响 Schema设计对系统的性能影响 硬件环境对系统性能的影响 MySQL 数据库锁定机制 MySQL锁定机
  • 当黑客就入门 ZzCMS8.1前台任意脚本上传漏洞复现

    一 环境选择 1 系统环境 Win server 2003 2 靶机IP 192 168 220 132 3 Web环境 Phpstudy2016 4 源码 ZzCMS8 1 lt 点击下载 gt 二 源码部署 1 将源码放入phpstud
  • 如何将typora照片导到csdn上

    解决typora 图片上传到csdn的问题 问题背景 今晚想把typora的笔记传到csdn 却发现照片一直发不过去 总是出现 外链图片转存失败 源站可能有防盗链机制 建议将图片保存下来直接上传 的问题 后来查了一下怎么解决 需要先将导入到
  • 德勤《全球AI发展白皮书》出炉!八大新趋势,三个关键技术一文扫尽【附下载】...

  • json-lib系列包报错原因

    我的JDK是1 6 json lib换了好几个版本还是不行 jsonArray与list之间的转换始终进行不了 之前也用到jsonArray与String之间的转换报错 不得不改用org json jar那个包 今天再次遇到这个问题 我决心
  • Nessus安装与使用

    目录 前言 一 kali安装Nessus 1 访问Nessus官网 2 安装Nessus程序 3 启动Nessus 4 浏览器访问nessus的web网站 5 选择 Managed Scanner 选项 点击 Continue 6 选择 T
  • SPEC CPU简介和使用

    前言 SPEC CPU是一套行业标准的CPU密集型基准测试套件 SPEC设计了此套件 以使用实际用户应用程序开发的工作负载 在最广泛的实际硬件范围内提供计算密集型性能的比较度量 这些基准作为源代码提供 要求用户习惯使用编译器命令以及通过控制
  • Linux开启查看端口

    1 查看防火墙状态 systemctl status firewalld 下图是防火墙关闭状态 2 开启防火墙 systemctl start firewalld 开启端口 firewall cmd zone public add port
  • 教你如何保存有妖气漫画

    有妖气是中国唯一且最大的纯原创漫画网站 官方这么介绍的 是不是真的我也不知道 但是在有妖气中看到喜欢的漫画想要保存下来的时候就出现问题了 有妖气为了防盗版是禁止图片另存为的 如果想要保存漫画只能靠截图了 但是截图后的漫画就没有原版的那么清晰
  • Windows本机无法访问VMware虚拟机Ubuntu上部署的项目

    问题 本机无法访问虚拟机上部署的项目 原因 8080端口没有开放 本来以为防火墙关闭就不会有这个问题 解决方法 开放端口8080 执行命令如下 永久开放8080端口 root ubuntu sudo firewall cmd permane
  • spring boot学习(十四):整合shiro

    shiro和SpringSecurity一样的安全 主要是涉及到realm Spring Boot 的shiro整合
  • S3使用rest API进行签名文件上传出现403问题

    问题 在使用s3的rest api进行签名请求头文件上传的时候 代理服务器出现了403问题 原因 必须将指定的所有签名请求头 都带给aws的s3服务器才能正常返回200响应 如下为请求头信息 POST 86 1792 19 012 0100
  • 【Cocos2d-html5游戏引擎学习笔记(6)】自定义Cocos2d-html5加载资源Loading界面

    这一篇其实本该放在后面写的 只是今天正好把这个整出来了 所以为了防止后面忘记 就在这里先写了 在运行index html文件的时候 引擎首先会把资源进行加载 这是为了让游戏在运行时更为流畅 避免了在运行时加载资源 而出现卡顿现象 影响用户体
  • 自己搭建一个SSH框架

    自己搭建一个SSH框架 真累挺 来源 张成法的日志 1 实验环境准备 MyEclipse8 6 Tomcat6 0 20 MySQL5 1 数据库脚本程序CREATE TABLE user id int 11 NOT NULL auto i
  • 面试题篇-13-Kafka相关面试题

    文章目录 1 什么是消息队列 2 kafka 的零拷贝原理 3 Kafka 如何保证消息不丢失 3 1 Producer 端 3 2 Broker 端 3 3 Consumer 4 Kafka 怎么避免重复消费 5 什么是 ISR 为什么需
  • 图像配准(匹配)与变化检测

    文章目录 简介 A Survey on Deep Learning Based Change Detection from High Resolution Remote Sensing Images 2022 变化检测的基本框架 基于神经网
  • idea好用插件集合

    idea好用插件 1 查看本地是否有未提交代码 2 MybatisX 小鸟插件 3 Nyan Progress Bar 加载彩虹显示插件 4 Translation 翻译插件 5 Tabnine AI Code 代码提示插件 6 Rainb
  • unity限制相机可移动区域(box collider)

    1 创建一个空对象并命名为box 什么名字都可以 但要与代码中的一致 2 选中box在属性面板点击add component添加一个box collider组件 3 把box collider的大小设置到你想限制的区域范围大小 我直接设置成