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功能更强大,可以进一步探索学习。
热门推荐
白佛山石窟造像:十六王子像的唯一专窟
认识焦虑症:远离焦虑困扰 享受活力人生
网飞版《百年孤独》已上线:能否再现魔幻现实主义经典?
山西陵川:聚焦健康乡村建设 助力乡村振兴发展
移动支付安全新趋势:AES加密技术大显身手
生态云南 | 它们,个个都有“超能力”……
刺猬的冬眠现象解析
探索心理学产品在老年人心理健康中的应用策略与实践
《嫁给我阿依莫》:一首歌里的彝族婚俗文化
深圳到珠海两日游:打卡情侣路和海洋王国!
AES加密:移动支付安全的守护者
数字人民币如何利用AES保障支付安全?
AES算法:移动支付安全的守护者
奥利司他胶囊对身体有伤害吗
奥利司他减肥安全吗
河北6条最美自驾游路线 河北自驾游去哪里玩好 河北自驾游景点推荐
探访大凉山:阿朵故烈与彝族原生态音乐的传承之路
山鹰展翅:四川彝族民歌的现代演绎之路
四川彝族民歌:从古至今的旋律传承
秋冬为啥皲裂跟脚过不去
健康义乌丨一到冬天手脚就开裂,一文教你如何应对!
糖尿病脚怎么保养?这些细节要注意
兔兔小魔女来袭!揭秘《和平精英》新皮肤的心理影响
《和平精英》“鎏金绘卷”新皮肤火爆揭秘!
AES加密:金融交易的安全守护神
布达拉宫:阿嘎土的秘密
布达拉宫教你识别高质量阿嘎建材
探秘西藏古建中的“阿嘎”传奇
高利贷之害:婺源县法院审理民间借贷案件启示录
民法典教你如何避开高利贷陷阱