这个脚本用来让鼠标点击屏幕,控制物体移动的方向和速度

using System.Collections;// 使用Unity的命名空间,主要包含一些基本的集合和Unity特定的集合类
using System.Collections.Generic;
// 引入UnityEngine命名空间,这个命名空间包含了Unity引擎的核心类和功能
using UnityEngine;

// 定义一个名为MouseRayPoint的公共类,继承自MonoBehaviour类,这使得这个类可以附加到Unity的游戏对象上
public class MouseRayPoint : MonoBehaviour
{
    
    Vector3 target;// 定义一个Vector3类型的变量target,用于存储目标位置

    public float smoothTime = 5f;// 定义一个公共浮点数变量smoothTime,表示平滑移动的时间

    private Vector3 velocity = Vector3.zero;// 定义一个私有的Vector3类型的变量velocity,初始化为零向量

    GameObject mainRole; // 定义一个私有的GameObject类型的变量mainRole,用于存储场景中的某个对象

    public float speedMove = 10f;// 定义一个公共浮点数变量speedMove,表示移动的速度

   
    private void Start()
    {
        mainRole = GameObject.Find("Sphere"); // 通过GameObject.Find方法找到名为"Cube"的对象,并将其赋值给mainRole变量
    }

    // Unity的Update方法,每帧都会执行,这里主要用来处理鼠标射线以及物体的平滑移动
    void Update()
    {
        Ray oneRayMouse = Camera.main.ScreenPointToRay(Input.mousePosition);// 使用Camera的ScreenPointToRay方法将鼠标位置转换为射线
        
        RaycastHit OneShotOBJ; // RaycastHit类型的一个变量,用于存储射线投射的结果

        Physics.Raycast(oneRayMouse, out OneShotOBJ); // 使用Physics的Raycast方法对场景进行射线投射

        if (Input.GetMouseButtonDown(0))// 判断鼠标左键是否按下
        {
       
            Debug.Log(OneShotOBJ.point + "== " + OneShotOBJ.transform.name);// 如果鼠标左键被按下,打印出投射结果中物体的点和平移量(如果存在的话)

            target = OneShotOBJ.point;// 将鼠标点击位置设为追踪目标
        }

     
        if (target != null) // 如果存在追踪目标
        {
            FollowPointSmooth(); // 调用FollowPointSmooth方法使物体平滑追踪到目标点
        }
    } // end Update

    void FollowPointSmooth()// 定义一个名为FollowPointSmooth的方法,用于使物体平滑移动到新的位置并朝向目标点
    {
        
        Vector3 targetPosition = target + new Vector3(0, 1, -1);//计算新的位置,给目标位置添加了一个偏差(这里是一个垂直于地面的向量)
                                                                //                                                                             
        // 使用Vector3的SmoothDamp方法使物体平滑移动到新的位置,平滑时间为smoothTime,速度为speedMove,位移为targetPosition减去当前位置
        mainRole.transform.position = Vector3.SmoothDamp(mainRole.transform.position, targetPosition, ref velocity, smoothTime); //平滑移动到新的位置

        // 使物体朝向目标点加上一个垂直于地面的向量(这里是一个垂直向上向下的向量)的偏移量,使物体始终朝向目标点方向但是并不完全对齐目标点
        mainRole.transform.LookAt(target + new Vector3(0, 1.5f, 0));
    }

}// end class

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值