当前位置:   article > 正文

Unity3D中实现控制人物移动_unity3d控制人物移动

unity3d控制人物移动

大家好,我是佛系工程师☆恬静的小魔龙☆,不定时更新Unity开发技巧,觉得有用记得一键三连哦。

一、前言

网上关于角色移动的文章太多太多了,就我自己整理的时候都发现写了好多篇(因为有不同的方案),今天就将目前已知的移动角色的方案总结出来,毕竟是一个资源整合的时代,谁也不想找个角色移动的脚本都要找好几篇文章对吧

目前可以划分为三个方面

  • 角色移动到鼠标点击的位置
  • 键盘控制角色移动(其他的比如游戏手柄也算键盘、HTC手柄 也算键盘)
  • 手机端转盘控制角色移动

其他的比如摄像机跟随移动这个可以作为拓展

二、角色移动到鼠标点击的位置

代码:

  1. using UnityEngine;
  2. public class Test : MonoBehaviour
  3. {
  4. public GameObject Player;
  5. Vector3 tempPoint = new Vector3(0, 0, 0);
  6. void Update()
  7. {
  8. PlayerMove_FollowMouse();
  9. }
  10. //角色移动到鼠标点击的位置
  11. public void PlayerMove_FollowMouse()
  12. {
  13. //右键点击
  14. if (Input.GetMouseButtonDown(1))
  15. {
  16. Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition);
  17. RaycastHit hitInfo;
  18. if (Physics.Raycast(ray,out hitInfo))
  19. {
  20. tempPoint = hitInfo.point;
  21. }
  22. }
  23. float step = 10 * Time.deltaTime;
  24. Player.transform.localPosition = Vector3.MoveTowards(Player.transform.localPosition, tempPoint, step);
  25. Player.transform.LookAt(tempPoint);
  26. }
  27. }
  28. 复制代码

效果图:

三、键盘控制角色移动(其他的比如游戏手柄也算键盘、HTC手柄 也算键盘)

键盘移动也有好几种方案,这些都会写到

3-1、键盘通过Transform组件 控制角色移动

代码:

  1. using UnityEngine;
  2. public class Test : MonoBehaviour
  3. {
  4. public GameObject Player;
  5. public float m_speed = 5f;
  6. void Update()
  7. {
  8. //键盘控制移动
  9. PlayerMove_KeyTransform();
  10. }
  11. //通过Transform组件 键盘控制移动
  12. public void PlayerMove_KeyTransform()
  13. {
  14. if (Input.GetKey(KeyCode.W) | Input.GetKey(KeyCode.UpArrow)) //
  15. {
  16. Player.transform.Translate(Vector3.forward * m_speed * Time.deltaTime);
  17. }
  18. if (Input.GetKey(KeyCode.S) | Input.GetKey(KeyCode.DownArrow)) //
  19. {
  20. Player.transform.Translate(Vector3.forward * -m_speed * Time.deltaTime);
  21. }
  22. if (Input.GetKey(KeyCode.A) | Input.GetKey(KeyCode.LeftArrow)) //
  23. {
  24. Player.transform.Translate(Vector3.right * -m_speed * Time.deltaTime);
  25. }
  26. if (Input.GetKey(KeyCode.D) | Input.GetKey(KeyCode.RightArrow)) //
  27. {
  28. Player.transform.Translate(Vector3.right * m_speed * Time.deltaTime);
  29. }
  30. }
  31. }
  32. 复制代码

效果图:

另一种写法,效果一致:

代码:

  1. using UnityEngine;
  2. public class Test : MonoBehaviour
  3. {
  4. public GameObject Player;
  5. public float m_speed = 5f;
  6. void Update()
  7. {
  8. //键盘控制移动
  9. PlayerMove_KeyTransform2();
  10. }
  11. //通过Transform组件 键盘控制移动 另一种写法
  12. public void PlayerMove_KeyTransform2()
  13. {
  14. float horizontal = Input.GetAxis("Horizontal"); //A D 左右
  15. float vertical = Input.GetAxis("Vertical"); //W S 上 下
  16. Player.transform.Translate(Vector3.forward * vertical * m_speed * Time.deltaTime);//W S 上 下
  17. Player.transform.Translate(Vector3.right * horizontal * m_speed * Time.deltaTime);//A D 左右
  18. }
  19. }
  20. 复制代码

效果图:

