Unity-小狗骑士:一.完成鼠标点击控制角色移动

一.完成鼠标点击控制角色移动

先导入角色和部分地形用于最初测试,并创建空对象MouseManager。

 导入以下资源至场景

1.首先烘焙地图,需要:

①场景设置为navigation static。

②有mesh render。

显示蓝色区域(可移动区域)即为烘焙成功。

2.为小狗添加nav mesh agent 组件,使其后续可自动移动。

调整摄像机(ctrl + shift +f) 

3.创建Scripts目录,用于存放脚本。创建第一个脚本MouseManager(鼠标控制)。

 建立如下结构(本模块暂用这么多),分别拖曳给Slime,DogPloyart和MouseController

 4.新建tag:ground和enemy,分别设置给地面和Slime,用于射线的碰撞检测。

接下来就可以撰写MouseManager的代码了。

SetCursorTexture:具体实现暂时空出来,不断检测射线的信息。

EventVector3类:用于定义点击的事件,并绑定调用角色Ai寻路的Destination,由于没有继承MonoBehaviour,因此需要系统序列化。

 绑定/操作 角色Ai组件的Destination属性。

using System.Collections;
using System.Collections.Generic;
using System.Diagnostics;
using UnityEngine;
using UnityEngine.Events;
[System.Serializable]
public class EventVector3 :UnityEvent<Vector3>{ };
public class MouseManager : MonoBehaviour
{
    Ray ray;//鼠标检测射线
    RaycastHit hitInfo;//碰撞信息
    public static MouseManager instance;
    public EventVector3 OnMouseClicked;
    // Start is called before the first frame update
    private void Awake()//在Start之前调用
    {
        //单例模式    
        if (instance != null)
        {
            Destroy(gameObject);
        }
        instance= this;
    }
    void Start()
    {
        
    }

    // Update is called once per frame
    void Update()
    {
        //更改鼠标图案
        SetCursorTexture();//实时获得射线信息
        //点击鼠标时,调用player的函数
        PlayerControl();
    }
    void SetCursorTexture()//更改图案函数
    {    
        //射线检测:根据地面还是敌人,对应不同的图标
         ray = Camera.main.ScreenPointToRay(Input.mousePosition);//主摄像机根据鼠标位置转成屏幕坐标,由此创建射线
        if(Physics.Raycast(ray,out hitInfo))
        {
        //用于切换代码
        }
    }
    void PlayerControl()//控制角色
    {
        if (Input.GetMouseButtonDown(0) && hitInfo.collider!=null)//点击鼠标左键,要满足碰撞体不为空
        {
            if (hitInfo.collider.tag == "ground")
            {
                OnMouseClicked?.Invoke(hitInfo.point);//判断是否为空的简写
            }
            
        }
    }
}

目前实现了点击移动,后续可以对Ai寻路进行调整。

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值