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

相关文章

java 恺撒加密/解密实现原理(附带源码)

《java恺撒加密/解密实现原理(附带源码)》本文介绍Java实现恺撒加密与解密,通过固定位移量对字母进行循环替换,保留大小写及非字母字符,由于其实现简单、易于理解,恺撒加密常被用作学习加密算法的入... 目录Java 恺撒加密/解密实现1. 项目背景与介绍2. 相关知识2.1 恺撒加密算法原理2.2 Ja

Android实现图片浏览功能的示例详解(附带源码)

《Android实现图片浏览功能的示例详解(附带源码)》在许多应用中,都需要展示图片并支持用户进行浏览,本文主要为大家介绍了如何通过Android实现图片浏览功能,感兴趣的小伙伴可以跟随小编一起学习一... 目录一、项目背景详细介绍二、项目需求详细介绍三、相关技术详细介绍四、实现思路详细介绍五、完整实现代码

通过配置nginx访问服务器静态资源的过程

《通过配置nginx访问服务器静态资源的过程》文章介绍了图片存储路径设置、Nginx服务器配置及通过http://192.168.206.170:8007/a.png访问图片的方法,涵盖图片管理与服务... 目录1.图片存储路径2.nginx配置3.访问图片方式总结1.图片存储路径2.nginx配置

Go语言使用sync.Mutex实现资源加锁

《Go语言使用sync.Mutex实现资源加锁》数据共享是一把双刃剑,Go语言为我们提供了sync.Mutex,一种最基础也是最常用的加锁方式,用于保证在任意时刻只有一个goroutine能访问共享... 目录一、什么是 Mutex二、为什么需要加锁三、实战案例:并发安全的计数器1. 未加锁示例(存在竞态)

C++中RAII资源获取即初始化

《C++中RAII资源获取即初始化》RAII通过构造/析构自动管理资源生命周期,确保安全释放,本文就来介绍一下C++中的RAII技术及其应用,具有一定的参考价值,感兴趣的可以了解一下... 目录一、核心原理与机制二、标准库中的RAII实现三、自定义RAII类设计原则四、常见应用场景1. 内存管理2. 文件操

Rust中的Drop特性之解读自动化资源清理的魔法

《Rust中的Drop特性之解读自动化资源清理的魔法》Rust通过Drop特性实现了自动清理机制,确保资源在对象超出作用域时自动释放,避免了手动管理资源时可能出现的内存泄漏或双重释放问题,智能指针如B... 目录自动清理机制:Rust 的析构函数提前释放资源:std::mem::drop android的妙

解读静态资源访问static-locations和static-path-pattern

《解读静态资源访问static-locations和static-path-pattern》本文主要介绍了SpringBoot中静态资源的配置和访问方式,包括静态资源的默认前缀、默认地址、目录结构、访... 目录静态资源访问static-locations和static-path-pattern静态资源配置

python使用watchdog实现文件资源监控

《python使用watchdog实现文件资源监控》watchdog支持跨平台文件资源监控,可以检测指定文件夹下文件及文件夹变动,下面我们来看看Python如何使用watchdog实现文件资源监控吧... python文件监控库watchdogs简介随着Python在各种应用领域中的广泛使用,其生态环境也

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