3D坦克大战

初学unity之3D坦克大战

1、导入资源

从unity store中下载所需资源内含坦克模型、弹药模型、地图模型…然后将资源导入unity
内涵所需坦克模型、弹药、地图

2、 创建属于自己的文件夹

主要包括三个文件夹
1、Scripts
2、Prefabs
3、Scenes

项目文件夹

3、创建场景

  1. 在Scenes文件夹新建场景3DTanksBattle
  2. 将资源中的地图拖入3DTB
  3. 将坦克和子弹模型拖入3DTB

4、制作炮弹预制件

  1. 添加Rigidbody刚体
    模拟炮弹物理作用,有质量和重力。选中炮弹模型

  2. Add Component->Physics->RigidBody
    添加刚体

  3. 添加Collider碰撞体
    Add Component->Physics->Capsule Collider(胶囊碰撞体)
    调整胶囊的轴向、高度、半径以贴合炮弹模型
    调整碰撞体

  4. 添加炮弹爆炸粒子(particles)特效
    从资源中找到爆炸特效拖入shell对象中
    爆炸粒子特效

5、取消我自己的预制件与资源的关联

1、右键Hierarchy中的预制件->Prefabs->unpack
2、成功(Hierarchy中字体由蓝变白),这样对物体的操作就不会有干扰
3、将Hierarchy中处理好的预制件拖入Project中自己创建的文件夹Prefabs中	

6、制作坦克预制件

  1. 添加RigidBody刚体

  2. 添加Box Collider碰撞体
    坦克分上下两部分,添加两个碰撞体以贴合坦克形状

  3. 添加坦克粒子爆炸特效

  4. 添加坦克血条
    1、添加UI控件:右键Tank->UI->Slider(滑动块)
    2、 Fill Area的Fill Rect改为full,360°,Fill移入Slider并删除Fill Area
    血条
    3、Background和Fill图片都设为圆环
    Background和Fill坐标全部置零使二者重合
    坐标
    调色
    血条
    Slider设为长宽4x4大小
    血条

  5. 做成预制件拖入Prefabs文件夹

7、调整光线

1、Window->Rendering->Lighting进入光源设置
2、在Environment Lighting将Source的SkyBox改为Color
3、在Scene->Lighting Settings-->new Lighting Settings
4、LightingMapping Seethings将LightingMapper设为Enlighten
5、Lighting Mode设为Subtractive
6、删除原先场景光照

8、使用脚本控制坦克行为

  1. 在Scripts文件夹新建脚本,命名为TankControl
    使用Input控制器结合RigidBody让坦克移动
 //对象声明过后要实例化才能使用
    //变量名不要使用rigidbody,这个命名在基类中存在所以会被隐藏继承,除非加new--用下划线区分开
    public  Rigidbody _rigidbody;
    // Start is called before the first frame update
    void Start()
    {
   
        //this指这个脚本,此脚本的游戏对象(挂载到Tank),获取此游戏对象身上的RigidBody组件
        _rigidbody =  gameObject.GetComponent<Rigidbody>();//新版本不必加this
    }
  1. Input管理器
    1、打开Input Manager
    2、edit->Project Settings->Input Manager
    3、Horizontal(水平)、Vertical(垂直)—
    水平
    垂直
  public float speed = 2;//速度
    public float rotateSpeed = 2;//转速
 void Update()
    {
   
        //结合Input控制器
        h_Value = Input.GetAxis("Horizontal1");//a,d--转弯
        v_Value = Input.GetAxis("Vertical1");//s,w--前进后退

        if (v_Value != 0)//为正,前进,为负,后退
        {
   
            _rigidbody.MovePosition(this.transform.position + v_Value*this.transform.forward * speed * Time.deltaTime);//Time.deltaTime--上一帧执行的时间/每帧的间隔时间
        }
        //转弯
        if(h_Value!=0)
        {
   
            if(v_Value<0)
            {
   
                h_Value = -h_Value;//转弯逻辑
            }
            this.gameObject.transform.Rotate(Vector3.up * h_Value * rotateSpeed * Time.deltaTime);
        }
    }
  1. 避免坦克翻车
    改变x轴和z轴
    在RigidBody约束(Constraints)轴变化
    约束
  2. 两个坦克
    枚举两个坦克
public enum TankType
{
   
    Tank_One=1,
    Tank_Two=2,
    Tank_Enemy=3,
}
 public TankType tankType = TankType.Tank_One;//坦克1
 public string inputHorizontalStr;
 public string inputVerticalStr;//使输入方式可变,wasd和上下左右
void Start()
    {
   
        //this指这个脚本,此脚本的游戏对象(挂载到Tank),获取此游戏对象身上的RigidBody组件
        _rigidbody =  gameObject.GetComponent<Rigidbody>();//新版本不必加this
        inputHorizontalStr = inputHorizontalStr + (int)tankType;
        //在unity面板中输入Horizontal和Vertical,自动根据坦克1或2来赋值Horizontal1/2和Vertical1/2
        inputVerticalStr = inputVerticalStr + (int)tankType;
    }
    void Update()
    {
   
        //结合Input控制器
        h_Value = Input.GetAxis(inputHorizontalStr;//a,d--转弯
        v_Value = Input.GetAxis(inputVerticalStr);//s,w--前进后退
     }

两个坦克
两个输入模式

  1. 炮弹发射
    InputManager中Fire,FIre1指向空格键
    开火
	public GameObject shell;//炮弹
    public Transform shellPos;//炮弹发射位置
     void Start(
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值