Unity鼠标控制人物移动(即鼠标点击地面人物自动寻路到点击处)

public Texture2D point, doorway, attack, target, arrow;//不同的贴图

    RaycastHit hitInfo;

    public event Action<Vector3> OnMouseClicked;
    public event Action<GameObject> OnEnemyClicked;

    protected override void Awake()
    {
        base.Awake();
    }

    private void Update()
    {
        SetCursorTexture();
        MouseControl();
    }

    void SetCursorTexture()//此处为更换贴图
    {
        Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition);

        if(Physics.Raycast( ray, out hitInfo))
        {
            //切换鼠标贴图
            switch (hitInfo.collider.gameObject.tag)
            {
                case "Ground":
                    Cursor.SetCursor(target, new Vector2(16, 16), CursorMode.Auto);
                    break;
                case "Enemy":
                    Cursor.SetCursor(attack, new Vector2(16, 16), CursorMode.Auto);
                    break;
            }
        }
    }

    void MouseControl()
    {
        if (Input.GetMouseButtonDown(0) && hitInfo.collider !=null)
        {
            if (hitInfo.collider.gameObject.CompareTag("Ground"))
                OnMouseClicked?.Invoke(hitInfo.point);//如果问号前为是,则执行问号后
            if (hitInfo.collider.gameObject.CompareTag("Enemy"))
                OnEnemyClicked?.Invoke(hitInfo.collider.gameObject);
            if (hitInfo.collider.gameObject.CompareTag("AttackAble"))
                OnEnemyClicked?.Invoke(hitInfo.collider.gameObject);
        }
    }

前提:烘焙过地图

环境烘焙:

Window-->AI-->Navigation

在Object中,勾选Navigation Static(或在Inspector里选择Navigation Static)

弹出的窗口选择“No,this object only”,防止烘焙到场景上的其他物体

自动寻路鼠标射线被物体遮挡解决方法

1)在Hierarchy中选择会遮挡住鼠标射线的物体

在Layer中有个叫Ignore Raycast即忽略射线

2)将遮挡物中的collider关闭

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值