中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

unity3d實現一個人物跟隨鼠標點擊地面那點就移動那點,實

發布時間:2020-03-01 10:25:54 來源:網絡 閱讀:9213 作者:酷酷小喬 欄目:游戲開發



//人物方向和判斷點擊事件加點擊特效

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

乌兰浩特市| 崇文区| 云南省| 花垣县| 日照市| 盐山县| 波密县| 南澳县| 峨边| 嘉善县| 鹤庆县| 涡阳县| 石河子市| 宁阳县| 汉中市| 双城市| 海盐县| 兖州市| 凯里市| 庄浪县| 镇坪县| 班戈县| 绵阳市| 荥经县| 秦安县| 施秉县| 鄱阳县| 溧阳市| 额敏县| 罗江县| 富阳市| 彝良县| 高青县| 镇宁| 定南县| 准格尔旗| 沁源县| 隆昌县| 双江| 镶黄旗| 郧西县|