3-2、键盘通过Rigidbody组件 控制角色移动

通过Rigidbody组件 键盘控制移动 Velocity移动 角色身上需要挂载Rigidbody组件

代码:

  1. using UnityEngine;
  2. public class Test : MonoBehaviour
  3. {
  4. public GameObject Player;
  5. void Update()
  6. {
  7. PlayerMove_KeyRighidbody();
  8. }
  9. //通过Rigidbody组件 键盘控制移动 Velocity移动 角色身上需要挂载Rigidbody组件
  10. public void PlayerMove_KeyRighidbody()
  11. {
  12. float horizontal = Input.GetAxis("Horizontal"); //A D 左右
  13. float vertical = Input.GetAxis("Vertical"); //W S 上 下
  14. //这个必须分开判断 因为一个物体的速度只有一个
  15. if (Input.GetKey(KeyCode.W) | Input.GetKey(KeyCode.S))
  16. {
  17. Player.GetComponent<Rigidbody>().velocity = Vector3.forward * vertical * m_speed;
  18. }
  19. if (Input.GetKey(KeyCode.A) | Input.GetKey(KeyCode.D))
  20. {
  21. Player.GetComponent<Rigidbody>().velocity = Vector3.right * horizontal * m_speed;
  22. }
  23. }
  24. }
  25. 复制代码

通过Rigidbody组件 键盘控制移动 AddForce控制移动 角色身上需要挂载Rigidbody组件

代码:

  1. using UnityEngine;
  2. public class Test : MonoBehaviour
  3. {
  4. public GameObject Player;
  5. void Update()
  6. {
  7. PlayerMove_KeyRighidbody2();
  8. }
  9. //通过Rigidbody组件 键盘控制移动 AddForce控制移动 角色身上需要挂载Rigidbody组件
  10. public void PlayerMove_KeyRighidbody2()
  11. {
  12. float horizontal = Input.GetAxis("Horizontal"); //A D 左右
  13. float vertical = Input.GetAxis("Vertical"); //W S 上 下
  14. Player.GetComponent<Rigidbody>().AddForce(Vector3.forward * vertical * m_speed);
  15. Player.GetComponent<Rigidbody>().AddForce(Vector3.right * horizontal * m_speed);
  16. }
  17. }
  18. 复制代码

效果图:

3-3、键盘通过CharacterController组件 控制角色移动

通过CharacterController组件 键盘移动物体 SimpleMove控制移动

代码:

  1. using UnityEngine;
  2. public class Test : MonoBehaviour
  3. {
  4. public GameObject Player;
  5. void Update()
  6. {
  7. PlayerMove_KeyCharacterController();
  8. }
  9. //通过CharacterController组件 键盘移动物体 SimpleMove控制移动
  10. public void PlayerMove_KeyCharacterController()
  11. {
  12. float horizontal = Input.GetAxis("Horizontal"); //A D 左右
  13. float vertical = Input.GetAxis("Vertical"); //W S 上 下
  14. Player.GetComponent<CharacterController>().SimpleMove(transform.forward * vertical * m_speed);
  15. }
  16. }
  17. 复制代码

通过CharacterController组件 键盘移动物体 Move控制移动

代码:

  1. using UnityEngine;
  2. public class Test : MonoBehaviour
  3. {
  4. public GameObject Player;
  5. void Update()
  6. {
  7. PlayerMove_KeyCharacterController2();
  8. }
  9. //通过CharacterController组件 键盘移动物体 Move控制移动
  10. public void PlayerMove_KeyCharacterController2()
  11. {
  12. float horizontal = Input.GetAxis("Horizontal"); //A D 左右
  13. float vertical = Input.GetAxis("Vertical"); //W S 上 下
  14. float moveY = 0;
  15. float m_gravity = 10f;
  16. moveY -= m_gravity * Time.deltaTime;//重力
  17. Player.GetComponent<CharacterController>().Move(new Vector3(horizontal, moveY, vertical) * m_speed * Time.deltaTime);
  18. }
  19. }
  20. 复制代码

四、手机端转盘控制角色移动

这个可以使用EasyTouch插件,这个插件的使用以后再单独编写吧


作者:hi恬静的小魔龙
链接:https://juejin.cn/post/7036153097160228894
来源:稀土掘金
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/IT小白/article/detail/118705
推荐阅读
相关标签
  

闽ICP备14008679号