unity中让物体移动到鼠标点击位置(单击移动和双击暂停移动)

private bool IsMove;//移动

//鼠标双击的参数(第一种方式的参数)
private float delay = 0.5f;
private float firstClickTime = 0;
private bool oneClick = false; //点击了第一下

//双击(第二种方式的参数)
private float endtime = 0;
private float Doubletime = 0.5f; //响应时间
public void Start(GameObject _player, Camera cam)

public void Update()
{
  if (Input.GetMouseButtonDown(0))
  {
    // 双击
    float time = Time.realtimeSinceStartup;
    if ((endtime + Doubletime) > time)
    {

      IsMove = false;//移动暂停
      Debug.LogError("鼠标双击");
    }  
    else
    {
      endtime = time;
      Debug.LogError("鼠标单击");
      IsMove = true;//开始移动
      //1. 获取鼠标点击位置
      //创建射线;从摄像机发射一条经过鼠标当前位置的射线
      Ray ray = firstCamera.ScreenPointToRay(Input.mousePosition);
      //发射射线
      RaycastHit hitInfo = new RaycastHit();
      if (Physics.Raycast(ray, out hitInfo))
      {
        //获取碰撞点的位置
        if (hitInfo.collider.name == "Ground")
        {
          Debug.LogError(hitInfo.collider.name);
          targetVector3 = hitInfo.point;
          targetVector3.y = -1f;
          IsOver = false;
        }
        Debug.DrawLine(ray.origin, hitInfo.point, Color.red);
      }
    }

    if (oneClick && Time.time - firstClickTime < delay)
    {
      //双击
      oneClick = false;
      IsMove = false;//移动暂停
      Debug.LogError("鼠标双击");
    }  
    else
    {  
      Debug.LogError("鼠标单击");
      oneClick = true;
      IsMove = true;//开始移动
      firstClickTime = Time.time;
      //1. 获取鼠标点击位置
      //创建射线;从摄像机发射一条经过鼠标当前位置的射线
      Ray ray = firstCamera.ScreenPointToRay(Input.mousePosition);
      //发射射线
      RaycastHit hitInfo = new RaycastHit();
      if (Physics.Raycast(ray, out hitInfo))
      {
        //获取碰撞点的位置
        if (hitInfo.collider.name == "Ground")
        {
          Debug.LogError(hitInfo.collider.name);
          targetVector3 = hitInfo.point;
          targetVector3.y = -1f;
          IsOver = false;
        }
        Debug.DrawLine(ray.origin, hitInfo.point, Color.red);
        }
      }
    }
    if (IsMove)
    {
      //2. 让角色移动到目标位置
      MoveTo(targetVector3);
    }
}
//让角色移动到目标位置
private void MoveTo(Vector3 tar)
{
  if (!IsOver)
  {
    Vector3 offSet = tar - player.transform.position;
    player.transform.position += offSet.normalized * movespeed * Time.deltaTime;
    if (Vector3.Distance(tar, player.transform.position) < 0.5f)
    {
      IsOver = true;
      player.transform.position = tar;
    }
  }

}

时间: 2024-08-02 10:53:17

unity中让物体移动到鼠标点击位置(单击移动和双击暂停移动)的相关文章

Unity获取鼠标点击位置,物体朝鼠标点击处移动

大型游戏中经常会有这种场景,点击屏幕位置,人物就会朝着鼠标点击位置移动,下面我们就来实现这种效果. 首先,我们在场景中添加一个Plane,并且设置它的tag为Plane,然后,在Plane上面添加一个Cube,设置好位置,刚好放置在Plane上面,最后,给cube添加一个脚本,脚本内容如下: using UnityEngine; using System.Collections; public class RayCastTest : MonoBehaviour { //cube移动速度 publ

u3d 鼠标点击位置,物体移动过去。 U3d mouse clicks position, objects move past.

u3d 鼠标点击位置,物体移动过去. U3d mouse clicks position, objects move past. 作者:韩梦飞沙 Author:han_meng_fei_sha 邮箱:[email protected] E-mail: 313134555 @qq.com 鼠标点击位置,物体移动过去. 跟随鼠标移动.任意两点角度. Mouse click position, object moves past.Follow the mouse movement.Any two po

javascript获取鼠标点击位置的坐标兼容写法

1 <!DOCTYPE html> 2 <html lang="en"> 3 <head> 4 <meta charset="UTF-8"> 5 <title>获取鼠标点击位置</title> 6 <script> //考虑浏览器滚动条 7 function getMousePos(event) { 8 var e = event || window.event; 9 var scr

每天一个JavaScript实例-铺货鼠标点击位置并将元素移动到该位置

<!DOCTYPE html> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> <title>每天一个JavaScript实例-铺货鼠标点击位置并将元素移动到该位置</title> <style> #info{ width:100px; height:100px;

在unity中用鼠标实现在场景中拖动物体,用鼠标滚轮实现缩放

在场景中添加一个Plan,Camera,Directional Light,Cube.添加两个脚本scrollerScirpt(挂在Camera),CubeDragScript(挂在Cube上). 1.鼠标滚轮实现缩放:将摄像机的镜头拉近或者拉远,调整摄像机的视角就可以实现,主要实现代码如下: void Update () { //鼠标滚轮的效果 //Camera.main.fieldOfView 摄像机的视野 //Camera.main.orthographicSize 摄像机的正交投影 //

html5中canvas的使用 获取鼠标点击页面上某点的RGB

1.html5中的canvas在IE9中可以跑起来.在IE8则跑不起来,这时候就需要一些东西了. 我推荐这种方法,这样显得代码不乱. <!--[if lt IE9]> <script src="http://html5shiv.googlecode.com/svn/trunk/html5.js"></script> <![endif]--> 需要谷歌的一个html5.js的文件即可. 注意:必须插入在<head></he

Javascript中的DOM实现显示鼠标的空间位置

为了显示鼠标相对于浏览器的位置(相对于屏幕和页面类似),我们能够利用click事件,获得关于鼠标单击的事件对象event.这个事件对象里的clientX和clientY包括了鼠标的位置信息,所以我突发奇想.那我可不能够通过DOM中的createElement创建一个标签元素用于在相应的鼠标位置显示当前的鼠标相对于浏览器的坐标呢? 这里我先利用Element中的createElement()方法,创建一个div的标签.为了让标签信息能显示在鼠标相应的位置处,利用div.style将相应的top.l

关于Unity中NGUI图片精灵响应鼠标的方法

我在Unity里做NGUI的时候发现一个问题. 在Unity2D场景当中,一个精灵图片只要加上了Box Collider或者Box Collider2D,就可以相应OnMouseEnter和OnMouseExit事件,而到了NGUI里就不能响应了. 这真是一个大坑 虽然说NGUI提供了按钮组件,但是如果我们想要自己定制一个按钮的话,失效的那两个事件是不可或缺的. 在网上找了很久,我依旧没能找到相关问题的回答,是的,似乎很少有人碰到这个问题(难道是我新手的原因?). 故私再次记录下我的解决方法.

Unity中Instantiate物体失效问题

才开始学Unity,开始总是这样用Instantiate函数: GameObject temp = (GameObject)Instantiate(bulletSource, transform.position, transform.rotation); 然后该类中定义一个共有变量如下: public GameObject bulletSource; 在面板上先将预设体托到Hierarchy处,从该处再把对应的Object托到类的共有变量上. 开始这样是没有问题的,但是当该物体在某个时间销毁后