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

游戏制作之人物移动(二) 综述主体内容2:人物移动控制方式--鼠标控制 总结 综述 上次我们主要进行讲解的是游戏开发过程遇到的一些问题,以及想法,主要讲述了

游戏制作之人物移动(二)

  • 综述
  • 主体
    • 内容2:人物移动控制方式--鼠标控制
  • 总结

综述

上次我们主要进行讲解的是游戏开发过程遇到的一些问题,以及想法,主要讲述了如何使用键盘进行控制人物移动。主要是通过刚体和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 onMouseClicked;//获取一个event事件public event Action 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控制器,其中包括类型、速度、角速度、加速度,以及对于障碍物的躲避,可以跨越的障碍物的高度和范围等。

总结

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