Unity笔记

Unity笔记:移动物体到鼠标点击位置

Tags:鼠标点击 移动物体 Unity


实现效果

鼠标右键点击场景的某个位置,移动一个物体到点击处


代码如下
首先,声明几个变量:

    private bool isMove;            //是否移动
    private bool isGround;          //点击的点,射线是否到了地面
    private RaycastHit hitInfo;     //
    public float moveSpeed = 5.0f;  //移动速度

然后:

    void Start () {     //初始化
        isMove = false;
        isGround = false;
    }

    void Update () {    //每帧调用,在这里调用此函数
        MouseControllerMove();
    }

    void MouseControllerMove() {    //鼠标控制移动
        GetTargetPoint();               //得到点击点的信息
        LookAtTarget(hitInfo.point);    //转向点击的方向
        MovePlayer(hitInfo.point);      //移动物体到点击的位置
    }

    void GetTargetPoint()   //得到点击点的信息
    {
        if (Input.GetMouseButtonDown(1))    //鼠标右键按下
        {
            Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition);  //从相机发出一条射线
            isGround = Physics.Raycast(ray, out hitInfo);
            if (isGround && hitInfo.collider.tag == "Ground")
            {
                isMove = true;  //如果是地面,则将要移动
            }
        }
    }

    void LookAtTarget(Vector3 hitPoint) {
        if (isMove) {   //如果要移动,先看向移动的方向,LookAt()为Unity自带的函数
            transform.LookAt(hitInfo.point);
        } 
    }

    void MovePlayer(Vector3 hitPoint) {
        if (isMove) {
            float distance = Vector3.Distance(hitInfo.point, transform.position);//物体当前位置与点击处的距离
            Vector3 direction = hitInfo.point - transform.position;//物体当前位置与点击处的方向
            if (distance > 0.05f) {
                transform.position += direction.normalized * moveSpeed * Time.deltaTime;//每秒移动moveSpeed的距离
            }
            else {
                isMove = false;//满足到达条件,将移动状态isMove改为false
            }
        }
    }

在这个功能中,主要用到的知识点:

  1. 检测鼠标按下:GetMouseButtonDown();//0位左键,1为右键,2位滑轮(按下)
  2. Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition);
    Physics.Raycast(ray, out hitInfo);点击的点的信息保存在hitInfo中
  3. LookAt();让物体面对点击的方向
  4. Vector3.Distance();两个点的距离
  5. direction.normalized;将两个点的向量单位化
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值