模拟经营类游戏 有一个特点,就是 拖拽物体。常见的有《帝国》《红警》《部落战争》《凯撒大帝》等等

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 拖拽物体相关推荐

  1. OpenGL实现在三维空间拖拽物体

    最近本来想用OpenGL实现一个三维形变平台,但是没想到在鼠标交互这里就遇到了麻烦.OpenGL中并没有很实用的能够处理鼠标拖拽3D物体的办法,而我又不想导入外部的交互框架把程序搞得很冗杂.害,那咋办 ...

  2. unity2d里实现鼠标拖拽物体的功能

    在 Unity 中实现鼠标拖拽物体的功能需要使用到 Unity 的 Physics 系统. 要实现鼠标拖拽物体,你需要在场景中添加以下内容: 一个 Rigidbody 2D 组件,用于控制物体的运动. ...

  3. Unity触摸屏幕 拖拽物体 旋转物体 放大缩小物体 单击 双击 长按

    Unity触摸屏幕 拖拽物体 旋转物体 放大缩小物体 单击 双击 长按 拖拽物体 using System.Collections; using System.Collections.Generic; ...

  4. unity3d 鼠标延各个方向拖拽物体

    using UnityEngine; using System.Collections;//选择轴向 public enum directionEnum{x_dir,y_dir,z_dir, } pu ...

  5. Unity移动---鼠标拖拽物体在3D空间移动(地面和非地面)

    我这里脚本挂在了摄像机上: 下面是脚本: using System.Collections; using System.Collections.Generic; using UnityEngine;p ...

  6. Unity实用小工具或脚本——3D物体带坐标轴的拖拽

    一.前言 我们最近要做一个线路的规划编辑,并且是在三维场景中,编辑完就立马能用.立马能用还好说,有特别多的轮子可以用,在三维场景中实时编辑就有点意思了.其实功能就是类似于在Unity的编辑界面操作一个 ...

  7. javascript小实例,PC网页里的拖拽(转)

    这是现在的效果,可能改了一些,原来的效果是,里面的这张图是可以上下左右拖动的,然后房子上面的显示的楼栋号,也跟着图片一起移动,当时js能力还不行,未能实现项目经理的要求,不过后来项目经理又把这个效果推 ...

  8. js实现鼠标拖拽功能基本思路

    如果要设置物体拖拽,那么必须使用三个事件,并且这三个事件的使用顺序不能颠倒. onmousedown:鼠标按下事件 onmousemove:鼠标移动事件 onmouseup:鼠标抬起事件 拖拽的基本原 ...

  9. Web前端JavaScript笔记(5)事件-拖拽

    阻止默认行为和超链接 在浏览器上运行网页后,右击会弹出菜单,这属于浏览器的默认行为.如何禁止这一默认行为: <script>window.onload = function () {doc ...

最新文章

  1. Android视图组成View
  2. cad快捷键文件路径_办公格式转太难不会看这里!CAD、PDF、Word、Excel、TXT教你玩转...
  3. 构造方法 c# 0106
  4. 微信小程序 - 展开收缩列表
  5. bzoj3442学习小组
  6. js常用内建对象之:String对象
  7. webRTC之Mesh/MCU/SFU通信架构区别(九)
  8. 抖音视频水印如何去除掉?
  9. Redis和MySQL如何保持数据一致性
  10. 【LeetCode】233. 数字 1 的个数
  11. 关于Bmob后端云的使用
  12. 2022年镇海夏令营组合数学和数论班 —— 数学作业 1
  13. 《How to be nubility for coder》
  14. 火影忍者精剪版 纯战役没有回忆
  15. 2021-05-11 MongoDB面试题 MongoDB是什么
  16. 前端-element-ui
  17. 和客户沟通中能让你加分的英语细节
  18. Linux基础学习之Day7-2-LVM管理
  19. Windows使用VMware 安装macOS虚拟机
  20. vue之动画( 仿jquery的slideToggle动画效果 )

热门文章

  1. windows虚拟内存管理
  2. 如何下载及使用网页制作中的 iconfont 矢量字体图标?
  3. 安卓手势处理(二) MotionEvent
  4. 【华为OD】| 密室逃生游戏_逻辑分析
  5. 面试——异步FIFO详解
  6. Patroni Failover logical slots
  7. Action 中获取表单数据的三种方式
  8. Communications link failure解决方案
  9. Cocos 知乎官方账号已开通!
  10. 计算机csp考试模拟题,CSP-S初赛模拟题笔记(二)