Unity3D三维坐标(X,Z轴)下物体拖动移动(贴地面移动)实现并实现物体碰撞检测

之前做过一个在Unity中实现二维(X,Z轴)拖动的效果,思路是直接获取鼠标坐标并且将其赋给GameObject。然而在三维(X,Y轴)的移动中,因为鼠标对于Scene中并没有Z轴的概念,因此无法使用直接赋值的方法来移动GameObject。所以在此引用了Unity中射线的概念来实现物体的三维移动,但是在物体的移动方面,因为物体也是通过射线碰撞位置去改变物体的坐标,因此会出现两个物体无法完成碰撞并且重叠的现象,因此想到了可以通过记录前一帧物体位置的方法,并结合碰撞器,当检测到碰撞时即返回上一帧的位置来解决碰撞的问题。具体代码如下所示:

using UnityEngine;
using System.Collections;
//通过射线控制物体贴地面移动
public class mouseDrag : MonoBehaviour {

//声明从鼠标发出一条射线clickRay
Ray clickRay;

//声明clickRay与游戏物体的碰撞
RaycastHit clickPoint;

//声明isCollided变量和canMove变量,记录是否碰撞和是否可以移动
private bool isCollided = false;
private bool canMove = true;

//声明clickRay与地面的碰撞
RaycastHit posPoint;

//设置地面层,我的地面层是第8层,所以是8。
LayerMask mask=1<<8;

//初始化父物体和速度变量
GameObject parent=null;
public float speed=10f;

//初始化位置信息
public Vector3 old;
void Start () {
}
void Update(){

    clickRay=Camera.main.ScreenPointToRay(Input.mou
  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值