Unity制作小游戏——海战游戏开发实战【一】

先看demo:webgl-demos

完成了移动和瞄准、镜头切换。

 

无标题.jpg

一.移动

移动部分使用了对Rigidbody(刚体)的操作,船的运动状态是线性的,所以要模拟出物理的船的移动最好的方法就是操作Rigidbody。

对于Rigidbody,Unity已经给出了物理模拟系统,只要设定阻力和质量就可以了。在这里,我锁定了船体的rigidbody的Y坐标和X轴和Z轴的旋转。

添加了Box Colider来处理和山体的碰撞。

微信图片_20181115195235.png

  private Rigidbody shipBody;
  void Start ()
  {
      shipBody = this.GetComponent<Rigidbody>();//获取Rigidbody组件
}

  void FixedUpdate ()
  {
      float h = Input.GetAxis("Horizontal");//获取按键左右(支持摇杆)

      float v = Input.GetAxis("Vertical");//获取按键前后(支持摇杆)
      shipBody.AddRelativeForce(new Vector3(0, 0, v * 4), ForceMode.Acceleration);//施加前进后退的力
      shipBody.AddRelativeTorque(new Vector3(0,h*(float)0.3,0), ForceMode.Acceleration);//施加扭转力

  }

二.瞄准

瞄准部分用了getAxis的方法,在按键控制台里绑定了右摇杆到Mouse X,Mouse Y,这样右摇杆就可以和鼠标一样控制视角了。

主要方法就是把鼠标的移动变为瞄准圈的坐标移动,这个部分直接上代码

float MouseX = Input.GetAxis("Mouse X");
        float MouseY = Input.GetAxis("Mouse Y");
        if (distance(ship, transform) <= 10000)
        {
            oldpos = transform.localPosition;
            transform.Rotate(0,ship.rotation.y-transform.rotation.y,0);
            transform.localPosition = (new Vector3(MouseX, 0, MouseY) + transform.localPosition);
        }
        else
        {
            transform.localPosition = oldpos;
        }

三.镜头切换

使用Cinemachine做到的平滑切换,创建了vcam1作为近距离的单体跟踪和vcam2作为远距离的光标和船体的跟踪(targetgroup)。在光标近的时候使用船体视角,在光标远的时候切换俯视角。

  if (distance(ship, transform) >= 1500&flag==false)
        {
            flag = true;
            cam0.SetActive(false);
            cam1.SetActive(true);
        }
        else if(distance(ship,transform)<=1000&flag==true)
        {
            flag = false;
            cam0.SetActive(true);
            cam1.SetActive(false);
        }
            text.text = MouseX.ToString() + "," + MouseY.ToString()+"("+ship.rotation.y+")" + "(" + ship.rotation.y + ")";
    }
    float distance(Transform a,Transform b)
    {
        float distance = 0;
        distance = Mathf.Pow((a.position.x - b.position.x), 2) + Mathf.Pow((a.position.z - b.position.z), 2);
        return distance;
    }
}

 

Share this:

发表评论

您的电子邮箱地址不会被公开。 必填项已用*标注