黑魂复刻游戏的玩家控制器(基础移动,动画实现及优化)——Unity随手记(2021.3.15)

本文记录了在Unity中实现黑魂风格游戏玩家控制器的过程,包括动画机设计、角色旋转、位移、爬坡、跑步以及旋转和跑步动画的优化。遇到的问题如模型旋转错误和移动叠加过快等也进行了探讨,并分享了解决方案。
摘要由CSDN通过智能技术生成

今天实现的内容:

动画机设计理念

要我说,动画机真的是老生常谈的东西了。做了好几次了,目前也就是将角色的地面动画做进去。
设计理念就是使用混合树ground将地面移动动画统一管理起来。
在这里插入图片描述

动画机的运用及模型旋转

要运用动画机,需要将动画机和输入模块串接起来。所以我们需要新的脚本,没错,PlayerController。同样的,顺手解决角色的旋转功能,旋转的思路为直接修改模型的forward。

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

public class PlayerController : MonoBehaviour
{
   
    // 玩家的人物模型 用来获取模型身上的动画机以及其它
    public GameObject model;
    // 输入模块
    public PlayerInput pi;
    // 动画机
    private Animator anim;

    // Awake适合用来做GetComponent
    void Awake()
    {
   
        anim = model.GetComponent<Animator>();
        pi = GetComponent<PlayerInput>();
    }

    // Update is called once per frame
    void Update()
    {
   
        // 将输入转换为速度 赋值给动画机相关参数
        anim.SetFloat("forward", pi.dirMag);
        // 只在有速度时能够旋转 防止原地旋转
        if(pi.dirMag > 0.1f)
            model.transform.forward = pi.dirVec;
    }
}

在我们的方案中,旋转的只是模型,PlayerController所在的父物体节点不会旋转
在这里插入图片描述
我们可以将旋转和输入的模长计算放到PlayerInput中进行,能让我们的代码看起来更漂亮。

    // 玩家的输入模长量 用于当成向前量大小作为动画控制
    public float dirMag;
    // 玩家的方向 用于旋转模型
    public Vector3 dirVec;

    // Update is called once per frame
    void Update()
    {
   
        // 计算输入模长
        dirMag &
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值