Unity---视窗坐标转化和判断物体是否出了屏幕边界

2023-11-21 16:59

本文主要是介绍Unity---视窗坐标转化和判断物体是否出了屏幕边界,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

视窗坐标转世界坐标和屏幕坐标,判断物体是否还在边界内,和判断从那边出界,先看效果:

这里是直接拖动物体改变坐标来检测,从图中的打印可以清楚看到效果,旋转摄像机视角是同样的效果,下面是代码:

using System;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;public class Test : MonoBehaviour
{public Transform player;public float myWidth;public float myHeight;void Start(){Debug.Log("Screen.width" + Screen.width);Debug.Log("Screen.height" + Screen.height);}void Update(){CornerPos();}void CornerPos(){/// <summary>/// 视窗坐标转世界坐标。视窗坐标是以视窗左下角(0,0)坐标为起始点,长宽为1./// </summary>Vector3 LeftUpWorldoCornerPos = Camera.main.ViewportToWorldPoint(new Vector3(0, 1, -Camera.main.transform.position.z));//视窗左上角转为世界坐标Vector3 LeftDownWorldCornerPos = Camera.main.ViewportToWorldPoint(new Vector3(0, 0, -Camera.main.transform.position.z));//视窗左下角转为世界坐标Vector3 RightUpWorldCornerPos = Camera.main.ViewportToWorldPoint(new Vector3(1, 1, -Camera.main.transform.position.z));//视窗右上角转为世界坐标Vector3 RightDownWorldCornerPos = Camera.main.ViewportToWorldPoint(new Vector3(1, 0, -Camera.main.transform.position.z));//视窗右下角转为世界坐标/// <summary>/// 视窗坐标转世界屏幕,可以手动得到其屏幕长宽/// </summary>Vector3 LeftUpScreenCornerPos = Camera.main.ViewportToScreenPoint(new Vector3(0, 1, -Camera.main.transform.position.z));//视窗左上角转为屏幕坐标Vector3 LeftDownScreenCornerPos = Camera.main.ViewportToScreenPoint(new Vector3(0, 0, -Camera.main.transform.position.z));//视窗左下角转为屏幕坐标Vector3 RightUpScreenCornerPos = Camera.main.ViewportToScreenPoint(new Vector3(1, 1, -Camera.main.transform.position.z));//视窗右上角转为屏幕坐标Vector3 RightDownScreenCornerPos = Camera.main.ViewportToScreenPoint(new Vector3(1, 0, -Camera.main.transform.position.z));//视窗右下角转屏幕界坐标myWidth = Vector3.Magnitude(LeftUpScreenCornerPos - RightUpScreenCornerPos);myHeight = Vector3.Magnitude(LeftUpScreenCornerPos - LeftDownScreenCornerPos);/// <summary>/// 视窗坐标转世界坐标。得到四个视窗中心点的世界坐标,与物体判断是否到达边界./// </summary>Vector3 upMiddlePos = Camera.main.ViewportToWorldPoint(new Vector3(0.5f, 1f, -Camera.main.transform.position.z)); //视窗上方中心转为世界坐标Vector3 downMiddlePos = Camera.main.ViewportToWorldPoint(new Vector3(0.5f, 0, -Camera.main.transform.position.z));//视窗下方中心转为世界坐标Vector3 leftMiddlePos = Camera.main.ViewportToWorldPoint(new Vector3(0, 0.5f, -Camera.main.transform.position.z));//视窗左边中心转为世界坐标Vector3 rightMiddlePos = Camera.main.ViewportToWorldPoint(new Vector3(1, 0.5f, -Camera.main.transform.position.z));//视窗右边中心转为世界坐标bool upOut = upMiddlePos.y - player.position.y <= 0 ? true : false; //与上方屏幕边缘碰到否bool downOut = downMiddlePos.y - player.position.y >= 0 ? true : false;//与下方屏幕边缘碰到否bool leftOut = leftMiddlePos.x - player.position.x >= 0 ? true : false;//与左边屏幕边缘碰到否bool rightOut = rightMiddlePos.x - player.position.x <= 0 ? true : false;//与右边屏幕边缘碰到否Debug.Log("upOut : " + upOut);Debug.Log("downOut : " + downOut);Debug.Log("leftOut : " + leftOut);Debug.Log("rightOut : " + rightOut);}
}

注释很清楚了,这里的Player就是Cube.

欢迎加群:4364930讨论。

这篇关于Unity---视窗坐标转化和判断物体是否出了屏幕边界的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/403744

相关文章

Python如何精准判断某个进程是否在运行

《Python如何精准判断某个进程是否在运行》这篇文章主要为大家详细介绍了Python如何精准判断某个进程是否在运行,本文为大家整理了3种方法并进行了对比,有需要的小伙伴可以跟随小编一起学习一下... 目录一、为什么需要判断进程是否存在二、方法1:用psutil库(推荐)三、方法2:用os.system调用

使用Python从PPT文档中提取图片和图片信息(如坐标、宽度和高度等)

《使用Python从PPT文档中提取图片和图片信息(如坐标、宽度和高度等)》PPT是一种高效的信息展示工具,广泛应用于教育、商务和设计等多个领域,PPT文档中常常包含丰富的图片内容,这些图片不仅提升了... 目录一、引言二、环境与工具三、python 提取PPT背景图片3.1 提取幻灯片背景图片3.2 提取

Android实现两台手机屏幕共享和远程控制功能

《Android实现两台手机屏幕共享和远程控制功能》在远程协助、在线教学、技术支持等多种场景下,实时获得另一部移动设备的屏幕画面,并对其进行操作,具有极高的应用价值,本项目旨在实现两台Android手... 目录一、项目概述二、相关知识2.1 MediaProjection API2.2 Socket 网络

Python实现特殊字符判断并去掉非字母和数字的特殊字符

《Python实现特殊字符判断并去掉非字母和数字的特殊字符》在Python中,可以通过多种方法来判断字符串中是否包含非字母、数字的特殊字符,并将这些特殊字符去掉,本文为大家整理了一些常用的,希望对大家... 目录1. 使用正则表达式判断字符串中是否包含特殊字符去掉字符串中的特殊字符2. 使用 str.isa

Python中判断对象是否为空的方法

《Python中判断对象是否为空的方法》在Python开发中,判断对象是否为“空”是高频操作,但看似简单的需求却暗藏玄机,从None到空容器,从零值到自定义对象的“假值”状态,不同场景下的“空”需要精... 目录一、python中的“空”值体系二、精准判定方法对比三、常见误区解析四、进阶处理技巧五、性能优化

使用Python实现一键隐藏屏幕并锁定输入

《使用Python实现一键隐藏屏幕并锁定输入》本文主要介绍了使用Python编写一个一键隐藏屏幕并锁定输入的黑科技程序,能够在指定热键触发后立即遮挡屏幕,并禁止一切键盘鼠标输入,这样就再也不用担心自己... 目录1. 概述2. 功能亮点3.代码实现4.使用方法5. 展示效果6. 代码优化与拓展7. 总结1.

Python+PyQt5实现多屏幕协同播放功能

《Python+PyQt5实现多屏幕协同播放功能》在现代会议展示、数字广告、展览展示等场景中,多屏幕协同播放已成为刚需,下面我们就来看看如何利用Python和PyQt5开发一套功能强大的跨屏播控系统吧... 目录一、项目概述:突破传统播放限制二、核心技术解析2.1 多屏管理机制2.2 播放引擎设计2.3 专

Java强制转化示例代码详解

《Java强制转化示例代码详解》:本文主要介绍Java编程语言中的类型转换,包括基本类型之间的强制类型转换和引用类型的强制类型转换,文中通过代码介绍的非常详细,需要的朋友可以参考下... 目录引入基本类型强制转换1.数字之间2.数字字符之间引入引用类型的强制转换总结引入在Java编程语言中,类型转换(无论

Python实战之屏幕录制功能的实现

《Python实战之屏幕录制功能的实现》屏幕录制,即屏幕捕获,是指将计算机屏幕上的活动记录下来,生成视频文件,本文主要为大家介绍了如何使用Python实现这一功能,希望对大家有所帮助... 目录屏幕录制原理图像捕获音频捕获编码压缩输出保存完整的屏幕录制工具高级功能实时预览增加水印多平台支持屏幕录制原理屏幕

C++实现回文串判断的两种高效方法

《C++实现回文串判断的两种高效方法》文章介绍了两种判断回文串的方法:解法一通过创建新字符串来处理,解法二在原字符串上直接筛选判断,两种方法都使用了双指针法,文中通过代码示例讲解的非常详细,需要的朋友... 目录一、问题描述示例二、解法一:将字母数字连接到新的 string思路代码实现代码解释复杂度分析三、