using UnityEngine;
using System.Collections;
public class MoveObject : MonoBehaviour {
/// <summary>
/// 射线碰撞的结构
/// </summary>
private RaycastHit m_rayhit;
/// <summary>
/// 鼠标拾取的有效距离
/// </summary>
private float m_fDistance = 20f;
/// <summary>
/// 射线选取的游戏物体
/// </summary>
private GameObject m_obSelected;
/// <summary>
/// 记录鼠标移动前一帧的位置
/// </summary>
private Vector3 m_v3OldMousePos;
void Update () {
// 当鼠标按下时选取
if (Input.GetMouseButtonDown(0))
{
Ray selectedRay = Camera.main.ScreenPointToRay(Input.mousePosition);
RaycastHit selectedRayHit;
if (Physics.Raycast(selectedRay, out selectedRayHit, m_fDistance, LayerMask.GetMask("Ornament")))
{
m_obSelected = selectedRayHit.collider.gameObject;
}
}
// 撤销选中目标
if (Input.GetMouseButtonUp(0))
{
m_obSelected = null;
}
// 鼠标长按投射参照物(地面,墙体),进行位移
if (Input.GetMouseButton(0) && m_obSelected)
{
Vector3 v3CurMousePos = Input.mousePosition;
//拖拽
if (v3CurMousePos != m_v3OldMousePos)
{
Ray ray = Camera.main.ScreenPointToRay(v3CurMousePos);
//选取标记为Ref的游戏物体(地面,墙体)
if (Physics.Raycast(ray, out m_rayhit, m_fDistance, LayerMask.GetMask("Ref")))
{
MoveOrnament();
}
}
m_v3OldMousePos = v3CurMousePos;
}
}
/// <summary>
/// 移动选中的摆件
/// </summary>
private void MoveOrnament()
{
//获取射线碰撞到的点
Vector3 movePos = m_rayhit.point;
// 限制y轴坐标
movePos.y = m_obSelected.transform.position.y;
m_obSelected.transform.position = movePos;
}
}
Unity3D 类似COC的鼠标拾取游戏物体并在限定区域摆放
最新推荐文章于 2024-06-05 10:51:31 发布