当前位置: 首页 > news >正文

unity3d拼图__附带资源

要达到吸附效果则需要每个拼图上挂载碰撞体

达到整张图片的替换效果需要选中所有拼图部件把材质球拖上去

制作材料球

脚本挂载到随便一个空物体上

using System.Collections;
using System.Collections.Generic;
using UnityEngine;public class PinTu : MonoBehaviour
{// 记录有没有拼图被选中private GameObject selectedObject;// 拼图预制体GameObject[] dragObj;// 记录拼图应该放的点GameObject[] dropObj;// Start is called before the first frame updateqvoid Start(){dragObj = GameObject.FindGameObjectsWithTag("drag");dropObj = GameObject.FindGameObjectsWithTag("drop");foreach (var item in dragObj){item.transform.position = new Vector3(Random.Range(-0.2f, 0.3f), 0.815f, Random.Range(-0.1f,0.4f));}}// Update is called once per framevoid Update(){// 如果按下了鼠标左键if (Input.GetMouseButtonDown(0)){// 选中的物体为空if (selectedObject == null){// 存储的射线信息RaycastHit hit = CastRay();// 碰到的物体有碰撞器if (hit.collider != null){// 如果标签不是drag直接返回if (!hit.collider.CompareTag("drag")){return;}// 碰到的物体标签是--drag,为selectedObject赋值selectedObject = hit.collider.gameObject;// 设置鼠标光标不可见Cursor.visible = false;}}// 选中物体之后,再按一下鼠标左键---放下物体else{// 记录鼠标点击的点Vector3 position = new Vector3(Input.mousePosition.x, Input.mousePosition.y, Camera.main.WorldToScreenPoint(selectedObject.transform.position).z);Vector3 worldPosition = Camera.main.ScreenToWorldPoint(position);#region  吸附//遍历每个放置点,找到和鼠标点击最近的点Vector3 tmpdrop = Vector3.zero;float minDistance = 10.0f;foreach (var item in dropObj){if (Vector3.Distance(item.transform.position, worldPosition) <= minDistance){minDistance = Vector3.Distance(item.transform.position, worldPosition);tmpdrop = item.transform.position;}}// 如果最小距离小于---限定值,说明在拼图位置上,就赋值,否则就是鼠标位置if (minDistance < 0.04f){// 赋值selectedObject.transform.position = tmpdrop + new Vector3(0, 0.003f, 0);}else{selectedObject.transform.position = worldPosition;}#endregion//selectedObject.transform.position = worldPosition;selectedObject = null;Cursor.visible = true;}}// 如果selectedObject不为空,说明点击到了物体,物体跟随鼠标移动if (selectedObject != null){// position存储的是鼠标的x,y坐标,自身的z坐标---屏幕坐标Vector3 position = new Vector3(Input.mousePosition.x, Input.mousePosition.y, Camera.main.WorldToScreenPoint(selectedObject.transform.position).z);// 将屏幕坐标,转换为世界坐标Vector3 worldPosition = Camera.main.ScreenToWorldPoint(position);// 为选中的物体赋值--这里的y是固定的0.25selectedObject.transform.position = new Vector3(worldPosition.x, 0.811f, worldPosition.z);// 按下鼠标的右键,旋转if (Input.GetMouseButtonDown(1)){selectedObject.transform.rotation = Quaternion.Euler(new Vector3(selectedObject.transform.rotation.eulerAngles.x,selectedObject.transform.rotation.eulerAngles.y + 90f,selectedObject.transform.rotation.eulerAngles.z));}}}// 返回射线碰撞信息private RaycastHit CastRay(){// 射线最远的点Vector3 screenMousePosFar = new Vector3(Input.mousePosition.x,Input.mousePosition.y,Camera.main.farClipPlane);// 射线最近的点Vector3 screenMousePosNear = new Vector3(Input.mousePosition.x,Input.mousePosition.y,Camera.main.nearClipPlane);Vector3 worldMousePosFar = Camera.main.ScreenToWorldPoint(screenMousePosFar);Vector3 worldMousePosNear = Camera.main.ScreenToWorldPoint(screenMousePosNear);RaycastHit hit;Physics.Raycast(worldMousePosNear, worldMousePosFar - worldMousePosNear, out hit);return hit;}
}

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 上书房信息咨询:消费者需求研究指标设计
  • 医院挂号系统的伪代码
  • 看图学sql之sql 中的UNION 和union all
  • html 基础标签
  • 深入解析Smarty SSTI 利用
  • 艾体宝干货丨OIDA之一:掌握数据包分析-学会观察
  • 橙子投屏,轻松连接大屏幕
  • 数学建模2024国赛时间及事项安排
  • 基础概念与简单数据结构的笔记02
  • Linux shell编程学习笔记74:sed命令——沧海横流任我行(中)
  • 滚珠丝杆与支撑座的标准安装与调试方法!
  • 命令执行漏洞-rce
  • C++学习笔记——三角形面积
  • 2.2.2 Posix API与网络协议栈 3
  • react redux和@reduxjs/toolkit工具
  • 分享一款快速APP功能测试工具
  • [LeetCode] Wiggle Sort
  • [微信小程序] 使用ES6特性Class后出现编译异常
  • 【前端学习】-粗谈选择器
  • ECS应用管理最佳实践
  • IIS 10 PHP CGI 设置 PHP_INI_SCAN_DIR
  • java B2B2C 源码多租户电子商城系统-Kafka基本使用介绍
  • Js实现点击查看全文(类似今日头条、知乎日报效果)
  • Laravel5.4 Queues队列学习
  • React Native移动开发实战-3-实现页面间的数据传递
  • select2 取值 遍历 设置默认值
  • SQLServer插入数据
  • Swoft 源码剖析 - 代码自动更新机制
  • 分享一个自己写的基于canvas的原生js图片爆炸插件
  • 复习Javascript专题(四):js中的深浅拷贝
  • 开源地图数据可视化库——mapnik
  • 前端工程化(Gulp、Webpack)-webpack
  • 前端技术周刊 2018-12-10:前端自动化测试
  • 如何邀请好友注册您的网站(模拟百度网盘)
  • 实战|智能家居行业移动应用性能分析
  • 小而合理的前端理论:rscss和rsjs
  • 学习笔记TF060:图像语音结合,看图说话
  • 优化 Vue 项目编译文件大小
  • 源码安装memcached和php memcache扩展
  • kubernetes资源对象--ingress
  • ​ 无限可能性的探索:Amazon Lightsail轻量应用服务器引领数字化时代创新发展
  • ​【C语言】长篇详解,字符系列篇3-----strstr,strtok,strerror字符串函数的使用【图文详解​】
  • ​一文看懂数据清洗:缺失值、异常值和重复值的处理
  • #使用清华镜像源 安装/更新 指定版本tensorflow
  • (04)Hive的相关概念——order by 、sort by、distribute by 、cluster by
  • (2)nginx 安装、启停
  • (2015)JS ES6 必知的十个 特性
  • (3)选择元素——(17)练习(Exercises)
  • (4)(4.6) Triducer
  • (4)事件处理——(6)给.ready()回调函数传递一个参数(Passing an argument to the .ready() callback)...
  • (Java)【深基9.例1】选举学生会
  • (动手学习深度学习)第13章 计算机视觉---图像增广与微调
  • (附源码)springboot人体健康检测微信小程序 毕业设计 012142
  • (附源码)springboot社区居家养老互助服务管理平台 毕业设计 062027
  • (七)Appdesigner-初步入门及常用组件的使用方法说明