获取敌人在屏幕的方向并显示箭头
思路:只考虑xz平面,摄像机前向与敌人的方向夹角即目标为屏幕y轴夹角α,然后通过屏幕宽高计算边缘坐标。
代码如下:
public class Arrow : MonoBehaviour
{public Transform target;public Image ui;public Transform player;void Start(){player = transform;}void Update(){//获取目标的向量var tForward = target.position - player.position;tForward.y = 0;//获取玩家前向向量 即为屏幕的y轴var pForward = Quaternion.AngleAxis(player.eulerAngles.y, Vector3.up) * Vector3.forward;//获取玩家前向向量到目标向量夹角var rotAngle = Vector3.SignedAngle(pForward, tForward, Vector3.up);var tRot = Quaternion.AngleAxis(rotAngle, Vector3.up) * Vector3.forward;tRot.Set(tRot.x, tRot.z, 0);//ugui是在uicamera前面 图片的旋转 ui.transform.localEulerAngles = new Vector3(0, 0, -rotAngle);//位置方案1 绕着屏幕中点转圈//ui.transform.localPosition = tRot.normalized * 50;//位置方案2 在屏幕边缘显示float halfWidth = Screen.width / 2 - (ui.transform as RectTransform).rect.width / 2;float halfHeight = Screen.height / 2 - (ui.transform as RectTransform).rect.width / 2;//屏幕中点到中上和右上的夹角var screenRightTopRad = Mathf.Atan(halfWidth / halfHeight);//转成0-PI的弧度var rotRad = Mathf.Deg2Rad * Mathf.Abs(rotAngle);//区分屏幕上面和下面bool isTop = rotRad < Mathf.PI / 2;//下半使用-y轴计算rotRad = isTop ? rotRad : Mathf.PI - rotRad;float x = 0, y = 0;//弧度比屏幕右上的夹角小,需要计算x坐标 否则计算y坐标if (rotRad < screenRightTopRad){x = halfHeight * Mathf.Tan(rotRad) * Math.Sign(rotAngle);y = halfHeight;}else{x = halfWidth * Math.Sign(rotAngle);y = halfWidth * Mathf.Tan(Mathf.PI / 2 - rotRad);}y = isTop ? y : -y;ui.transform.localPosition = new Vector2(x, y);}
}
效果图如下,圆球为角色,方块为敌人,摄像机跟随在角色身后
摄像机没有旋转:
摄像机旋转:
获取敌人在屏幕的方向并显示箭头相关推荐
- Flutter中获取监听屏幕方向、锁定屏幕方向
文章目录 获取当前屏幕的方向 实时监听屏幕方向的改变 锁定屏幕方向 锁定方向,禁止App随着设备的方向改变 锁定启动图的方向 默认效果 Android配置 IOS配置 动态改变Flutter的屏幕方向 ...
- 在Android的 设置-显示 中增加控制屏幕旋转方向的选项
在Android的 设置->显示 中增加控制屏幕旋转方向的选项 参考博文 实现目标 效果局限 代码实现 配置资源文件 界面搭建 功能实现 默认值修改 其他情况 结语 参考博文 Android-x ...
- andorid popwindow全屏显示时获取到的屏幕高度偏小
有这样一个需求,使用popwindow来显示全屏,做一个屏保的功能. 之前使用下面代码来获取,但是发现真正给到popwindow去显示的时候,高度略低,非常丑陋. //获取屏幕宽度和高度Display ...
- 京东方网络推广外包将为三星提供OLED 屏幕可造成韩国显示产业动荡
近期,有消息称中国最大的显示器制造商京东方正准备为三星电子旗下智能手机业务提供OLED 屏幕,其将成为韩国显示器产商主要产品之一的"柔性OLED".此前,iPhone12系列产品推 ...
- 【Android RTMP】NV21 图像旋转处理 ( 问题描述 | 图像顺时针旋转 90 度方案 | YUV 图像旋转细节 | 手机屏幕旋转方向 )
文章目录 安卓直播推流专栏博客总结 一. NV21 图像格式与 Camera图像传感器方向问题 二. NV21 图像格式视频旋转 1. 图像旋转问题及解决方案 ( 顺时针旋转 90 度 ) 2. NV ...
- 【Android 开发教程】检测屏幕的方向
本章节翻译自<Beginning-Android-4-Application-Development>,如有翻译不当的地方,敬请指出. 原书购买地址http://www.amazon.co ...
- android自适应屏幕方向,Android 屏幕自适应方向尺寸与分辨率-Fun言
摘要: Android 屏幕自适应方向尺寸与分辨率,android 自适应分辨率,android 屏幕自适应,android 图片自适应,android 横屏布局,包括屏幕界面布局.多分辨率支持.获 ...
- STM32 BMP280模块 获取气压温度高度传感器数据 TFT显示
STM32 BMP280模块 获取气压温度高度传感器数据 TFT显示 简介 BMP280是博世最新推出的数字气压传感器,具有卓越的性能和低廉的价格,相对精度为±0.12 hPa(相当于±1米),传感器 ...
- python点击屏幕坐标_通过Python,如何获取鼠标在屏幕上的X、Y轴坐标点
最近在开发基于模拟器的微信自动添加好友工具时,需要获取模拟器中相应按钮,在当前屏幕中的X.Y轴坐标点.先前都是通过"Ctrl+Alt+A"截屏的方式 获取.如下图红框部分所示: 由 ...
最新文章
- mysql主从配置 windows_windows实现mysql主从配置
- Chapter1 CLR的执行模式
- mfc如何将一个数组中的字节数据用串口发送出去_[翻译] 串口通信的帧(frame)...
- QTP、LoadRunner、QC工具下载地址
- UNIX操作-命令快捷键
- 亚马逊如何变成 SOA(面向服务的架构)?
- E104-BT02蓝牙无线传输模块物联网芯片的智能控制、采集
- mysq命令行导出sql_mysql 命令行导入导出 sql
- 一个物理CPU如何划分成多个虚拟CPU
- WPF学习之路(十一)布局
- js获取页面宽度给JS div设宽度
- STM32开发笔记之——CMSIS DAP
- 数据库插中文变问号,Mybatis存储数据乱码,linux服务器上MySQL数据库乱码
- 【控制】《最优控制理论与系统》-胡寿松老师-第4章-动态规划
- 甲骨文裁员犯的病,任正非早在10年前就开出了药方
- ubantu pyCharm python 安装
- Photoshop2019 系统错误 无法启动此程序修复教程
- 当封号成为一种常态,网络营销人该何去何从?
- python zip 函数
- Html5播放器如何实现倍速播放