欢迎光临散文网 会员登陆 & 注册

Unity暑期萌新入门:玩家角色(二)

2019-06-26 14:57 作者:皮皮关做游戏  | 我要投稿

作者:Truly


大家好,之前继Unity暑期萌新入门:玩家角色(一)之后,

貌似被吞掉了一篇文章!!!∑(゚Д゚ノ)ノ,现在来帮大家补上哦(`^´)ノ


上一节,我们为John设置了动画和物理系统,这一节我们将为John添加Script(脚本),用来控制John运动。对于没有编程基础的小伙伴来说,这可能会是第一个“劝退关卡”。因此,大家也可以选择“云通关”,在理解思路的基础上,跟着敲一遍或者化身复制粘贴小能手。

还有个温馨提示,符号记得要用英文输入法


一、创建脚本

在Project视窗中打开Assets > Scripts文件夹,右键选择Create > C# Script,文件命名为PlayerMovement。(如果后来要重命名,请保持文件名和类名(Class)一致,萌新如果命名错误,建议重新创建脚本)

创建脚本
命名


二、编辑脚本

左键双击PlayerMovement用Visual Studio打开脚本,没有注册Visual Studio的小伙伴可以先注册(免费的哦)。

1 基本思路

我们希望在游戏中通过WASD来控制主角John运动,思路如下:

(1) 获取按键输入(WASD)。

(2) 根据输入,进行角色运动的相关参数设置和计算(移动向量和旋转四元数)。

(3) 在播放动画的时候,根据上边的计算结果来移动和旋转角色。

可能会涉及一些中学的向量知识和逻辑运算(与、或、非)。


2 脚本编写

(1) 声明变量

声明变量有点像王师傅做菜的第一步,把各种要用到的材料和工具等先说明准备好。我们需要使用某些组件或者某些参数的时候,一般会用变量把它们先“装”起来,给它们起一个名字。“=”可用于给变量赋值,//”后边是注释,解析代码含义。这样理解就行:“//”后面的内容是给人看的,而不是给机器看的

格式:变量类型 变量名;

常用变量类型:暂时了解即可。

  • float:单浮点数,暂时可以理解为精度较低的小数。

  • bool:只有真(true) 和假(false)。

例子:float speed; 可以理解为一个叫speed的小数变量。

代码:

using System.Collections;

using System.Collections.Generic;

using UnityEngine;

 

public class PlayerMovement : MonoBehaviour

{

    public float turnSpeed = 20f;//旋转速度

 

    Animator m_Animator;   

    Rigidbody m_Rigidbody;  //刚体

    Vector3 m_Movement;     //移动向量

    Quaternion m_Rotation = Quaternion.identity;//旋转四元数

 

(2) 相关逻辑运算

方法:可以理解为类似于王师傅做菜时小块,宽油等处理材料的手段或者方法,在这里使处理数据信息的方法。

格式:

返回值类型 方法名()

{

   方法内容;

}

 

Start()方法只在初始化的时候执行一次,FixedUpdate()在游戏过程中每一个物理帧执行一次。再次温馨提示,标点符号记得要用英文输入法哦~

代码:

①在开始时获取组件,这些组件我们在上一篇中已经添加到John的预制体里了。void表示这个方法不用返回值。

void Start()

   {

        //获取组件

        m_Animator = GetComponent<Animator>();  //获取Animator组件

        m_Rigidbody = GetComponent<Rigidbody>();//获取Rigidbody组件

    }

 ②获取按键输入并且根据输入进行处理运算。


void FixedUpdate()

    {

        //获取按键输入

        float horizontal = Input.GetAxis("Horizontal"); //水平输入AD键

        float vertical = Input.GetAxis("Vertical");     //竖直输入WS键

      

        //根据输入设置移动向量

        m_Movement.Set(horizontal, 0f, vertical);//(X,Y,Z)轴

        m_Movement.Normalize();                  //转化为单位向量,表示移动方向

       

        //根据输入判断是否在行走

        bool hasHorizontalInput = !Mathf.Approximately(horizontal, 0f);//是否有水平输入(根据输入是否等于0)

        bool hasVerticalInput = !Mathf.Approximately(vertical, 0f);    //是否有竖直输入(根据输入是否等于0)

        bool isWalking = hasHorizontalInput || hasVerticalInput;       //如果有水平或者竖直输入,则判断为在行走。"||"或。

 

        //设置动画参数

        m_Animator.SetBool("IsWalking", isWalking);//与上一篇的过渡条件参数对应

 

        //旋转相关

        Vector3 desiredForward = Vector3.RotateTowards

            (transform.forward, m_Movement, turnSpeed * Time.deltaTime, 0f);//(现在前方向量,目标方向向量,角速度,向量大小变化)

        m_Rotation = Quaternion.LookRotation(desiredForward);               //设置旋转四元数,暂时理解为旋转方法要用的参数

    }

 

(3) 移动和旋转角色

    //当播放动画的时候,调用Rigidbody(刚体)控制角色运动

    private void OnAnimatorMove()

    {

        //移动

        m_Rigidbody.MovePosition(m_Rigidbody.position + m_Movement * m_Animator.deltaPosition.magnitude);

        //旋转

        m_Rigidbody.MoveRotation(m_Rotation);

    }

}

 


编辑完之后CTRL+S保存脚本。


3 添加脚本到JohnLemon预制体

回到Unity,在Hierarchy窗口中选中JohnLemon,Inspector视窗里点击Prefab>Open打开预制体。把Assets>Scripts文件夹里的PlayerMovement脚本拖到Inspector窗口里,完成后退出编辑预制体。

现在我们就可以CTRL+P运行游戏,通过WASD控制JohnLemon移动了,赶紧试试吧~


结语:不知道有多少小伙伴坚持完这一关呢?这一节我们为John添加了脚本,成功地控制它运动。没有编程基础的小伙伴也许会一头雾水,这是正常现象,因为体验过游戏制作的流程后,C#基础还是需要踏踏实实地补回来。下一篇我们将会为游戏添加关卡以及调节光照。


迫不及待想自行开始制作的小伙伴,可以浏览John Lemon's Haunted Jaunt官方教程:

https://learn.unity.com/project/john-lemon-s-haunted-jaunt-3d-beginner


学有余力的小伙伴,如果想更加系统地了解C#基础,可以参考以下C#编程基础视频:皮皮关做游戏

咱们的游戏开发交流群也欢迎强势插入:869551769

希望参与线下游戏开发学习的,欢~~~~~~迎访问:levelpp.com/

Unity暑期萌新入门:玩家角色(二)的评论 (共 条)

分享到微博请遵守国家法律