[Blender+Unity]鼠標交互尋路Demo

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.AI;
public class PlayerMovement : MonoBehaviour
{
??public MouseAction mouseAction;
??void Start()
??{
????//啟動時把自己的函數(shù)放入事件的委托列表
????//類外的事件觸發(fā)時類內(nèi)的函數(shù)觸發(fā)
????mouseAction.OnMouseClickOnMap += MouseAction_OnMouseClickOnMap;
??}
??//接受到事件后觸發(fā)函數(shù)
??private void MouseAction_OnMouseClickOnMap(object sender, MouseAction.OnMouseClickOnMapEventArgs e)
??{
????//獲取導航組件
????if (TryGetComponent<NavMeshAgent>(out NavMeshAgent agent))
????{
??????//根據(jù)事件傳來的位置信息給導航組件設(shè)定目標
??????agent.SetDestination(e.targetPosition);
????}
??}
}
using System;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class MouseAction : MonoBehaviour
{
??//定義一個向外傳遞信息的事件,發(fā)出的信息是自定義的EventArgs,
??//向所有符合條件(無返回值,傳兩個參數(shù))且加入了接受列表的函數(shù)發(fā)出信息
??//類內(nèi)觸發(fā)事件,類外同步觸發(fā)其他類的函數(shù)
??public event EventHandler<OnMouseClickOnMapEventArgs> OnMouseClickOnMap;
??//自定義一種數(shù)據(jù)包裝類型,包裹一個位置信息,再創(chuàng)建時裝入位置信息?
??public class OnMouseClickOnMapEventArgs : EventArgs
??{
????public Vector3 targetPosition;
????public OnMouseClickOnMapEventArgs(Vector3 targetPosition)
????{
??????this.targetPosition = targetPosition;
????}
??}
??void Update()
??{
????//如果鼠標按下
????if (Input.GetMouseButtonDown(0))
????{
??????//創(chuàng)建碰撞檢測射線
??????Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition);
??????//如果碰撞檢測成功,鼠標有點擊在物體上
??????if (Physics.Raycast(ray, out RaycastHit hit))
??????{
????????//判斷碰撞物體是不是地圖
????????if (hit.collider.gameObject.tag == "Map")
????????{
??????????Debug.Log(hit.point);
??????????//觸發(fā)事件
??????????OnMouseClickOnMap?.Invoke(this, new OnMouseClickOnMapEventArgs(hit.point));
????????}
??????}
????}
??}
}
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class CameraFollow : MonoBehaviour
{
??public Transform player;
??public Vector3 offset;
??//相機和目標物體間位置相差一個偏差值
??void Update()
??{
????transform.position = player.position + offset;
??}
}