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

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

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

 搜索helicopter

下方选中免费资源

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

再次选择在Unity中打开

在unity项目中导入资源

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

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

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

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

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

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

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

 将以下代码复制

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);
    }
}

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

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

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

 下面做完整项目:

首先取消 Helicopter 和 Helicopter1 绑定

 再新建一个Helicopter2 c#脚本

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

        }

    }
}

ctrl + s 保存

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

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

 即可完成,运行项目

 

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

  • 2
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值