Unity之十分钟做一个会飞的超人️

📒目录

👨‍💻开工 

🌏准备工作

📚编写脚本

📌实现动作切换 

🎯添加拖尾组件

🎖️完工下班!!


📅终于又到周五了,以前闲的发慌现在忙了却又盼着能摸鱼🤣

💡突发奇想闪电侠⚡我做了再做一个会飞的超人,🏎️闪电侠改变速度的数值就可以,💣但是超人飞的话没头绪了❓老样子不会就去找教程......完工之后直接上效果图吧💻:

📑教程原出处:

小破站Up主勿杉搬运油管教程Vinny GameDev,https://www.youtube.com/watch?v=8_49VvqssMU

游戏资源GitHub: https://github.com/vinnygamedev/FlyingCharacterController/tree/d2d772d502ac34d4650db38ab780cacb082f68a9

🎮下面以博文的形式实现这个小实例


👨‍💻开工 

🌏准备工作

💥首先在GitHub上拿到游戏资源后打开项目,点击窗口 ——》 包资源管理器  ——》 安装Cinemachine.

🚀安装完成后在层级下新建 FreeLookCamera.这里我用默认名字CM FreeLook1

🔥在玩家下创建空对象命名为 CamFollow并放在玩家的颈部区域

💤点击CM FreeLook1CamFollow拖到FollowLookAt

 🧐调整参数CM FreeLook1

🌟设置图层和标签

📚编写脚本

🖥️编写飞行控制脚本FlyController和摄像机瞄准脚本CameraAiming

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class FlyController : MonoBehaviour
{
    public float moveSpeed;
    public float maxFloatHeight = 10;
    public float minFloatHeight;

    public Camera freeLookCamera;
    private float currentHeight;

    private Animator anim;
    private float xRotation;
    
    // Start is called before the first frame update
    void Start()
    {
        currentHeight = transform.position.y;
        anim = GetComponent<Animator>();

        Cursor.lockState = CursorLockMode.Locked;
    }

    // Update is called once per frame
    void Update()
    {
        //float horizontal = Input.GetAxis("Horizontal");
        //float vertical = Input.GetAxis("Vertical");
        xRotation = freeLookCamera.transform.rotation.eulerAngles.x;

        if (Input.GetKey(KeyCode.W))
        {
            MoveCharacter();
        }
        else
        {
            DisableMovement();
        }

        currentHeight = Mathf.Clamp(transform.position.y, currentHeight, maxFloatHeight);
        transform.position = new Vector3(transform.position.x, currentHeight, transform.position.z);
    }

    private void MoveCharacter()
    {
        Vector3 cameraForward = new Vector3(freeLookCamera.transform.forward.x, 0, freeLookCamera.transform.forward.z);
        transform.rotation = Quaternion.LookRotation(cameraForward);
        transform.Rotate(new Vector3(xRotation,0,0),Space.Self);
        
        anim.SetBool("isFlying",true);
        Vector3 forward = freeLookCamera.transform.forward;
        Vector3 flyDirection = forward.normalized;

        currentHeight += flyDirection.y * moveSpeed * Time.deltaTime;
        currentHeight = Mathf.Clamp(currentHeight, minFloatHeight, maxFloatHeight);

        transform.position += flyDirection * moveSpeed * Time.deltaTime;
        transform.position = new Vector3(transform.position.x, currentHeight, transform.position.z);
    }

    private void DisableMovement()
    {
        anim.SetBool("isFlying",false);
        transform.rotation = Quaternion.Euler(0, transform.rotation.eulerAngles.y, 0);
    }
}

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using Cinemachine;

public class CameraAiming : MonoBehaviour
{
    public CinemachineFreeLook freeLookCamera;
    public float zoomSpeed = 5;
    public float startFOV;
    public float zoomedOutFOV;

    public float offSetStart;
    public float offSetEnd;

    private float targetFOV;
    private float targetOffset;
    private bool isZoomingOut;
    
    // Start is called before the first frame update
    void Start()
    {
        targetFOV = startFOV;
        targetOffset = offSetStart;
    }

