Unity:物体在指定地面物体上跟随鼠标移动

功能描述

    当玩家移动鼠标时,场景中的物体只能在指定的地面物体上跟随鼠标移动。如果鼠标移动到其他物体或物体自身上,物体不会跟随移动。

实现步骤

    添加3D物体:在场景中创建一个3D物体,比如一个球体(Sphere),作为跟随鼠标移动的物体。

    创建地面物体:在场景中创建一个平面(Plane),作为指定的地面物体,并为其设置一个Tag(例如Ground)。

    脚本代码:

using UnityEngine;

public class FollowMouse: MonoBehaviour
{
    // 移动速度,可以在Inspector面板中调整
    public float moveSpeed = 10f;

    // 物体与地面的高度差
    public float heightOffset = 1f;

    // 指定的地面物体的Tag
    public string groundTag = "Ground";

    void Update()
    {
        // 获取鼠标在屏幕上的位置
        Vector3 mousePosition = Input.mousePosition;

        // 将鼠标位置转换为世界坐标
        Ray ray = Camera.main.ScreenPointToRay(mousePosition);
        RaycastHit hit;

        // 如果射线击中某个物体
        if (Physics.Raycast(ray, out hit))
        {
            // 检查击中的物体是否是指定的地面物体
            if (hit.collider.CompareTag(groundTag))
            {
                // 计算目标位置
                Vector3 targetPosition = new Vector3(hit.point.x, hit.point.y + heightOffset, hit.point.z);

                // 平滑移动物体到目标位置
                transform.position = Vector3.Lerp(transform.position, targetPosition, moveSpeed * Time.deltaTime);
            }
        }
    }
}

    挂载脚本:FollowMouse脚本拖拽到场景中的需要跟随移动的物体上,使其成为需要西东物体的组件。

脚本函数:

  • ScreenPointToRay():Unity中的内置函数,用于将屏幕上的点转换为一条射线。

  • Physics.Raycast():Unity中的内置函数,用于检测射线是否击中某个物体。

  • CompareTag():Unity中的内置函数,用于比较物体的Tag是否与指定的Tag一致。

  • Vector3.Lerp():Unity中的内置函数,用于在两个向量之间进行线性插值,实现平滑移动。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值