unity3d拼图__附带资源

2024-08-27 20:20
文章标签 附带 资源 unity3d 拼图

本文主要是介绍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;}
}

这篇关于unity3d拼图__附带资源的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1112678

相关文章

Unity3D自带Mouse Look鼠标视角代码解析。

Unity3D自带Mouse Look鼠标视角代码解析。 代码块 代码块语法遵循标准markdown代码,例如: using UnityEngine;using System.Collections;/// MouseLook rotates the transform based on the mouse delta./// Minimum and Maximum values can

Unity3D 运动之Move函数和translate

CharacterController.Move 移动 function Move (motion : Vector3) : CollisionFlags Description描述 A more complex move function taking absolute movement deltas. 一个更加复杂的运动函数,每次都绝对运动。 Attempts to

Python:豆瓣电影商业数据分析-爬取全数据【附带爬虫豆瓣,数据处理过程,数据分析,可视化,以及完整PPT报告】

**爬取豆瓣电影信息,分析近年电影行业的发展情况** 本文是完整的数据分析展现,代码有完整版,包含豆瓣电影爬取的具体方式【附带爬虫豆瓣,数据处理过程,数据分析,可视化,以及完整PPT报告】   最近MBA在学习《商业数据分析》,大实训作业给了数据要进行数据分析,所以先拿豆瓣电影练练手,网络上爬取豆瓣电影TOP250较多,但对于豆瓣电影全数据的爬取教程很少,所以我自己做一版。 目

49个权威的网上学习资源网站

艺术与音乐 Dave Conservatoire — 一个完全免费的音乐学习网站,口号是“让每一个人都可以接受世界级的音乐教育”,有视频,有练习。 Drawspace — 如果你想学习绘画,或者提高自己的绘画技能,就来Drawspace吧。 Justin Guitar — 超过800节免费的吉他课程,有自己的app,还有电子书、DVD等实用内容。 数学,数据科学与工程 Codecad

12C 新特性,MOVE DATAFILE 在线移动 包括system, 附带改名 NID ,cdb_data_files视图坏了

ALTER DATABASE MOVE DATAFILE  可以改名 可以move file,全部一个命令。 resue 可以重用,keep好像不生效!!! system照移动不误-------- SQL> select file_name, status, online_status from dba_data_files where tablespace_name='SYSTEM'

汇编:嵌入式软件架构学习资源

成为嵌入式软件架构设计师需要掌握多方面的知识,包括嵌入式系统、实时操作系统、硬件接口、软件设计模式等。 以下是一些推荐的博客和网站,可以帮助你深入学习嵌入式软件架构设计: ### 1. **Embedded.com**    - **网址**: [Embedded.com](https://www.embedded.com/)    - **简介**: 这是一个专注于嵌入式系统设计的专业网

8阶段项目:五子棋(附带源码)

8阶段项目:五子棋 8.1-技术实现 1.静态变量 静态变量只能定义在类中,不能定义在方法中。静态变量可以在static修饰的方法中使用,也可以在非静态的方法中访问。主要解决在静态方法中不能访问非静态的变量。 2.静态方法 静态方法就相当于一个箱子,只是这个箱子中装的是代码,需要使用这些代码的时候,就把这个箱子放在指定的位置即可。   /*** 静态变量和静态方法*/public cl

Unity 资源 之 Super Confetti FX:点亮项目的璀璨粒子之光

Unity 资源 之 Super Confetti FX:点亮项目的璀璨粒子之光 一,前言二,资源包内容三,免费获取资源包 一,前言 在创意的世界里,每一个细节都能决定一个项目的独特魅力。今天,要向大家介绍一款令人惊艳的粒子效果包 ——Super Confetti FX。 二,资源包内容 💥充满活力与动态,是 Super Confetti FX 最显著的标签。它宛如一位

caffe训练openpose相关资源

CPMTransformationParameter参数解析: https://www.jianshu.com/p/063a2159f0f2 genLMDB.py: https://www.jianshu.com/p/1cae32cbd36d OpenPose 参数说明: https://blog.csdn.net/zziahgf/article/details/84668319 openp

ubuntu内存资源使用情况监视

此处分享一个可以查看ubuntu系统中资源使用情况的指令,只需要在终端中输入一下这条指令即可: gnome-system-monitor