Unity学习之Tanks官网教程

Tanks是Unity官网上的一篇教程,官网链接。我将根据这篇为基础改成多人对战的版本,同时梳理下开发思想。

  1. 坦克的移动
      坦克的移动通过刚体来实现。选中坦克,添加一个Box Colider和Rigidbody组件。通过编辑Box Colider,调整其边框大小使之与坦克模型一致。
      这里写图片描述
      为坦克添加一个脚本文件来控制其移动。坦克的移动和旋转都可以通过刚体来实现。所以,我们需要利用GetComponent<Rigidbody>() 方法先获取物体的刚体组件。刚体的velocity 属性可以控制物体的移动,angularVelocity 属性可以控制物体的旋转。我们根据用户的按键捕捉其操作后再判断其运动的方向。
    void FixedUpdate()
    {
        float v = Input.GetAxis("Vertical1");
        rigidbody.velocity = transform.forward * v * speed;

        float h = Input.GetAxis("Horizontal1");
        rigidbody.angularVelocity = transform.up * angleSpeed * h;
    }

  transform.forward是指当前物体向前移动的方向,等于当前物体的自身坐标系z轴在世界坐标上的指向。transform.up等于当前物体的自身坐标系y轴在世界坐标系上的指向。
  
2. 子弹的创建与移动
  子弹的创建采用一个空对象来实现,在坦克对象下面创建一个空的子对象,并移动到合适的位置,旋转合理的角度。
  这里写图片描述
  子弹的实例化将利用这个空对象和一个现成的子弹预制体来实现。

    GameObject bullet = GameObject.Instantiate(firePrefab, firePosition.position,firePosition.rotation) 
                as GameObject;
     Rigidbody rb = bullet.GetComponent<Rigidbody>();
     rb.velocity = transform.forward * speed;

3.碰撞检测与特效
  碰撞检测利用刚体来实现,在子弹的相应脚本代码中实现OnTriggerEnter 方法即可。同时要给刚体设置is trigger属性。

    public void OnTriggerEnter(Collider collider)
    {                                   GameObject.Instantiate(effectPrefab,transform.position,transform.rotation);

        GameObject.Destroy(this.gameObject);
    }

4.视角跟随

  视角跟随采用代码来实现,创建一个脚本绑定到摄像机上。在一开始的时候就先计算出摄像机当前的位置与参考物之间的偏移。然后在Update()方法中去维护摄像机的距离即可。

// Use this for initialization
    void Start () {
        offset = transform.position - player1.position / 2;
    }

    // Update is called once per frame
    void Update () {
        transform.position = player1.position / 2 + offset;
    }

5.网络部分后续发布

发布了47 篇原创文章 · 获赞 8 · 访问量 3万+

猜你喜欢

转载自blog.csdn.net/it_wjw/article/details/54293151