    // Update is called once per frame
    void Update()
    {
        isZoomingOut = Input.GetKey(KeyCode.W);

        targetFOV = isZoomingOut ? zoomedOutFOV : startFOV;
        targetOffset = isZoomingOut ? offSetEnd : offSetStart;

        float newFOV = Mathf.Lerp(freeLookCamera.m_Orbits[1].m_Radius, targetFOV, Time.deltaTime * zoomSpeed);
        float newOffset = Mathf.Lerp(freeLookCamera.GetRig(1).GetCinemachineComponent<CinemachineComposer>().m_TrackedObjectOffset.x,targetOffset,Time.deltaTime * zoomSpeed);

        CinemachineComposer composer = freeLookCamera.GetRig(1).GetCinemachineComponent<CinemachineComposer>();
        composer.m_TrackedObjectOffset.x = newOffset;
        freeLookCamera.m_Orbits[1].m_Radius = newFOV;
    }
}

🔫为脚本参数赋值

📌实现动作切换 

 🍊编辑动画器,新建一个bool类型的参数isFlying来判断玩家是否处于飞行状态

🎯添加拖尾组件

🤖️之前我在闪电侠身上装了拖尾组件,这次我也在教程的基础上给超人加上拖尾组件


🙋展开玩家模型找到超人的双手双脚

🎇添加拖尾组件并设置好参数包括宽度、时间、材质

🎖️完工下班!!

㊗️大家周末愉快 ,拜拜👋

  • 5
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
提供的源码资源涵盖了安卓应用、小程序、Python应用和Java应用等多个领域,每个领域都包含了丰富的实例和项目。这些源码都是基于各自平台的最新技术和标准编写,确保了在对应环境下能够无缝运行。同时,源码中配备了详细的注释和文档,帮助用户快速理解代码结构和实现逻辑。 适用人群: 这些源码资源特别适合大学生群体。无论你是计算机相关专业的学生,还是对其他领域编程感兴趣的学生,这些资源都能为你提供宝贵的学习和实践机。通过学习和运行这些源码,你可以掌握各平台开发的基础知识,提升编程能力和项目实战经验。 使用场景及目标: 在学习阶段,你可以利用这些源码资源进行课程实践、课外项目或毕业设计。通过分析和运行源码,你将深入了解各平台开发的技术细节和最佳实践,逐步培养起自己的项目开发和问题解决能力。此外,在求职或创业过程中,具备跨平台开发能力的大学生将更具竞争力。 其他说明: 为了确保源码资源的可运行性和易用性,特别注意了以下几点:首先,每份源码都提供了详细的运行环境和依赖说明,确保用户能够轻松搭建起开发环境;其次,源码中的注释和文档都非常完善,方便用户快速上手和理解代码;最后,我定期更新这些源码资源,以适应各平台技术的最新发展和市场需求。
提供的源码资源涵盖了安卓应用、小程序、Python应用和Java应用等多个领域,每个领域都包含了丰富的实例和项目。这些源码都是基于各自平台的最新技术和标准编写,确保了在对应环境下能够无缝运行。同时,源码中配备了详细的注释和文档,帮助用户快速理解代码结构和实现逻辑。 适用人群: 这些源码资源特别适合大学生群体。无论你是计算机相关专业的学生,还是对其他领域编程感兴趣的学生,这些资源都能为你提供宝贵的学习和实践机。通过学习和运行这些源码,你可以掌握各平台开发的基础知识,提升编程能力和项目实战经验。 使用场景及目标: 在学习阶段,你可以利用这些源码资源进行课程实践、课外项目或毕业设计。通过分析和运行源码,你将深入了解各平台开发的技术细节和最佳实践,逐步培养起自己的项目开发和问题解决能力。此外,在求职或创业过程中,具备跨平台开发能力的大学生将更具竞争力。 其他说明: 为了确保源码资源的可运行性和易用性,特别注意了以下几点:首先,每份源码都提供了详细的运行环境和依赖说明,确保用户能够轻松搭建起开发环境;其次,源码中的注释和文档都非常完善,方便用户快速上手和理解代码;最后,我定期更新这些源码资源,以适应各平台技术的最新发展和市场需求。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值