Unity之屏幕追踪显示目标位置

游戏蛮牛2019-02-14 14:40:23

哈喽,大家好,好久没和大家见面了,继今日起以后又会在蛮牛相继发表一些个人针对Unity的经验与理解,希望能和大家相互探讨,共同进步哟~

OK,闲话就不多说啦,直接上干货才是正题。


今天要与大家分享的是《目标屏幕位置追踪显示》,或许大家不太好理解。


 

(ps:图片来源公司项目截图,so,大家懂的,稍微马克下)

功能条件就是:
1.有boss存在

2.boss在屏幕外
3.界面显示boss方向


根据boss的不同方位不同,标注会在屏幕边缘不同位置显示。


当时拿到这个功能脑中一个闪现就是 “小地图”,可是仔细研究下来才发现完全不是一回事好吧,小地图 直接使用 UGUI RawImage 渲染就设置就可以了,而且小地图的标注 如果boss位置很远,渲染的地图区域小的话 根本就看不到,
这就与要实现的功能相违背啦,所以小地图的方式果断被否决,so,只有自己尝试着实现啦,下面将提供我的一个思路。

首先,搭建一个场景,场景内容包括-角色/Boss/相机/方向舵/UI显示的标注,
具体怎么搭建我就不在此过多描述啦(相信这点基本功大家还是有的)


东西很少只是做测试使用 。


OK,东西准备好啦,那就直接动手操作吧~


让我们一起分析下,第一步显示方向,也就是说要找到boss相对角色存在的方位(前后左右)及偏移(角度)求方向,向量常规写法如下:


public class ffffffff : MonoBehaviour

{

public GameObject obj;

public RectTransform _img;

void Update()

{

var dir = (obj.transform.position - transform.position).normalized;

float direction = Vector3.Dot(dir, transform.forward);

Vector3 u=  Vector3.Cross(dir, transform.forward);

if (direction > 1) { direction = 1f; }

if (direction < -1) { direction = -1f; }

direction = Mathf.Acos(direction) * Mathf.Rad2Deg;

Debug.Log("角度:" + direction + "---" + (u.y>0?"左边":"右边"));

_img.rotation =Quaternion.Euler(new Vector3(0, 0, direction * (u.y > 0 ? 1 : -1)));

}


让我们测试下效果,把脚本拖到场景角色上,然后,把boss拖给obj,运行。



大家可能已经发现现在我们的标志就会根据我们移动角色位置,同时指向boss角度位置(录制效果有点差,大家先将就看吧)


OK,既然通过以上脚本我们确定了角度方向,接下来就是让标注紧靠屏幕边缘移动吧。


这里实现了2种,运动轨迹,1.矩形;2.椭圆;


主要运用一些数学公式计算,这段代码太长了,还是点击原文查看吧~


以上代码属于该功能核心绑定代码,里面也有些额外的 如easyTouch移动操作等,代表绑定如下:



对了,相机的跟随代码并绑定, 如下:


using UnityEngine;

using System.Collections;

public class CameraFollowRole : MonoBehaviour

{

public Transform target;

public Vector3 offset;

public bool isStartFllow = false;

void Update()

{

if (isStartFllow)

{

if (!target)

return;

transform.position = target.position + offset;

}

}

}



OK,我们需要的东西搞定运行看结果


 

好啦 ,今天就这些吧,可能大家会说不是还有看见boss的时候标注隐藏 ,看不见才显示嘛~


额,这个自己可以加个距离判断或者使用OnBecameVisible()来判断是否在相机内,然后隐藏显示就行了哟~

点击原文链接下载测试工程项目包哦~


PS:我使用Unity5.2.2f版本开发测试的,低版本的同学打开可能会有场景丢失或easytouch不能使用,so,请按照上面的流程自行创建场景,和更新一个低版本的easytouch即可。

蛮牛社区(manew.com)分享最新的游戏研发和虚拟现实相关技术内容。


Copyright © 丰城计算器学习组@2017