unity3d实现一个人物跟随鼠标点击地面那点就移动那点,实现点击特效加人物动画方向的切换。

//人物方向和判断点击事件加点击特效

using UnityEngine;
using System.Collections;

public class playerDir : MonoBehaviour {

public GameObject effect_click_prefab;
   private bool isMoving=false;//鼠标是否被按下
   public Vector3 targetPosition=Vector3.zero;//目标位置

private PlayerMove playerMove;
  
   void Start()
   {
   targetPosition=transform.position;
   playerMove=this.GetComponent<PlayerMove>();
  
   }

void Update () 
    {
      
      if(Input.GetMouseButtonDown(0))
     {
      Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition);//拿到鼠标按下的点
      RaycastHit hitInfo;
      bool isCollider=Physics.Raycast(ray,out hitInfo);//定义一个射线
      if(isCollider&&hitInfo.collider.tag==Tags.ground)//判断射线是否和地面接触碰撞
      {
        //判断是否点击到了UI层的东西
        if(UICamera.hoveredObject.tag!="Accept"&&UICamera.hoveredObject.tag!="Inventory_item_grid"&&UICamera.hoveredObject.tag!="Inventory_item")
      {
        isMoving=true;
        ShowClickEffect(hitInfo.point);
        LookAtTarget(hitInfo.point);
       }
          
      }

}
      
      //按下鼠标左建的时候停止运动
     if(Input.GetMouseButtonUp(0))
     {
      isMoving=false;

}

if(isMoving)
     {
      //得到需要移动到的目标位置
      //让角色朝向目标位置
      Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition);//拿到鼠标按下的点
      RaycastHit hitInfo;
      bool isCollider=Physics.Raycast(ray,out hitInfo);//定义一个射线
      if(isCollider&&hitInfo.collider.tag==Tags.ground)//判断射线是否和地面接触碰撞
      {
        //让当前对象对着射线的方向
        LookAtTarget(hitInfo.point);
    
      }

}
     else
     {
       if(playerMove.isMoving)
       {
        LookAtTarget(targetPosition);

}

}
      
    }

//实例化显示特效效果
    void   ShowClickEffect(Vector3 hitPoint)
    {
     hitPoint=new Vector3(hitPoint.x,hitPoint.y+0.1f,hitPoint.z);
     GameObject.Instantiate(effect_click_prefab,hitPoint,Quaternion.identity);

}

//让角色朝向目标位置和朝向的改变
    void LookAtTarget(Vector3 hitPoint)
    {
        targetPosition=hitPoint;
        targetPosition=new Vector3(targetPosition.x,transform.position.y,targetPosition.z);//得到主角朝向位置
        this.transform.LookAt(targetPosition);//让主角改变

}
}

//人物移动

using UnityEngine;
using System.Collections;

//角色状态
public enum PlayerState
{
Moving,//移动
Idle //闲着

}

public class PlayerMove : MonoBehaviour {

public float speed=4f;
   public PlayerState state=PlayerState.Idle;//默认状态为Idle
   private playerDir dir;
   private CharacterController controller;//角色控制器
   public bool isMoving=false;

void Start()
    {
    dir=this.GetComponent<playerDir>();
    controller=this.GetComponent<CharacterController>();
    }

void Update () 
    {
     float distance=Vector3.Distance(dir.targetPosition,transform.position);//计算目标位置到当前位置
     if(distance>0.3f)
     {
      isMoving=true;
      state=PlayerState.Moving;
      controller.SimpleMove(transform.forward*speed);//角色移动

}
     else
     {
      isMoving=false;
      state=PlayerState.Idle;

}
    }
}

时间: 2024-11-25 06:33:50

unity3d实现一个人物跟随鼠标点击地面那点就移动那点,实现点击特效加人物动画方向的切换。的相关文章

jQuery-鼠标经过显示大图并跟随鼠标效果插件

by zhangxinxu from http://www.zhangxinxu.com 本文地址:http://www.zhangxinxu.com/wordpress/?p=281 今天看完了<JavaScript语言精粹>这本书,还有时间,就决定写写jQuery插件练练手,实现的效果是,鼠标移到缩略图上会显示该图的大图,并且大图跟随鼠标移动:或是移动到提示文字上,也可以显示图片.并且含有方向判别功能,具体来说就是如果缩略图在页面的左半部分,则大图显示在鼠标的右侧,如果缩略图在页面的右半部

