3D游戏实战开发(2) | 青训营笔记

168 阅读2分钟

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 上。

image.png

image.png

  • 敌机与玩家控制的飞船没有碰撞效果。
  • 玩家控制的飞船会移出相机视野之外。
  • 敌机会不断添加进场景中,导致场景中的实体越来越多。

设置标签、图层和物理规则

游戏中存在不同类型的游戏对象,它们需要放置在不同的图层中,并与其他游戏对象发生不 同的交互。

  • 主角飞船(Hero):会与敌机、敌机炮弹、升级道具碰撞,但不会与主角飞船的炮弹相碰 撞。 • 主角飞船的炮弹(ProjectileHero):与敌机、敌机的炮弹相碰撞。
  • 敌机(Enemy):与主角飞船和主角飞船的炮弹相碰撞。
  • 敌机的炮弹(ProjectileEnemy):只与主角飞船相碰撞。
  • 升级道具(PowerUp):只与主角飞船相碰撞。

物理管理器

  • 菜单栏中执行Edit > Project Settings > Physics 命令。