首页 > 代码库 > unity学习--005:模仿几种游戏操作方式的实现

unity学习--005:模仿几种游戏操作方式的实现

结合前面的 角色控制和镜头控制 在这里实现几种综合的操作方式

1. CF类的 第一视角控制方式

  此类操控方式将摄像机绑定猪脚头部模拟第一视角

  移动方式以unity自带的CharacterController.Move()方法为基础进行改进。

  首先给角色判定一个Camera和下面的C#脚本

   public float speed = 3.0F; 
   public float rotateSpeed = 3.0F;
   void Update() {
      CharacterController controller = GetComponent<CharacterController>();
      transform.Rotate(0, Input.GetAxis("Horizontal") * rotateSpeed, 0);
      Vector3 forward = transform.TransformDirection(Vector3.forward);
      float curSpeed = speed * Input.GetAxis("Vertical");
      controller.SimpleMove(forward * curSpeed); }

 技术分享

测试他的移动时我会以第三视角观察,点击Main Camera上的技术分享便可随时切换了

自带的移动脚本效果不错,能走能跳,视角也符合常情

下面改动脚本,让镜头和猪脚随着鼠标转动角度, 猪脚和镜头的Y周都可以转动,镜头只可以转动X轴的部分角度

在猪脚的移动脚本中的UPDATE方法中添加 transform.Rotate(new Vector3(0,Input.GetAxis("Mouse X"),0));便是改动猪脚的Y轴的角度

在Awake中添加鼠标消失的代码     void Awake(){Screen.showCursor = false; } 这里在开发时要注意 鼠标一开始是不消失的,只有点击一下才消失

这是因为开发初始鼠标没有定位游戏窗口,系统是显示的,当点击窗口时进入作用域中才会消失。

下面是修改以后的角色移动脚本

public float speed = 10.0F;    //使鼠标消失    void Awake() { Screen.showCursor = false; }    void Update()    {        CharacterController controller = GetComponent<CharacterController>();        //角色转向        //transform.Rotate(0, Input.GetAxis("Horizontal") * rotateSpeed, 0);        //设置移动方向X和Z        Vector3 moveDirection = transform.TransformDirection(new Vector3(Input.GetAxis("Horizontal"), 0, Input.GetAxis("Vertical")));              //简单移动        transform.Rotate(new Vector3(0, Input.GetAxis("Mouse X"), 0));        controller.SimpleMove(moveDirection * speed);    }

然后给镜头添加旋转角度脚本。

由于镜头的y轴随着猪脚的转动而改变(MOve方法就不会) 所以我们在Camera中只要修改X轴即可

void Update () {transform.Rotate(-Input.GetAxis("Mouse Y"), 0, 0);}

这里只是简单的介绍了Rotate角度问题,这里的角度要做好问题很多,这里的角度问题就不深究了 

这样只要在屏幕上合适的地方添加准星便是类似CF与CS的角色控制器了。这里也可以将镜头的这点代码放进Move脚本中,并设定角度限制

系数等问题都是测试得来的合适系数。

 public float speed = 10.0F;    Transform cameraFirst;    //使鼠标消失    void Awake() {         Screen.showCursor = false;        cameraFirst = GameObject.Find("Camera").transform;    }    void Update()    {        CharacterController controller = GetComponent<CharacterController>();        //角色转向        //transform.Rotate(0, Input.GetAxis("Horizontal") * rotateSpeed, 0);        //设置移动方向X和Z        Vector3 moveDirection = transform.TransformDirection(new Vector3(Input.GetAxis("Horizontal"), 0, Input.GetAxis("Vertical")));        //移动Camera 角度        if (cameraFirst.rotation.x - Input.GetAxis("Mouse Y")*0.3 <= 0.5 && cameraFirst.rotation.x - Input.GetAxis("Mouse Y")*0.3 >= -0.71)        {            cameraFirst.Rotate(-Input.GetAxis("Mouse Y"), 0, 0);        }        //移动角色角度        transform.Rotate(new Vector3(0, Input.GetAxis("Mouse X"), 0));        //简单移动             controller.SimpleMove(moveDirection * speed);    }

 这样就简单的实现了下第一视角

 

2. 魔兽世界类型操控,通过第三视角的Camera 结合 键盘操控WASD与鼠标点击目标位置实现

 

3. DOTA,lol模式操控,通过固定角度的Camera 与鼠标临界推动屏幕移动 ,角色移动通过鼠标点击目标点实现。

 

4. 移动端通过手指划屏来模拟移动场景

 

unity学习--005:模仿几种游戏操作方式的实现