Unity | 连线题_画直线的方法
工程在:unity连线题画直线的工程-C#文档类资源-CSDN下载
一、弄一个自己喜欢的直线
我发现如果需要一些小元素,PPT是一个很好的素材库。
调好颜色,长度,透明度,宽度等,右键另存为就可以得到一个PNG,对不会画画PS的程序猿们无限友好
二、基本逻辑
1.搭一个界面(一个背景,小蓝假装问题,小绿假装答案,目标是连起来)
2.点击小蓝的时候,小蓝作为起点(获取小蓝的坐标)
3.如果压着鼠标不放,拖动,会有一条直线从小蓝到鼠标跟着动
4.放手的时候,如果鼠标不在小绿上,直线消失
5.如果鼠标在小绿身上,画一条小蓝到小绿的直线
三、解决逻辑里的每一条
<一>、把小蓝做成按钮,当点击小蓝的时候,小蓝作为起点(获取小蓝的坐标),线条出现,当放开按钮的时候,线条消失。
放直线:
先建一个父物体,把线放进去,放父物体是因为你连对了要存一下这个对的线,让对的线留在里面,有父物体好管理。
这段代码的详细解析在:
Unity | 什么是委托?_菌菌巧乐兹的博客-CSDN博客
void Start(){//让干这件事的按钮上加EventTrigger组件button_Blue.gameObject.AddComponent<EventTrigger>();UnityAction<BaseEventData> click = new UnityAction<BaseEventData>(DrawLine);EventTrigger.Entry myclick = new EventTrigger.Entry();myclick.eventID = EventTriggerType.PointerDown;myclick.callback.AddListener(click);//把之前写好的那些步骤都给它button_Blue.gameObject.GetComponent<EventTrigger>().triggers.Add(myclick);UnityAction<BaseEventData> clickUp = new UnityAction<BaseEventData>(DispearLine);EventTrigger.Entry myclick2 = new EventTrigger.Entry();myclick2.eventID= EventTriggerType.PointerUp;myclick2.callback.AddListener (clickUp);//把之前写好的那些步骤都给它button_Blue.gameObject.GetComponent<EventTrigger>().triggers.Add(myclick2);}private void DrawLine(BaseEventData baseEventData){//获取按钮的位置,为后面划线做准备position_start = button_Blue.transform.position;//线出现Line.SetActive(true);}private void DispearLine(BaseEventData baseEventData){//线消失Line.SetActive(false);}
<二>、如果压着鼠标不放,拖动,会有一条直线从小蓝到鼠标跟着动
分析:
1. 建立一个bool press,一直更新鼠标的坐标
2.我们需要他显示成我们想要的样子,所以要更改它的长度和角度
实现方法:
1. 当鼠标按下的时候,持续更新鼠标坐标
bool press = false;Vector3 position_start;Vector3 position_end ;private void Update(){if (press == true){position_end = Input.mousePosition;}else {position_end = Vector3.zero;}}private void DrawLine(BaseEventData baseEventData){press = true;//获取按钮的位置,为后面划线做准备position_start = button_Blue.transform.position;//让线的开头放在按钮的位置Line.transform.position = position_start;//线出现Line.SetActive(true);}private void DispearLine(BaseEventData baseEventData){press = false;//线消失Line.SetActive(false);}
2.先改线的坐标系,
本来线的坐标在中间,我们需要坐标移到
这样我们方便设置起点,改变大小起点不会变
改成这样就行了
3.计算线的长度
有专门的方法,只需要输入起始坐标和结束坐标就行了
//计算线的长度private float GetDistance(Vector3 startPos, Vector3 endPos){float distance = Vector3.Distance(startPos, endPos);return distance;}
3.计算线的角度
private float GetAngle(Vector3 startPos, Vector3 endPos){Vector3 dir = endPos - startPos;float angle = Vector3.Angle(Vector3.right, dir);Vector3 cross = Vector3.Cross(Vector3.right, dir);float dirF = cross.z > 0 ? 1 : -1;angle = angle * dirF;return angle;}
4.在update里不停的改变线的长度和角度
private void Update(){if (press == true){position_end = Input.mousePosition;//得到线的长度,去改变Line的长度Line.GetComponent<RectTransform>().sizeDelta = new Vector2(GetDistance(position_start, position_end), Line.GetComponent<RectTransform>().sizeDelta.y);//得到线的角度,去改变Line的角度Line.GetComponent<RectTransform>().eulerAngles = new Vector3(0, 0, GetAngle(position_start, position_end));}else {position_end = Vector3.zero;}}
<三>、放手的时候,如果鼠标在小绿上,画一条小蓝到小绿的直线
在鼠标放开的时候,发射一条射线,如果打到小绿,就画这条线
if (Input.GetMouseButtonUp(0)) {PointerEventData eventDate = new PointerEventData(EventSystem.current);eventDate.position = Input.mousePosition;List<RaycastResult> raycastResults = new List<RaycastResult>();EventSystem.current.RaycastAll(eventDate, raycastResults);if (raycastResults.Count > 0 && raycastResults[0].gameObject.name == "答案") {SetLine(raycastResults[0].gameObject.GetComponent<RectTransform>());}}private void SetLine(RectTransform rt) {position_end = rt.position;//得到线的长度,去改变Line的长度Line.GetComponent<RectTransform>().sizeDelta = new Vector2(GetDistance(position_start, position_end), Line.GetComponent<RectTransform>().sizeDelta.y);//得到线的角度,去改变Line的角度Line.GetComponent<RectTransform>().eulerAngles = new Vector3(0, 0, GetAngle(position_start, position_end));GameObject obj = Instantiate(Line, Line.transform.parent);obj.SetActive(true);}
Unity | 连线题_画直线的方法相关推荐
- python画直线的方法
python画直线的方法,下面介绍三种: 1.使用列表解析法,只需要添加一个数据类型的变量,然后在上面添加一系列的直线,即可得到一条直线. 5.使用循环解析法和 for循环解析法两种方法相结合来画直线 ...
- msdn画圆弧函数_画直线不简单!python-matplotlib告诉你为什么
1 说明: ====== 1.1 python的matplotlib画直线,看似简单,其实很难,从简单到复杂,逐步深入,小白秒懂. 1.2 内容:画直线,画圆,画圆点,动画的单摆和圆套圆,好东西在后面 ...
- python怎么画线_python怎么画直线
Tkinter是Python的标准 GUI 库.Python使用Tkinter可以快速的创建GUI应用程序. 由于 Tkinter 是内置到 python 的安装包中.只要安装好 Python 之后就 ...
- C语言画直线~Bresenham方法
前言 由于项目上遇到了棘手的问题,给定坐标需要实现C绘制直线的驱动函数,绘制直线一般都是显示屏的底层函数,本想着找个显示屏的驱动看下drawline源码,但仔细想一想会不会底层用的是汇编尼,于是便放弃 ...
- catia如何画花键_画渐开线花键的方法
齿轮的加工一般是仿型铣, 就是一个蜗杆状的道具切割, 虽然在 SW 中可以用这样的方式生 成, 但如果不是用于运动分析就没必要这样做, 本题因为要手工制作齿轮, 所以仍然要把轮 廓画出来,以方便打印成 ...
- 表格斜线 纯html实现画直线的方法
很有意思的实现方式 通过添加很多个长宽都为1px的img对象来模拟直线:〉 简单的直线.小规模的还可以,还是觉得VML比较实用可以实现复杂的表头,还可以添加文字. 不过这种方法 很简单不需要应用VML ...
- html5点线的设置,html5 Canvas画图教程(2)—画直线与设置线条的样式如颜色/端点/交汇点...
如果你还不知道canvas是什么,可以看看. 在学画画的时候,线条是最基本的了,而线条的连接可以组成任何图形.在canvas中也是如此. 在开始之前我们先拿出画布和画笔: 复制代码代码如下: var ...
- canvas画图--流畅没有齿痕的线,图像画线
画图,首先要获取鼠标位置,当鼠标在画图板上移动时,随之画线. 1.画图板canvas,监听鼠标事件 2.获取鼠标事件,得到鼠标位置. var mouse = {x: 0, y: 0}; //起始鼠标位 ...
- java画虚线_画流动虚线框(java) | 学步园
前两天写了个作业:在面板(Panel)上显示一张图片,并能够用鼠标随意拖动,将图片放置于任何位置. 见:http://blog.csdn.net/caoxiongjun/archive/2006/09 ...
最新文章
- 费用流:spfa Dijkstra
- oracle中directory的使用
- 第三次学JAVA再学不好就吃翔(part117)--单例设计模式
- 大数据时代的数据存储,非关系型数据库MongoDB(一)(转)
- jdk HashSet源码解读
- 腾讯云直播开发日记 (二)附近直播-直播礼物-直播回放
- Python 将 QQ 聊天记录生成词云(分手了如何欢度情人节?)
- 20年前的中国人怎么做3A大作?
- UNITY接入ANDROID密匙
- android博客园蓝牙指令,【安卓相关】蓝牙开发、扫描、通知、发送指令
- 修复完浏览器后每次打开ie8都会自动弹出管理加载项,请问怎样才能不弹出
- 武汉大学计算机学院参考书,武汉大学计算机应用技术研究生考试科目和考研参考书目...
- 接口测试的流程和步骤,主要测试哪些方面,测试工具,测试用例,以及测试框架
- 微信小程序获取昵称,头像
- 读Docker技术入门与实战第二版-杨保华-知识总结
- 详解SEO搜索引擎优化
- 解读RF放大器规格:输出电压/电流和1dB压缩点
- call、ret、retf 指令详解
- 有没有比QQ更好用的即时通讯软件,出色的沟通软件如何选择
- 勘测定界土地利用现状表生成—(依据地块和权属统计)