项目实训----Unity多人游戏开发----第四篇

综述

上次我们主要进行讲解的是游戏开发过程遇到的一些问题,以及想法,主要讲述了如何使用键盘进行控制人物移动。主要是通过刚体和transfrom进行控制。

本次主要讲述关于人物移动的另一种方式。

主体

内容1
该方式是通过从网上进行查询总结的一个方式,也是通过键盘进行控制的一种,主要是通过角色控制器,控制角色移动,用于控制第一人称或第三人称角色的运动,也可以用于角色控制,比如限制角色爬坡的最大斜度,步伐的高度等,这个相当于组件Nav,通常用于AI人机。

 horizontal = Input.GetAxis("Horizontal");
        vertical = Input.GetAxis("Vertical");

        //不考虑重力作用
        //characterController.Move(new Vector3(horizontal,0,vertical) * Time.deltaTime *moveSpeed);

上述主要通过一个控制器来实现人物移动,具体可以实验一下效果,因为项目中未涉及,所以不在测试。

内容2:人物移动控制方式–鼠标控制

本次我们讲解鼠标控制,该控制主要用于第四个游戏的角色移动控制。

如果实现鼠标控制呢?

我们主要来考虑两个方面内容,第一,如何确定鼠标点击的点,第二,

        Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition);
		//主要通过一个射线来实现位置的确定,而人物的走动主要是通过nav自动寻路来完成的。需要设置人物的行走,可以行走的最大坡度以及可以迈出的最大高度。
        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;
            }
        }
		transform.LookAt(target.transform);//转向移动目标


鼠标控制

	public event Action<Vector3> onMouseClicked;//获取一个event事件
    public event Action<GameObject> onEnemyClicked;//点击物体的事件 
//鼠标控制
    void MouseControll()
    {
        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);
            }
        }
    }

给鼠标添加方法

        MouseManager.Instance.onMouseClicked += MoveToTarget;//添加订阅的方法
        MouseManager.Instance.onEnemyClicked += EventAttack;//添加攻击的方法


moveToTarget方法

 public void MoveToTarget(Vector3 target)//参数保存一致
    {
        StopAllCoroutines();//打断移向目标
        agent.isStopped = false; //重新设置可以移动
        agent.destination = target;//将 位置定位到这里
    }

对于攻击的方法,这里不涉及,咱就不说了。
在这里插入图片描述
上面是这个角色的nav控制器,其中包括类型、速度、角速度、加速度,以及对于障碍物的躲避,可以跨越的障碍物的高度和范围等。

总结

通过本次分享,主要谈到了人物控制的剩余两种方式,用的虽然不如前面两种多,但是也在游戏中非常常见的。

猜你喜欢

转载自blog.csdn.net/qq_53259920/article/details/125113827