工程在: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 | 连线题_画直线的方法相关推荐

  1. python画直线的方法

    python画直线的方法,下面介绍三种: 1.使用列表解析法,只需要添加一个数据类型的变量,然后在上面添加一系列的直线,即可得到一条直线. 5.使用循环解析法和 for循环解析法两种方法相结合来画直线 ...

  2. msdn画圆弧函数_画直线不简单!python-matplotlib告诉你为什么

    1 说明: ====== 1.1 python的matplotlib画直线,看似简单,其实很难,从简单到复杂,逐步深入,小白秒懂. 1.2 内容:画直线,画圆,画圆点,动画的单摆和圆套圆,好东西在后面 ...

  3. python怎么画线_python怎么画直线

    Tkinter是Python的标准 GUI 库.Python使用Tkinter可以快速的创建GUI应用程序. 由于 Tkinter 是内置到 python 的安装包中.只要安装好 Python 之后就 ...

  4. C语言画直线~Bresenham方法

    前言 由于项目上遇到了棘手的问题,给定坐标需要实现C绘制直线的驱动函数,绘制直线一般都是显示屏的底层函数,本想着找个显示屏的驱动看下drawline源码,但仔细想一想会不会底层用的是汇编尼,于是便放弃 ...

  5. catia如何画花键_画渐开线花键的方法

    齿轮的加工一般是仿型铣, 就是一个蜗杆状的道具切割, 虽然在 SW 中可以用这样的方式生 成, 但如果不是用于运动分析就没必要这样做, 本题因为要手工制作齿轮, 所以仍然要把轮 廓画出来,以方便打印成 ...

  6. 表格斜线 纯html实现画直线的方法

    很有意思的实现方式 通过添加很多个长宽都为1px的img对象来模拟直线:〉 简单的直线.小规模的还可以,还是觉得VML比较实用可以实现复杂的表头,还可以添加文字. 不过这种方法 很简单不需要应用VML ...

  7. html5点线的设置,html5 Canvas画图教程(2)—画直线与设置线条的样式如颜色/端点/交汇点...

    如果你还不知道canvas是什么,可以看看. 在学画画的时候,线条是最基本的了,而线条的连接可以组成任何图形.在canvas中也是如此. 在开始之前我们先拿出画布和画笔: 复制代码代码如下: var ...

  8. canvas画图--流畅没有齿痕的线,图像画线

    画图,首先要获取鼠标位置,当鼠标在画图板上移动时,随之画线. 1.画图板canvas,监听鼠标事件 2.获取鼠标事件,得到鼠标位置. var mouse = {x: 0, y: 0}; //起始鼠标位 ...

  9. java画虚线_画流动虚线框(java) | 学步园

    前两天写了个作业:在面板(Panel)上显示一张图片,并能够用鼠标随意拖动,将图片放置于任何位置. 见:http://blog.csdn.net/caoxiongjun/archive/2006/09 ...

最新文章

  1. 费用流:spfa Dijkstra
  2. oracle中directory的使用
  3. 第三次学JAVA再学不好就吃翔(part117)--单例设计模式
  4. 大数据时代的数据存储,非关系型数据库MongoDB(一)(转)
  5. jdk HashSet源码解读
  6. 腾讯云直播开发日记 (二)附近直播-直播礼物-直播回放
  7. Python 将 QQ 聊天记录生成词云(分手了如何欢度情人节?)
  8. 20年前的中国人怎么做3A大作?
  9. UNITY接入ANDROID密匙
  10. android博客园蓝牙指令,【安卓相关】蓝牙开发、扫描、通知、发送指令
  11. 修复完浏览器后每次打开ie8都会自动弹出管理加载项,请问怎样才能不弹出
  12. 武汉大学计算机学院参考书,武汉大学计算机应用技术研究生考试科目和考研参考书目...
  13. 接口测试的流程和步骤,主要测试哪些方面,测试工具,测试用例,以及测试框架
  14. 微信小程序获取昵称,头像
  15. 读Docker技术入门与实战第二版-杨保华-知识总结
  16. 详解SEO搜索引擎优化
  17. 解读RF放大器规格:输出电压/电流和1dB压缩点
  18. call、ret、retf 指令详解
  19. 有没有比QQ更好用的即时通讯软件,出色的沟通软件如何选择
  20. 勘测定界土地利用现状表生成—(依据地块和权属统计)

热门文章

  1. 用jQuery实现9宫格抽奖
  2. ADF7901BRUZ ASK/FSK发射器 ISM频段
  3. 清华大学镜像站miniconda下载地址
  4. ubuntu 16:使用系统自带的中文输入法
  5. Css Reset -Css样式重置
  6. 信息系统安全等级保护流程
  7. Chrome浏览器如何导入证书(最新!)
  8. 12v继电器驱动电路
  9. [ansible系列③]Ansible Inventory配置及详解
  10. 在html中设置表格标题的是什么标记,Html网页表格结构化标记的应用