温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

unity3d实现一个人物跟随鼠标点击地面那点就移动那点,实

发布时间:2020-03-01 10:25:54 来源:网络 阅读:9218 作者:酷酷小乔 栏目:游戏开发



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

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;

     }
    }
}


unity3d实现一个人物跟随鼠标点击地面那点就移动那点,实

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI