Unity3D 类似COC的鼠标拾取游戏物体并在限定区域摆放

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;
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值