Unity入门项目John Lemon‘s Haunted Jaunt中的PlayerMovement脚本

项目文档链接:John Lemon's Haunted Jaunt 项目教程 (适用于3D初学者) - Unity Learn

1.Unity中建立C#脚本

在Project栏中在Asset中右键后选择create点击C#Script即可

建议创建一个Scripts文件夹用于存放C#脚本

建立时没有修改名称记得后续要重命名一下

脚本PlayerMovement总代码

using System.Collections;
using System.Collections.Generic;
using TMPro;
using Unity.Collections;
using Unity.VisualScripting;
using UnityEngine;

public class PlayerMovement : MonoBehaviour
{
    Vector3 m_Movement;
    Quaternion m_Rotation = Quaternion.identity;
    Animator m_Animator;
    Rigidbody m_Rigidbody;
    AudioSource m_AudioSource;
    public float turnSpeed=20f;
    void Start()
    {
        m_Animator = GetComponent<Animator>();
        m_Rigidbody = GetComponent<Rigidbody>();
        m_AudioSource = GetComponent<AudioSource>();
    }

    // Update is called once per frame
    void FixedUpdate()
    {
        float horizontal = Input.GetAxis("Horizontal");
        float vertical = Input.GetAxis("Vertical");
        m_Movement.Set(horizontal, 0f, vertical);
        m_Movement.Normalize();
        bool hasHorizontalInput=!Mathf.Approximately(horizontal, 0f);
        bool hasVerticalInput=!Mathf.Approximately(vertical, 0f);
        bool isWalking = hasHorizontalInput || hasVerticalInput;
        m_Animator.SetBool("IsWalking", isWalking);
        if (isWalking)
        {
            if (!m_AudioSource.isPlaying)
            {
                m_AudioSource.Play();
            }
        }
        else
        {
            m_AudioSource.Stop();
        }
        Vector3 disiredForward = Vector3.RotateTowards(transform.forward, m_Movement, turnSpeed * Time.deltaTime, 0f);
        m_Rotation = Quaternion.LookRotation(disiredForward);
    }
    private void OnAnimatorMove()
    {
        m_Rigidbody.MovePosition(m_Rigidbody.position + m_Movement * m_Animator.deltaPosition.magnitude);
        m_Rigidbody.MoveRotation(m_Rotation);
    }

}

---------------------------------------------------------------------------------------------------------------------------------

    Vector3 m_Movement;
    Quaternion m_Rotation = Quaternion.identity;
    Animator m_Animator;
    Rigidbody m_Rigidbody;
    AudioSource m_AudioSource;
    public float turnSpeed=20f;
    void Start()
    {
        m_Animator = GetComponent<Animator>();
        m_Rigidbody = GetComponent<Rigidbody>();
        m_AudioSource = GetComponent<AudioSource>();
    }

Vector3 是Unity常用类之一 用来表示3D向量,也可以用于欧拉旋转

Quaternion为四元数 由xyz和w四个分量组成,Unity中用于存储表示对象的旋转角度

Animator、Rigibody、AudioSource都是Unity提供的组件

Animator 用于控制Unity中游戏对象(GameObject)的动画状态

Rigibody是Unity中提供控制游戏对象物理状态的组件 ,用户可以通过Rigibody组件来控制游戏对象的速度、旋转和其他物理属性

AudioSource是Unity中用来控制音频的组件,可以在组件中赋予游戏对象音频,同时调节音频音量和其他音频属性

GetComponent()是Unity提供的GameObject类中的方法

可以通过调用GetComponent()直接访问游戏对象的组件和进行参数的调整

Input.GetAxis()是Unity中的一个方法
用于获取玩家在键盘或者游戏手柄上输入的某个轴(即Axis)的值
Input.GetAxis("Horizontal")为获取水平轴
Input.GetAxis("Vertical")为获取垂直轴

在大多数情况下,水平轴被绑定到左右方向键或者左右摇杆,而垂直轴被绑定到上下方向键或者上下摇杆。Unity自动绑定了键盘的WASD以及上下左右


Input.GetAxis("Mouse X")和 Input.GetAxis("Mouse Y")则获取鼠标的滚轮轴的输入,分别对应鼠标的水平和垂直滚轮移动。

m_Movement.Set()即Vector3.Set()是将获取到的水平轴、垂直轴数值赋予给对象的一种方法

(x,y,z)      

 m_Movement.Normalize()进行向量的归一化,将Vector3中的向量长度缩放为1,并保持方向不变,确保移动速度不收输入值大小影响 

关于Normalize()方法的参考文章链接:Unity中的normalized参数_unity normalized-CSDN博客

Mathf.Approximately(x,y)判断X与Y是否接近

Animator.Setbool(X,Y) 第一个参数为要修改的布尔类型 第二个为bool参数

if语句块中是AudioSource类提供的三个方法 Isplaying是播放状态

RotateTowards()会返回一个新的Vector3向量 通过计算旋转速度和时间来旋转移动方向,同时限制最大转角度为0
以保证实现平滑地调整物体朝向
Time.deltaTime是一个表示上一帧到当前帧所用时间的变量,表示每一帧的间隔。后续常用。

MovePosition是一种移动刚体的方法,表示物体下一帧的位置,参数皆可计算

MoveRotation用于表示刚体的旋转,接受Quaternion类型的参数 用于表示物体下一帧的旋转

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值