3D游戏实战开发(2) | 青训营笔记
这是我参与「第五届青训营 」笔记创作活动的第10天
三、控制与碰撞
Input.GetAxis() 和 输入管理器(InputManager)
- InputManager 是 Unity 设置输入响应方式的管理列表,它的位置在 Edit > Project Setting > Input 中。
添加敌机
- 为每架敌机预制体添加一个刚体。
- 选中敌机预制体,在菜单栏执行 Component > Physics > Rigidbody
- 在新添加的刚体组件中,将 Use Gravity 设置为 false。
- 将 isKinematic 设置为 true。
- 打开 Constraints 旁边的三角形展开按钮,冻结Z轴的坐标和XYZ轴的旋转。
- 建立敌机的脚本 Enemey.cs。
- 为每架敌机预制体均添加脚本 Enemy.cs。
Enemy.cs 的代码:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class Enemy : MonoBehaviour { [Header("Set in Inspector: Enemy")] public float speed = 10f;
public float fireRate = 0.3f;
public float health = 10;
public float score = 100;
public Vector3 pos { get{return(this.transform.position); }set{this.transform.position = value; } }// Update is called once per frame void Update() {
Move();
}
public virtual void Move(){
Vector3 tempPos = pos;
tempPos.y -= speed * Time.deltaTime;
pos = tempPos;
}
}
随机生成敌机
- 新建一个名为 Main 的 C# 脚本,绑定到 Main Camera 上。
- 敌机与玩家控制的飞船没有碰撞效果。
- 玩家控制的飞船会移出相机视野之外。
- 敌机会不断添加进场景中,导致场景中的实体越来越多。
设置标签、图层和物理规则
游戏中存在不同类型的游戏对象,它们需要放置在不同的图层中,并与其他游戏对象发生不 同的交互。
- 主角飞船(Hero):会与敌机、敌机炮弹、升级道具碰撞,但不会与主角飞船的炮弹相碰 撞。 • 主角飞船的炮弹(ProjectileHero):与敌机、敌机的炮弹相碰撞。
- 敌机(Enemy):与主角飞船和主角飞船的炮弹相碰撞。
- 敌机的炮弹(ProjectileEnemy):只与主角飞船相碰撞。
- 升级道具(PowerUp):只与主角飞船相碰撞。
物理管理器
- 菜单栏中执行Edit > Project Settings > Physics 命令。