您当前的位置: 首页 >  dangoxiba unity

【学Unity】尝试自制一个坦克大战

dangoxiba 发布时间:2021-11-24 13:21:26 ,浏览量:4

项目场景:

   Unity API查询:Unity - Scripting API:

  素材 : 百度搜图片:地面纹理,找到喜欢的贴图导入Import资源即可

   自制一个坦克大战:需要的GameObjects有:Plane,Bullets,EnemyTank,PlaytTank,Wall空气墙

                                                                            Main Camera,Directional Light

 由于音频视频导入和UI制作和3D建模都不会,只能搞搞基础的了

以下是实机展示:

 

 

 

 

 

 空气墙的制作:先在Plane边缘建立一个墙,尽量将墙边缘贴近Plane后用v键使重合,然后Crtl+D复制三份,通过移动和旋转角度和Plane重合,最后关闭Inspector面板的Mesh Mender组件,游戏运行时就会生成

 己方坦克的要实现的功能有;移动,旋转,发射炮弹,创建一个PlayerControl.cs的脚本

移动,旋转通过虚拟轴GexAxis()获取正负方向Horizontal,Vertical

创建一个炮弹发射点的空对象

发射炮弹用transform.Find("目录")找到这个空对象

同时创建一个球体即炮弹的预设体

用圆柱体和长方体创建一个坦克并给它脚本和刚体,把坦克的GameObject全放在空对象中

再创建一个Bullets.cs的组件,负责控制炮弹的速度和方向

**创建敌方坦克**

因为要生成多个敌方坦克,需要将敌方坦克设置为一个预设体,颜色要和玩家的有所区分,还有坦克生成的最大数量,生成的时间间隔。首先他得是个刚体,其次得有计数器counter,计时器timer和时间间隔interval控制它生成的时间

需要创建一个TankControl.cs的脚本负责坦克的基本生成,移动等等。。。同时还需要刚体,计时器

最重要的还是随机生成,使用Random.Range()来随机生成的位置,角度等等。。

Example:对于旋转的角度来说,生成的是欧拉角,但要转成四元数,因为你要使用

Instantiate(GameObject,Vector3,Quaternion)这个方法;这时候我们就要使用Quaternion.Euler()这个方法来转化为四元数了。

  既然生成了坦克,就不得不考虑模型重叠的问题了,添加刚体的情况下坦克容易被搞飞。

这时候就要用Physcis.CheckSphere(Vector3,float,int layerMask),球形检测,参数分别代表的意思是中心位置,半径,检测的Layer层,

第三个参数:layerMask涉及位或运算,由于我不会就简单介绍一下。(1 timeInterval)         {             yPartol = Random.Range(0, 360);

            //计时器归零             timer = 0;         }         //新生成一个角度来旋转         Rotate(Quaternion.Euler(Vector3.up * yPartol));         //Quaternion quaRotation = Quaternion.LookRotation         // (new Vector3(0, yPartol, 0));

        // transform.rotation = Quaternion.Lerp(transform.rotation,         //   quaRotation, turnSpeed * Time.deltaTime);     }     private void Rotate(Quaternion quaTarget)     {         //再用插值函数         transform.rotation = Quaternion.Lerp(transform.rotation,                                   quaTarget, turnSpeed * Time.deltaTime);

    }     private void RotateTo(Vector3 pos)     {         //先将方向向量转化为四元数         Quaternion quaTarget = Quaternion.LookRotation(pos);         Rotate(quaTarget);

    } }  

其次是敌方坦克管理(如生成)

using System.Collections; using System.Collections.Generic; using UnityEngine;

public class MyEnemyTankManager : MonoBehaviour {     //创建敌方坦克的生成     //以及敌方坦克的基本属性:随机生成的位置,旋转的角度     //还需要一些限制:最大生成数量,定时生产,生成的时候不能和其它坦克重合

    [Header("敌方坦克的预设体")]     public GameObject enemyTankPrefab;

    private float counter;     [Range(30, 100)]     public int maxEnemy = 50;

    private float timer = 0;     [Header("生成的时间间隔")]     public float timeInterval = 5f;

    private float radius = 5f;     private void Start()     {              }

    private void Update()     {         timer += Time.deltaTime;         if (timer > timeInterval)         {             if(counter

关注
打赏
1688896170
查看更多评论

dangoxiba

暂无认证

  • 4浏览

    0关注

    55博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文
立即登录/注册

微信扫码登录

0.1971s