T02_unity制作直升机起飞降落 c#

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

T02_unity制作直升机起飞降落 c#_第1张图片

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

T02_unity制作直升机起飞降落 c#_第2张图片

 搜索helicopter

下方选中免费资源

T02_unity制作直升机起飞降落 c#_第3张图片

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

T02_unity制作直升机起飞降落 c#_第4张图片

再次选择在Unity中打开

T02_unity制作直升机起飞降落 c#_第5张图片

在unity项目中导入资源

T02_unity制作直升机起飞降落 c#_第6张图片

T02_unity制作直升机起飞降落 c#_第7张图片

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

T02_unity制作直升机起飞降落 c#_第8张图片

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

T02_unity制作直升机起飞降落 c#_第9张图片

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

T02_unity制作直升机起飞降落 c#_第10张图片

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

T02_unity制作直升机起飞降落 c#_第11张图片

T02_unity制作直升机起飞降落 c#_第12张图片

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

T02_unity制作直升机起飞降落 c#_第13张图片

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

T02_unity制作直升机起飞降落 c#_第14张图片

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

T02_unity制作直升机起飞降落 c#_第15张图片

 将以下代码复制

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);
    }
}
T02_unity制作直升机起飞降落 c#_第16张图片

 ctrl + s 保存

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

yH5BAAAAAAALAAAAAAOAA4AAAIMhI+py+0Po5y02qsKADs=wAAACH5BAEKAAAALAAAAAABAAEAAAICRAEAOw==

将以下代码复制

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代码绑定在直升机子项目的主螺旋桨上

T02_unity制作直升机起飞降落 c#_第17张图片

再将主螺旋桨拖拽至c#脚本下框none中T02_unity制作直升机起飞降落 c#_第18张图片 

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

T02_unity制作直升机起飞降落 c#_第19张图片

 下面做完整项目:

首先取消 Helicopter 和 Helicopter1 绑定

T02_unity制作直升机起飞降落 c#_第20张图片 T02_unity制作直升机起飞降落 c#_第21张图片再新建一个Helicopter2 c#脚本

T02_unity制作直升机起飞降落 c#_第22张图片

 双击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;

        }

    }
}

T02_unity制作直升机起飞降落 c#_第23张图片

ctrl + s 保存

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

T02_unity制作直升机起飞降落 c#_第24张图片

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

T02_unity制作直升机起飞降落 c#_第25张图片

 即可完成,运行项目

T02_unity制作直升机起飞降落 c#_第26张图片

 

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

你可能感兴趣的:(unity,c#,vr)