Unity3d 通过射线使物体移动

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/leonardo_Davinci/article/details/78196612

实现:

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class RayTest : MonoBehaviour {
    //设置射线在Plane上的目标点target
    private Vector3 target;
	// Use this for initialization
	void Start () {
        //初始化目标点与自身的点重合
        target = transform.position;
	}
	
	// Update is called once per frame
	void Update () {
        //当点击鼠标左键的时候创建一条射线
        if(Input.GetMouseButton(0))
        {
            //定义射线
            Ray m_ray;
            //保存碰撞信息
            RaycastHit m_hit;
            //创建一条从摄像机发出经过屏幕上的鼠标点的一条射线
            m_ray = Camera.main.ScreenPointToRay(Input.mousePosition);
            //判断射线是否碰撞到物体
            if(Physics.Raycast(m_ray,out m_hit))
            {
                //判断碰撞到的是不是Plane
                if(m_hit.transform.name=="Plane")
                {
                    //把目标点target设置为m_hit.point,//并使物体要处于Plane上所以Y轴为0.5f
                    target = new Vector3(m_hit.point.x, 0.5f, m_hit.point.z);

                }
            }
        }
        Move(target);
	}
    //移动方法
    void Move(Vector3 target)
    {
        if (Vector3.Distance(transform.position, target) > 0.1f)
        {
            transform.position = Vector3.Lerp(transform.position, target,Time.deltaTime);
        }
        //如果物体的位置和目标点的位置距离小于 0.1时直接等于目标点
        else
            transform.position = target;
    }
}

猜你喜欢

转载自blog.csdn.net/leonardo_Davinci/article/details/78196612