TriggerPrefab 拖拽物体
模拟经营类游戏 有一个特点,就是 拖拽物体。常见的有《帝国》《红警》《部落战争》《凯撒大帝》等等
2d 拖拽 大部分都是 用 OnDrag 方法来 拖动物体,背包也是这么做。3d中拖拽方法很多,很多插件都 自带了一些demo。如 Grid Framework.unitypackage拖拽
如 TNet Tasharen Networking 2.0 拖拽
当然,我最喜欢的方式 ,还是 利用射线方式 自己写一个拖拽。
这些是网上朋友写的,我觉得还不错,分享一下。
using UnityEngine; using System.Collections;public class TriggerPrefab : MonoBehaviour {private Vector3 _vec3TargetScreenSpace;// 目标物体的屏幕空间坐标 private Vector3 _vec3TargetWorldSpace;// 目标物体的世界空间坐标 private Transform _trans;// 目标物体的空间变换组件 private Vector3 _vec3MouseScreenSpace;// 鼠标的屏幕空间坐标 private Vector3 _vec3Offset;// 偏移 public Material defaultMaterial;public Material redMaterial;//声明从鼠标发出一条射线clickRay Ray clickRay;//声明clickRay与游戏物体的碰撞 RaycastHit clickPoint;//声明clickRay与地面的碰撞 RaycastHit posPoint;//设置地面层,我的地面层是第8层,所以是8。不会设置层的话请看下边的Tips。LayerMask mask = 1 << 8;void Awake() { _trans = transform; }void Start(){}void Update(){clickRay = Camera.main.ScreenPointToRay(Input.mousePosition);}Vector3 oldPosition;void OnMouseDown(){// 把目标物体的世界空间坐标转换到它自身的屏幕空间坐标 _vec3TargetScreenSpace = Camera.main.WorldToScreenPoint(_trans.position);// 存储鼠标的屏幕空间坐标(Z值使用目标物体的屏幕空间坐标) _vec3MouseScreenSpace = new Vector3(Input.mousePosition.x, Input.mousePosition.y, _vec3TargetScreenSpace.z);// 计算目标物体与鼠标物体在世界空间中的偏移量 _vec3Offset = _trans.position - Camera.main.ScreenToWorldPoint(_vec3MouseScreenSpace);_vec3Offset.y = 0;//如果射线与物体相碰,则调用OnMouseDrag()oldPosition = _trans.position;if (Physics.Raycast(clickRay, out clickPoint)){OnMouseDrag();}}void OnMouseUp(){if (TriggerBool){transform.position = oldPosition; } }void OnMouseDrag(){//取射线与地面相碰的坐标,赋给mouseMove,再把mouseMove的x坐标和z坐标赋给物体,y坐标不变(因为是贴在地面上移动)Physics.Raycast(clickRay, out posPoint, Mathf.Infinity, mask.value);Vector3 mouseMove = posPoint.point;Vector3 move = (new Vector3(mouseMove.x, transform.position.y, mouseMove.z)) + _vec3Offset;Vector3 newMove = new Vector3();newMove.y = move.y;transform.position = move;return;}bool TriggerBool;void OnTriggerEnter(Collider other){TriggerBool = true;TintRed(TriggerBool);}void OnTriggerExit(Collider other){TriggerBool = false;TintRed(TriggerBool);}void TintRed(bool red){if (red){ renderer.material = redMaterial;}else{renderer.material = defaultMaterial;}}/******* void OnMouseDrag() { //取射线与地面相碰的坐标,赋给mouseMove,再把mouseMove的x坐标和z坐标赋给物体,y坐标不变(因为是贴在地面上移动) Physics.Raycast (clickRay ,out posPoint,Mathf.Infinity,mask.value); Vector3 mouseMove=posPoint.point; //令角色朝向行走方向 transform.LookAt(new Vector3 (mouseMove.x, transform.position.y, mouseMove.z)); transform.position = (new Vector3 (mouseMove.x, transform.position.y, mouseMove.z)); //播放行走动画,引号里改成你自己的动画名称 animation.CrossFade("walk"); return; }void OnMouseUp() { //鼠标松开时回到待机悬停动画,引号里改成你自己的动画名称 animation.CrossFade ("idle"); return; } * */ }
接下来几章,我还是要补充一些 插件,为后面 继续 人工智能 铺垫下
转载于:https://www.cnblogs.com/big-zhou/p/4155810.html
TriggerPrefab 拖拽物体相关推荐
- OpenGL实现在三维空间拖拽物体
最近本来想用OpenGL实现一个三维形变平台,但是没想到在鼠标交互这里就遇到了麻烦.OpenGL中并没有很实用的能够处理鼠标拖拽3D物体的办法,而我又不想导入外部的交互框架把程序搞得很冗杂.害,那咋办 ...
- unity2d里实现鼠标拖拽物体的功能
在 Unity 中实现鼠标拖拽物体的功能需要使用到 Unity 的 Physics 系统. 要实现鼠标拖拽物体,你需要在场景中添加以下内容: 一个 Rigidbody 2D 组件,用于控制物体的运动. ...
- Unity触摸屏幕 拖拽物体 旋转物体 放大缩小物体 单击 双击 长按
Unity触摸屏幕 拖拽物体 旋转物体 放大缩小物体 单击 双击 长按 拖拽物体 using System.Collections; using System.Collections.Generic; ...
- unity3d 鼠标延各个方向拖拽物体
using UnityEngine; using System.Collections;//选择轴向 public enum directionEnum{x_dir,y_dir,z_dir, } pu ...
- Unity移动---鼠标拖拽物体在3D空间移动(地面和非地面)
我这里脚本挂在了摄像机上: 下面是脚本: using System.Collections; using System.Collections.Generic; using UnityEngine;p ...
- Unity实用小工具或脚本——3D物体带坐标轴的拖拽
一.前言 我们最近要做一个线路的规划编辑,并且是在三维场景中,编辑完就立马能用.立马能用还好说,有特别多的轮子可以用,在三维场景中实时编辑就有点意思了.其实功能就是类似于在Unity的编辑界面操作一个 ...
- javascript小实例,PC网页里的拖拽(转)
这是现在的效果,可能改了一些,原来的效果是,里面的这张图是可以上下左右拖动的,然后房子上面的显示的楼栋号,也跟着图片一起移动,当时js能力还不行,未能实现项目经理的要求,不过后来项目经理又把这个效果推 ...
- js实现鼠标拖拽功能基本思路
如果要设置物体拖拽,那么必须使用三个事件,并且这三个事件的使用顺序不能颠倒. onmousedown:鼠标按下事件 onmousemove:鼠标移动事件 onmouseup:鼠标抬起事件 拖拽的基本原 ...
- Web前端JavaScript笔记(5)事件-拖拽
阻止默认行为和超链接 在浏览器上运行网页后,右击会弹出菜单,这属于浏览器的默认行为.如何禁止这一默认行为: <script>window.onload = function () {doc ...
最新文章
- Android视图组成View
- cad快捷键文件路径_办公格式转太难不会看这里!CAD、PDF、Word、Excel、TXT教你玩转...
- 构造方法 c# 0106
- 微信小程序 - 展开收缩列表
- bzoj3442学习小组
- js常用内建对象之:String对象
- webRTC之Mesh/MCU/SFU通信架构区别(九)
- 抖音视频水印如何去除掉?
- Redis和MySQL如何保持数据一致性
- 【LeetCode】233. 数字 1 的个数
- 关于Bmob后端云的使用
- 2022年镇海夏令营组合数学和数论班 —— 数学作业 1
- 《How to be nubility for coder》
- 火影忍者精剪版 纯战役没有回忆
- 2021-05-11 MongoDB面试题 MongoDB是什么
- 前端-element-ui
- 和客户沟通中能让你加分的英语细节
- Linux基础学习之Day7-2-LVM管理
- Windows使用VMware 安装macOS虚拟机
- vue之动画( 仿jquery的slideToggle动画效果 )