整理逻辑思路:
//【业务逻辑】这个脚本用来1.控制物体移动旋转(WASD)、 2.发射子弹(空格键)
//【程序逻辑2】
首先检测用户没有按下空格键 2.如果按下呢执行发射子弹函数 3.克隆子弹 4.让克隆的子弹往前跑
搭建场景

为子弹模板添加刚体,并且限制旋转
编写脚本:
using System.Collections; using System.Collections.Generic; using UnityEngine; public class RoleControl : MonoBehaviour { //【业务逻辑】这个脚本用来1.控制物体移动旋转(WASD)、 //2.发射子弹(空格键) //【程序逻辑2】首先检测用户没有按下空格键 2.如果按下呢执行发射子弹函数 //3.克隆子弹 4.让克隆的子弹往前跑 //用代码创建游戏物体 GameObject OneMuban; GameObject ZIdanborn; GameObject ZidanFather; Rigidbody zidanRigi; GameObject TEMPZidan;//这个变量是用来存储临时克隆的物体 float Speed = 10f; //用来提供移动旋转速度 public float Forcedaxiao=10f; //------------------------- void Start() { OneMuban = GameObject.Find("Zidan"); ZIdanborn = GameObject.Find("ZIdanborn"); ZidanFather = GameObject.Find("ZidanFather"); } void Update() { if (Input.GetKeyDown(KeyCode.Space)) { Debug.Log("用户按下空格"); FPSshot(); Debug.Log("子弹克隆完毕"); } Object.Destroy(TEMPZidan,3f);//3秒后自动销毁子弹 ControlRole();//用来控制物体移动和旋转 } void FPSshot()//这是一个自定义函数用来执行子弹的克隆与发射,3.克隆子弹 4.让克隆的子弹往前跑 { Debug.Log("开始执行发射子弹"); TEMPZidan= GameObject.Instantiate(OneMuban, ZIdanborn.transform.position, Quaternion.Euler(90, 0, 0), ZidanFather.transform); //TEMPobj.transform.Translate(new Vector3(0, 100, 0)); //添加一个力,只需添加一次,就会一直往前跑 zidanRigi = TEMPZidan.GetComponent<Rigidbody>();//获取克隆的子弹的刚体组件 //给克隆的子弹的刚体组件添加力 zidanRigi.AddForce(ZIdanborn.transform.forward*Forcedaxiao, ForceMode.Impulse); } void ControlRole() { Debug.Log("控制物体角色移动旋转"); float X = Input.GetAxis("Horizontal"); float Y = Input.GetAxis("Vertical"); transform.Translate(new Vector3(X * Speed * Time.deltaTime, 0, Y * Speed * Time.deltaTime), Space.Self);//这个函数是获取WASD参数X,Y得到-1-1,然后赋值到三维向量作为移动函数的数值 float RoteteY = Input.GetAxis("Mouse X"); transform.Rotate(new Vector3(0, RoteteY * Speed, 0)); } } //类=变量+函数(计算方法)