首先创建一个3D项目,并给项目起一个名字

unity 机房模型 unity飞机模型_c#

然后进入商店准备下载直升机模型资源

unity 机房模型 unity飞机模型_unity 机房模型_02

 搜索helicopter

unity 机房模型 unity飞机模型_c#_03

下方选中免费资源

unity 机房模型 unity飞机模型_vr_04

 选中直升机模型后点击添加至我的资源

unity 机房模型 unity飞机模型_c#_05

再次选择在Unity中打开

unity 机房模型 unity飞机模型_vr_06

在unity项目中导入资源

unity 机房模型 unity飞机模型_c#_07

unity 机房模型 unity飞机模型_vr_08

 在Asset中新添加的资源包中选择Models

unity 机房模型 unity飞机模型_c#_09

 将直升机拖拽至项目场景中

unity 机房模型 unity飞机模型_ico_10

 之后对直升机进行完全解压缩

unity 机房模型 unity飞机模型_unity_11

 创建一个3d面板,并设置面板大小

unity 机房模型 unity飞机模型_ico_12

unity 机房模型 unity飞机模型_c#_13

之后再Asset中新建一个文件夹,命名为script

unity 机房模型 unity飞机模型_vr_14

 在script文件中新建一个c#脚本

unity 机房模型 unity飞机模型_vr_15

命名为Helicopter ,是直升机起飞代码 双击打开

unity 机房模型 unity飞机模型_c#_16

 将以下代码复制

using System.Collections;
 using System.Collections.Generic;
 using UnityEngine;public class Helicopter : MonoBehaviour
 {
     public float speed = 2f;//向上的位移速度
     //每一帧被调用一次
     private void Update()
     {
         if (transform.position.z > 10f)
         {
             FlyDown();
         }
         else if (transform.position.y < 10)
         {
             FlyUp();
         }
         else
         {
             FlyForWard();
         }
     }
     //向上飞
     void FlyUp()
     {
         transform.Translate(Vector3.up * speed * Time.deltaTime);
     }
     //向前飞
     void FlyForWard()
     {
         transform.Translate(Vector3.forward * speed * Time.deltaTime);
     }
     //向下飞
     void FlyDown()
     {
         if (transform.position.y > 0)
             transform.Translate(Vector3.down * speed * Time.deltaTime);
     }
 }

unity 机房模型 unity飞机模型_ico_17

 ctrl + s 保存

再在script文件中新建一个c#脚本,命名为Helicopter1 ,是螺旋桨加速代码

将以下代码复制

using System.Collections;
 using System.Collections.Generic;
 using UnityEngine;public class Helicopter1 : MonoBehaviour
 {
     public GameObject mainRotor;//主螺旋桨
     public float rotSpeed = 0f;//旋转速度
     public bool isStart = false;//是否启动引擎
     private void Update()
     {
         if (Input.GetKeyDown(KeyCode.E))
         {
             isStart = !isStart;
         }
         if (isStart)
         {
             rotSpeed += 0.5f;
         }
         else
         {
             rotSpeed -= 0.5f;
         }
         if (rotSpeed < 0)
             rotSpeed = 0;
         if (rotSpeed > 2000)
             rotSpeed = 2000;
         mainRotor.transform.Rotate(Vector3.up * rotSpeed * Time.deltaTime);
     }
 }


回到unity项目中,将Helicopter代码绑定在直升机主体上

再将Helicopter1代码绑定在直升机子项目的主螺旋桨上

unity 机房模型 unity飞机模型_unity_18

再将主螺旋桨拖拽至c#脚本下框none中

unity 机房模型 unity飞机模型_ico_19

 

 点击运行即可飞行,后按键盘E键 著螺旋桨即可旋转

unity 机房模型 unity飞机模型_ico_20

 下面做完整项目:

首先取消 Helicopter 和 Helicopter1 绑定

unity 机房模型 unity飞机模型_unity 机房模型_21

 

unity 机房模型 unity飞机模型_vr_22

再新建一个Helicopter2 c#脚本

unity 机房模型 unity飞机模型_unity 机房模型_23

 双击Helicopter2脚本  将以下代码复制

using System.Collections;
 using System.Collections.Generic;
 using Unity.VisualScripting;
 using UnityEditor.Experimental.GraphView;
 using UnityEngine; public class Helicopter2 : MonoBehaviour
 {
     public GameObject mainRotorObj;//主螺旋桨物体
     public GameObject tailRotorObj;//尾部螺旋桨
     public float rotSpeed = 0f;//旋转速度
     public bool isOnOff = false;//是否开关引擎
     public float rotAcceleration = 0f;//旋转加速度
     //定义枚举类型
     public enum Status
     {
         ZeroEngine,//停机状态
         RunEngine,//启动状态
         TakeOff,//起飞状态
         FlyForward,//平飞状态
         Landing//降落状态
     }
     Status helicopterStatus;//直升机状态     void Start()
     {
         if (mainRotorObj == null || tailRotorObj == null)
             Debug.LogError("部分子物体没有拽入参数栏");
     }    void Update()
     {
         if (Input.GetKeyUp(KeyCode.E))
         {
             isOnOff = !isOnOff;
         }
         if (isOnOff)
         {
             helicopterStatus = Status.RunEngine;
         }
         else
         {
             helicopterStatus = Status.ZeroEngine;
         }
         if (rotSpeed < 0)
             rotSpeed = 0;
         if (rotSpeed > 2000f)
             rotSpeed = 2000;
         //螺旋桨公共代码
         rotSpeed += rotAcceleration;
         mainRotorObj.transform.Rotate(Vector3.up * rotSpeed * Time.deltaTime);
         tailRotorObj.transform.Rotate(Vector3.left * rotSpeed * Time.deltaTime);
         if (rotSpeed > 800)
             helicopterStatus = Status.TakeOff;
         if (transform.position.y > 10f)
             helicopterStatus = Status.FlyForward;
         if (transform.position.x > 20f)
             helicopterStatus = Status.Landing;
         if (rotSpeed == -0.5)
         {
             helicopterStatus = Status.TakeOff;
         }
         if (helicopterStatus == Status.TakeOff)
             rotSpeed += 0.5f;
         //开关语句进行状态分支,引入枚举变量
         if (helicopterStatus == Status.ZeroEngine)
         {
             rotAcceleration = -1f;
         }
         else if (helicopterStatus == Status.RunEngine)
         {
             rotAcceleration = 1f;
         }
         else if (helicopterStatus == Status.TakeOff)
         {
             transform.Translate(Vector3.up * 2f * Time.deltaTime);
         }
         else if (helicopterStatus == Status.FlyForward)
         {
             transform.Translate(Vector3.forward * 2f * Time.deltaTime);
         }
         else if (helicopterStatus == Status.Landing)
         {
             if (transform.position.y > 0)
                 transform.Translate(Vector3.down * 2f * Time.deltaTime);
             rotAcceleration = -0.5f;        }
    }
 }

unity 机房模型 unity飞机模型_vr_24

ctrl + s 保存

回到unity项目之后将Helicopter2代码绑定在直升机主体上

unity 机房模型 unity飞机模型_unity 机房模型_25

 将c#下方none 绑定  主螺旋桨 和 尾螺旋桨

unity 机房模型 unity飞机模型_ico_26

 即可完成,运行项目

unity 机房模型 unity飞机模型_unity 机房模型_27

 

目的要求:运行项目按E键螺旋桨加速,加速至800直升机向上飞行,达到2000转速不再加速,直升机向上飞行10m向前飞,向前飞10米向下飞并且螺旋桨减速。螺旋桨减速至0再次起飞,并且螺旋桨不再旋转。