Unity游戏开发官⽅⼊门教程:飞机⼤战(七)——发射⼦弹教程⽬录:
本节要点
1. Instantiate()⽤于实例化⼀个prefab
2. Input.GetButton()⽤于接收按钮事件
3. Time.time⽤于记录从游戏开始到现在的时间
创建⼦弹挂点
1. 创建⼀个游戏对象,命名为Shot Spawn,作为⼦弹的挂点,并拖拽到Hierarchy的Player中作为child对象
2. 将⼀个Bolt从prefabs⾥拖拽出来,拖动Shot Spawn的position的Z,⼦弹创建的初始位置⼤概为1.25:
3. 设置完挂点的位置后,从Hierarchy中删除Bolt。
修改Player的PlayerController.cs脚本
1. 增加Update()函数,并使⽤Instantiate()⽅法进⾏⼦弹对象实例化。
2. 增加3个public对象:shot、shotSpawn和fireRate,分别⽤于指定⼦弹对象、⼦弹挂点和⼦弹发射间隔时间。
3. 增加1个private对象nextFire,⽤于计算时间间隔
PlayerController.cs详细脚本如下:
using System.Collections;
using System.Collections.Generic;
unity 教程using UnityEngine;
[System.Serializable]
public class Boundary
{
public float xMin, xMax, zMin, zMax;
}
public class PlayerController : MonoBehaviour
{
public float speed;
public float tilt;
public Boundary boundary;
private Rigidbody rb;
public GameObject shot;
public Transform shotSpawn;
public float fireRate;
private float nextFire;
void Update()
{
if(Input.GetButton("Fire1")&& Time.time > nextFire)
{
nextFire = Time.time + fireRate;
Instantiate(shot, shotSpawn.position, ation);
}
}
void Start()
{
rb =GetComponent<Rigidbody>();
}
void FixedUpdate()
{
float moveHorizontal = Input.GetAxis("Horizontal");
float moveVertical = Input.GetAxis("Vertical");
Vector3 movement =new Vector3(moveHorizontal,0.0f, moveVertical);
rb.velocity = movement * speed;
rb.position =new Vector3
(
Mathf.Clamp(rb.position.x, boundary.xMin, boundary.xMax),
0.0f,
Mathf.Clamp(rb.position.z, boundary.zMin, boundary.zMax)
);
}
}
在Inspector中指定脚本的public对象
1. 将prafabs中的Bolt拖拽到Inspector中的Shot
2. 将Hierarchy中的Shot Spawnt拖拽到Inspector中的Shot Spawnt
3. 将Fire Rate设置为0.2
4. 运⾏游戏,按下⿏标左键,效果如下:
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论