【Unity3D日常开发】Unity3D中控制人物移动
发布日期:2021-06-30 11:40:06
浏览次数:3
分类:技术文章
本文共 5498 字,大约阅读时间需要 18 分钟。
一、前言
网上关于角色移动的文章太多太多了,就我自己整理的时候都发现写了好多篇(因为有不同的方案),今天就将目前已知的移动角色的方案总结出来,毕竟是一个资源整合的时代,谁也不想找个角色移动的脚本都要找好几篇文章对吧
目前可以划分为三个方面
- 角色移动到鼠标点击的位置
- 键盘控制角色移动(其他的比如游戏手柄也算键盘、HTC手柄 也算键盘)
- 手机端转盘控制角色移动
其他的比如摄像机跟随移动这个可以作为拓展
二、角色移动到鼠标点击的位置
代码:
using UnityEngine;public class Test : MonoBehaviour{ public GameObject Player; Vector3 tempPoint = new Vector3(0, 0, 0); void Update() { PlayerMove_FollowMouse(); } //角色移动到鼠标点击的位置 public void PlayerMove_FollowMouse() { //右键点击 if (Input.GetMouseButtonDown(1)) { Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition); RaycastHit hitInfo; if (Physics.Raycast(ray,out hitInfo)) { tempPoint = hitInfo.point; } } float step = 10 * Time.deltaTime; Player.transform.localPosition = Vector3.MoveTowards(Player.transform.localPosition, tempPoint, step); Player.transform.LookAt(tempPoint); }}
效果图:
三、键盘控制角色移动(其他的比如游戏手柄也算键盘、HTC手柄 也算键盘)
键盘移动也有好几种方案,这些都会写到
3-1、键盘通过Transform组件 控制角色移动
代码:
using UnityEngine;public class Test : MonoBehaviour{ public GameObject Player; public float m_speed = 5f; void Update() { //键盘控制移动 PlayerMove_KeyTransform(); } //通过Transform组件 键盘控制移动 public void PlayerMove_KeyTransform() { if (Input.GetKey(KeyCode.W) | Input.GetKey(KeyCode.UpArrow)) //前 { Player.transform.Translate(Vector3.forward * m_speed * Time.deltaTime); } if (Input.GetKey(KeyCode.S) | Input.GetKey(KeyCode.DownArrow)) //后 { Player.transform.Translate(Vector3.forward * -m_speed * Time.deltaTime); } if (Input.GetKey(KeyCode.A) | Input.GetKey(KeyCode.LeftArrow)) //左 { Player.transform.Translate(Vector3.right * -m_speed * Time.deltaTime); } if (Input.GetKey(KeyCode.D) | Input.GetKey(KeyCode.RightArrow)) //右 { Player.transform.Translate(Vector3.right * m_speed * Time.deltaTime); } }}
效果图:
另一种写法,效果一致:
代码:
using UnityEngine;public class Test : MonoBehaviour{ public GameObject Player; public float m_speed = 5f; void Update() { //键盘控制移动 PlayerMove_KeyTransform2(); } //通过Transform组件 键盘控制移动 另一种写法 public void PlayerMove_KeyTransform2() { float horizontal = Input.GetAxis("Horizontal"); //A D 左右 float vertical = Input.GetAxis("Vertical"); //W S 上 下 Player.transform.Translate(Vector3.forward * vertical * m_speed * Time.deltaTime);//W S 上 下 Player.transform.Translate(Vector3.right * horizontal * m_speed * Time.deltaTime);//A D 左右 }}
效果图:
3-2、键盘通过Rigidbody组件 控制角色移动
通过Rigidbody组件 键盘控制移动 Velocity移动 角色身上需要挂载Rigidbody组件
代码:
using UnityEngine;public class Test : MonoBehaviour{ public GameObject Player; void Update() { PlayerMove_KeyRighidbody(); } //通过Rigidbody组件 键盘控制移动 Velocity移动 角色身上需要挂载Rigidbody组件 public void PlayerMove_KeyRighidbody() { float horizontal = Input.GetAxis("Horizontal"); //A D 左右 float vertical = Input.GetAxis("Vertical"); //W S 上 下 //这个必须分开判断 因为一个物体的速度只有一个 if (Input.GetKey(KeyCode.W) | Input.GetKey(KeyCode.S)) { Player.GetComponent().velocity = Vector3.forward * vertical * m_speed; } if (Input.GetKey(KeyCode.A) | Input.GetKey(KeyCode.D)) { Player.GetComponent ().velocity = Vector3.right * horizontal * m_speed; } }}
通过Rigidbody组件 键盘控制移动 AddForce控制移动 角色身上需要挂载Rigidbody组件
代码:
using UnityEngine;public class Test : MonoBehaviour{ public GameObject Player; void Update() { PlayerMove_KeyRighidbody2(); } //通过Rigidbody组件 键盘控制移动 AddForce控制移动 角色身上需要挂载Rigidbody组件 public void PlayerMove_KeyRighidbody2() { float horizontal = Input.GetAxis("Horizontal"); //A D 左右 float vertical = Input.GetAxis("Vertical"); //W S 上 下 Player.GetComponent().AddForce(Vector3.forward * vertical * m_speed); Player.GetComponent ().AddForce(Vector3.right * horizontal * m_speed); }}
效果图:
3-3、键盘通过CharacterController组件 控制角色移动
通过CharacterController组件 键盘移动物体 SimpleMove控制移动
代码:
using UnityEngine;public class Test : MonoBehaviour{ public GameObject Player; void Update() { PlayerMove_KeyCharacterController(); } //通过CharacterController组件 键盘移动物体 SimpleMove控制移动 public void PlayerMove_KeyCharacterController() { float horizontal = Input.GetAxis("Horizontal"); //A D 左右 float vertical = Input.GetAxis("Vertical"); //W S 上 下 Player.GetComponent().SimpleMove(transform.forward * vertical * m_speed); }}
通过CharacterController组件 键盘移动物体 Move控制移动
代码:
using UnityEngine;public class Test : MonoBehaviour{ public GameObject Player; void Update() { PlayerMove_KeyCharacterController2(); } //通过CharacterController组件 键盘移动物体 Move控制移动 public void PlayerMove_KeyCharacterController2() { float horizontal = Input.GetAxis("Horizontal"); //A D 左右 float vertical = Input.GetAxis("Vertical"); //W S 上 下 float moveY = 0; float m_gravity = 10f; moveY -= m_gravity * Time.deltaTime;//重力 Player.GetComponent().Move(new Vector3(horizontal, moveY, vertical) * m_speed * Time.deltaTime); }}
四、手机端转盘控制角色移动
这个可以使用EasyTouch插件,这个插件的使用以后再单独编写吧
转载地址:https://itmonon.blog.csdn.net/article/details/109670319 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!
发表评论
最新留言
做的很好,不错不错
[***.243.131.199]2024年04月15日 21时19分52秒
关于作者
喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
天秀!Pandas输出的表格竟然可以动起来?
2019-04-30
数据科普:期权的隐含波动率(投资必知必会)
2019-04-30
没有项目经验,可以拿这个练手
2019-04-30
数据分析师 如何工作中 提升 思维能力
2019-04-30
Matplotlib 绘图可视化时 正确显示中文的四种方式
2019-04-30
必须吐槽!我就想写个爬虫,怎么要学那么多东西?
2019-04-30
学 MySQL 必须了解的10个高级概念!
2019-04-30
作为程序员,你还在用B站学习?
2019-04-30
吐槽一下!Pandas用了这么久,有觉得哪里不好的地方吗?
2019-04-30
学会这个数据可视化技巧,搞定NB炫酷的大屏设计!
2019-04-30
学习数据分析很难吗?
2019-04-30
滴滴与蚂蚁金服开源共建的 SQLFlow 到底是什么?
2019-04-30
来了,又一个新的SQL刷题网站!
2019-04-30
基于java的来访咨询系统的设计与实现
2019-04-30
基于java的医院分诊系统的设计与实现
2019-04-30
基于java的疫情数据查看系统与实现
2019-04-30
基于java的音乐网站的设计与实现
2019-04-30
基于java的在线选房的设计与实现
2019-04-30
基于java的左面聊天室系统的设计与实现
2019-04-30
基于ssh的学生成绩管理系统的设计与实现
2019-04-30