Unity 2D游戏开发:三种玩家移动控制方法详解
创作时间:
作者:
@小白创作中心
Unity 2D游戏开发:三种玩家移动控制方法详解
引用
CSDN
1.
https://blog.csdn.net/QA154/article/details/140561390
本文是作者学习Unity 2D游戏开发时的笔记,详细记录了三种控制玩家移动的方法。虽然文章是个人学习记录,但内容完整且实用,适合Unity初学者参考学习。
介绍
在Unity中实现玩家移动是游戏开发的基础。本文将介绍三种不同的方法来控制玩家移动。首先,创建一个简单的场景:一个粉色的圆形精灵作为玩家(player),黄色矩形作为墙壁(wall)。
创建一个名为PlayerMoving
的脚本,并将其挂载到player对象上。脚本中需要定义以下变量:
playerPosition
:玩家的位置playerSpeed
:玩家移动速度playerVector
:玩家移动方向
public Transform playerPosition;
public float playerSpeed;
public Vector3 playerVector;
// 给变量赋值
void Start()
{
playerSpeed = 5.0f;
playerVector = new Vector3(0, 0, 0);
}
将场景中的player对象拖到PlayerMoving脚本中。
方法1:直接按键控制
第一种方法是通过检测WASD或箭头键的输入来控制玩家移动。
private Vector3 ManagerPlayMove1()
{
Vector3 temp = new Vector3(0, 0, 0);
if (Input.GetKey(KeyCode.W) || Input.GetKey(KeyCode.UpArrow))
{
temp.y += 1; // 向上移动
}
if (Input.GetKey(KeyCode.D) || Input.GetKey(KeyCode.RightArrow))
{
temp.x += 1; // 向右移动
}
if (Input.GetKey(KeyCode.S) || Input.GetKey(KeyCode.DownArrow))
{
temp.y -= 1; // 向下移动
}
if (Input.GetKey(KeyCode.A) || Input.GetKey(KeyCode.LeftArrow))
{
temp.x -= 1; // 向左移动
}
return temp.normalized; // 归一化向量temp,使移动效果更顺滑
}
void Update()
{
playerVector = ManagerPlayMove1();
playerPosition.position += playerVector * playerSpeed * Time.deltaTime;
}
方法2:使用Input Manager
第二种方法使用Unity的Input Manager,可以简化代码,不需要单独处理每个按键。
private Vector3 ManagerPlayMove2()
{
float moveX = Input.GetAxis("Horizontal"); // 水平方向移动
float moveY = Input.GetAxis("Vertical"); // 竖直方向移动
return new Vector3(moveX, moveY, 0).normalized;
}
void Update()
{
playerVector = ManagerPlayMove2();
playerPosition.position += playerVector * playerSpeed * Time.deltaTime;
}
方法3:使用GetAxisRaw
第三种方法使用GetAxisRaw
函数,可以实现按键松开后立即停止移动的效果。
private Vector3 ManagerPlayMove3()
{
float moveX = Input.GetAxisRaw("Horizontal");
float moveY = Input.GetAxisRaw("Vertical");
return new Vector3(moveX, moveY, 0).normalized;
}
void Update()
{
playerVector = ManagerPlayMove3();
playerPosition.position += playerVector * playerSpeed * Time.deltaTime;
}
总结
Input.GetAxis()
返回值范围是[-1, 1],具有平滑过渡功能Input.GetAxisRaw()
返回值是{-1,0,1},没有平滑过渡
可以根据具体需求选择不同的方法。此外,Unity的Input System功能更强大,可以进一步探索学习。
热门推荐
嘴巴张不开且一侧疼痛?可能是这些原因导致
20年是什么婚?金婚银婚是多少年?结婚周年纪念日一览表
残疾人证等级划分标准及权益保障深度解读
夏季用水降温全攻略:三种实用方法及注意事项
明日霜降,建议中老年:少吃鸡肉羊肉,多吃4样,为入冬打好基础
霜降节气文化习俗:古今智慧交融
如何防止新冠肺炎传播?两大预防措施请收好
保温杯有必要买贵的吗?保温杯价格多少比较合适?
房产契税的缴纳时间及其流程是什么?
高考命题时间揭秘:从3月到5月,命题人如何打造一份高考试卷?
Nature:“金刚钻”成超导特性试金石
被异物扎伤怎么办?专业急救指南来了
TGA 2024游戏奖项提名公布,微博首次开启投票通道!
假新闻泛滥,我们能否借助科技找到真相?
油气安全,尤其重要!
一眼逾千年,此处最庐州
【西班牙游学—城市篇】马拉加,安达鲁西亚区的慢活港口城市!
坦桑尼亚:非洲大地上的璀璨明珠
软弹枪是否属于违法的?
橘子洲景区游玩攻略:门票、开放时间、交通指南全解析
鲸鱼:“鱼”名远扬,却非鱼类
普通人如何参与Web3交易
高血压患者可以吃海带吗?海带对高血压的益处与食用注意事项
新能源汽车过了质保期,换电池还是买新车?经销商建议:参加以旧换新
5G网络:开启未来通信新时代
食物相克?你真的误解它们了......
CRR为75%!膀胱癌溶瘤病毒疗法III期试验取得积极结果
人工智能的伦理以及它们如何影响您
未来的第六代战斗机有何过人之处
制药技术应用专业学习内容详解