创建成功后,进入了如下界面。
在Hierarchy中鼠标右键创建Plane(地面)游戏物体,将其Transform组件重置,并将游戏物体重命名为Ground,如下图所示。
调整地面的大小。
在Assets下创建文件夹Materials,并在其中创建Ground的Material(材质)并在Ground(地面)游戏物体上设置材质。如下图所示。(Smoothness为光滑度)
右键创建Cube,并给该游戏物体添加Rigidbody(刚体)组件,然后创建在Assets下创建Prefabs文件夹,将Cube拖入到Prefabs文件夹下将Cube游戏物体设置为prefab(预制体)。如下图所示。
Rigidbody:当游戏物体添加了刚体组件,会有物理效果,如重力。 prefab:预制体,相当于模板,当修改预制体时,由此prefab生成的实例也会进行相同的变化。
通过预制体来创建墙,在Unity中距离的单位为米,而Cube的长度为1,即是1米,当移动时,我们可以按住ctrl键然后通过按住箭头来移动固定的距离。创建墙如下图所示。
通过预制体来创建子弹的实例,因为子弹会有很多个,所以需要用到预制体,并且通过代码来控制子弹的生成。创建子弹如下图所示。
在Assets下创建Scripts文件夹,并且创建命名为Shoot的C#脚本文件,然后将脚本文件拖入Main Camera作为一个脚本组件。如下图所示。
打开Shoot脚本,并定义一个属性public GameObject bullet;,保存,回到Unity,可以看到Main Camera游戏物体中的脚本组件出现了变化,这时可以将Prefabs中的Sphera预制体拖入其中,给其赋值。具体如下图所示。
在Shoot的Update方法中加入实例化代码用于控制子弹的生成。
// 每帧调用一次 void Update() { //Input.GetMouseButtonDown(0):鼠标左键按下 if (Input.GetMouseButtonDown(0)) { //transform:当前脚本所在游戏物体的transform组件 //transform.position:这里取得的是当前游戏物体(Camera)的位置 //transform.rotation:当前游戏物体的旋转角度 GameObject.Instantiate(bullet, transform.position, transform.rotation);//生成bullet实例 } }此时运行,点击左键,观察Hierarchy发现,有Sphere实例生成。如下图所示。但是观察Game视图发现,子弹并没有发射出去。
我们可以通过Rigidbody(刚体)来给子弹施加速度,这样就可以发射了。 在Shoot中定义一个属性public float speed=5; 并在Update方法中获取Rigidbody组件,并赋予向前的速度。
//获得Rigidbody(刚体) Rigidbody rgd = b.GetComponent<Rigidbody>(); //给其赋一个向前的初速度 rgd.velocity = transform.forward * speed;这时我们运行下看看效果,如下图所示。 通过运行,我们发现,相机的距离过近需要调整相机距离,并且子弹发射出去进行了翻滚,我们可以通过锁定它的y轴来让它不进行翻滚。如下图所示。
创建C#脚本Movement,并将其挂载到Main Camera上。如下图所示。
在Movement脚本中添加属性public float speed = 3; 并且在Update方法中添加上下左右移动代码
void Update() { //获取左右键的按下 float h = Input.GetAxis("Horizontal"); //获取上下键的按下 float v = Input.GetAxis("Vertical"); //移动 //Time.deltaTime:时间修正值 transform.Translate(new Vector3(h, v, 0) * Time.deltaTime * speed); }对子弹速度进行一个调整。
运行效果如下图所示。