实现div在固定区域跟随鼠标移动点击拖动而产生的变化

一.思路 1.在外层增加一个 DIV 容器,并设置好容器的大小.(即:宽和高) 当容器存在边框的时候,由于这里还没找到获取的方法,所以,在容器边框大于 0 的时候,获得的容器的限制区域的坐标会有误差. 为了避免这情况,可以在多加一次容器,有边框样式的在外层,无边框样子的在内层. 例: <style> #mainContainer { border: 10px solid #990000; width: 600px; height: 300px; } #innerContainer { widt

jQuery 二级菜单,一次显示一个小类 鼠标点击显示小类

jQuery 二级菜单,一次显示一个小类 鼠标点击显示小类 本例有另外2个关联案例,演示地址分别为2.php,3.php 演示 XML/HTML Code <div class="arrowlistmenu"> <h3 class="menuheader expandable">表单</h3> <ul class="categoryitems"> <li><a href="

分享一个很有意思的js,动态时钟显示,能跟随鼠标移动

原文:分享一个很有意思的js,动态时钟显示,能跟随鼠标移动 源代码下载地址:http://www.zuidaima.com/share/1550463688182784.htm

javascript 跟随鼠标移动的提示框的一个小demo

下面提供一种跟随鼠标移动的提示框的思路,方便在以后工作中应用,主要是应用到鼠标移动产生的数值来进行移动提示框的定位... CSS代码   .box{height:100px;width:100px;background:orange;position:relative;margin:40px;} .move{height:20px;width:20px;background:red;position:absolute;left:0px;top:0px;display:none;} HTML代码

unity2d 实现物体跟随鼠标绕一个点旋转效果

在2D游戏中,类似泡泡龙炮台发射.敌人飞机永远指向PLAYER.愤怒小鸟弹弓发射等效果,都需要用到物体跟随鼠标绕一个点旋转的效果,在unity中实现代码很简单,但是在理解上有一定障碍,因为unity是3D界面,他的旋转并不是2D世界中那么简单. 实现这种效果,可以使用两种方法,一种是采用角度计算,一种是采用向量运算: 1,角度运算容易理解,但是代码较为繁琐,可以参考 点击打开链接, 2,向量运算实现 1),向量运算简单复习 向量指具有大小和方向的几何对象,可以形象化地表示为带箭头的线段. 也就是

【jQuery】一个跟随鼠标运动的图层

一.基本目标 写一个跟随鼠标运动的图层, 图层中显示当前鼠标的位置, 如下图, 此图层之所以使用jQuery,而不是因为javascript,是因为jQuery的代码其便于兼容当前的所有主流的浏览器,至少IE8是没有任何问题的,不用像javascript大段大段的代码都用到兼容性上面了-- 二.制作过程 本次实验的核心是jquery里面的mousemove事件, 鼠标移动则触发. 代码如下: <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Tran

Unity3d学习 相机的跟随

最近在写关于相机跟随的逻辑,其实最早接触相机跟随是在Unity官网的一个叫Roll-a-ball tutorial上,其中简单的涉及了关于相机如何跟随物体的移动而移动,如下代码:  简单相机移动 可以很容易的理解上述的代码: 在初始化时计算与对应物体的向量差值,然后在LateUpdate中对相机位置进行及时更新,至于为什么要放在LateUpdate,因为LateUpdate是等所有脚本的Update跑完之后 在更新自己的逻辑,这样相机得到物体的位置往往是最新的 .具体可以看 Unity关于脚本生

win10 指针焦点自动跟随鼠标

Linux或者ubuntu系统中有个Focus-follows-mouse功能:鼠标指哪,键盘的焦点就指向哪,甚至可以让鼠标所在的窗口实时处于最顶层,达到真正的焦点跟随鼠标.通俗的讲就是,如果在多窗口的状态下,如果我们要对其中一个窗口进行一些操作,必须点击一下那个窗口(目的是让该窗口获取焦点),而focus-follow-mouse 功能让你只需要将鼠标指针移动到该窗口上面就可以对该窗口进行操作,不需要再点击一下.看似一个很简单的功能,确极为方便(尤其是对题主这种不喜欢在触控板上做点击操作的人)