Unity中鼠标点击地面控制人物移动
来源:互联网 发布:python手机版 编辑:程序博客网 时间:2024/04/28 15:49
- /// <summary>
- /// 摄像机对象
- /// </summary>
- public Camera _camPlayer;
- /// <summary>
- /// 玩家的变换组件
- /// </summary>
- public Transform _transPlayer;
- /// <summary>
- /// 鼠标发出的射线
- /// </summary>
- private Ray _rayMouseMove;
- /// <summary>
- /// 射线起点与平面交点的距离
- /// </summary>
- private float _fDistMouseMove;
- /// <summary>
- /// 玩家所在的平面
- /// </summary>
- private Plane _planePlayer;
- /// <summary>
- /// 鼠标点击的三维坐标点
- /// </summary>
- private Vector3 _vec3Target;
- /// <summary>
- /// 鼠标点击的时间间隔
- /// </summary>
- private float _fTime = 0f;
- /// <summary>
- /// 玩家的角色控制器组件
- /// </summary>
- private CharacterController _playerControl;
- /// <summary>
- /// 玩家的动画组件
- /// </summary>
- private Animation _aniPlayer;
- /// <summary>
- /// 玩家的状态
- /// </summary>
- private int _playerStatus = 0;
- private Vector3 _vec3;
- //玩家的状态
- private const int PLAYER_IDLE = 0;
- private const int PLAYER_WALK = 1;
- private const int PLAYER_RUN = 2;
- void Awake()
- {
- _playerControl = (CharacterController)GameObject.FindObjectOfType(typeof(CharacterController));
- _aniPlayer = GameObject.FindGameObjectWithTag("Player").GetComponent<Animation>();
- _planePlayer = new Plane(_transPlayer.up, _transPlayer.position);
- _vec3Target = _transPlayer.position;
- //初始设置玩家的状态
- SetPlayerStatus(PLAYER_IDLE);
- }
- void Update()
- {
- if (Input.GetMouseButtonDown(0)) {
- //发射检测射线
- _rayMouseMove = _camPlayer.ScreenPointToRay(Input.mousePosition);
- //利用玩家平面,返回射线起点与平面交点的距离
- _planePlayer.Raycast(_rayMouseMove, out _fDistMouseMove);
- //根据距离获得鼠标点击的目标点三维坐标
- _vec3Target = _rayMouseMove.GetPoint(_fDistMouseMove);
- //玩家朝向目标点
- _transPlayer.LookAt(new Vector3(_vec3Target.x, _transPlayer.position.y, _vec3Target.z));
- //如果鼠标点击的时间间隔小于0.2秒,设定跑的状态
- if (Time.realtimeSinceStartup - _fTime <= 0.2f) {
- SetPlayerStatus(PLAYER_RUN);
- } else {//反之,设定走的状态
- SetPlayerStatus(PLAYER_WALK);
- }
- //保存鼠标点击时间
- _fTime = Time.realtimeSinceStartup;
- }
- }
- void FixedUpdate()
- {
- switch (_playerStatus) {
- case PLAYER_IDLE:
- //不移动
- break;
- case PLAYER_WALK:
- PlayerMove(0.05f);
- break;
- case PLAYER_RUN:
- PlayerMove(0.1f);
- break;
- default:
- break;
- }
- }
- /// <summary>
- /// 设置玩家状态的方法
- /// </summary>
- /// <param name="status">状态编号</param>
- void SetPlayerStatus(int status)
- {
- switch (status) {
- case PLAYER_IDLE:
- _aniPlayer.Play("idle");
- break;
- case PLAYER_WALK:
- _aniPlayer.Play("walk");
- break;
- case PLAYER_RUN:
- _aniPlayer.Play("run");
- break;
- default:
- break;
- }
- _playerStatus = status;
- }
- /// <summary>
- /// 玩家移动的方法
- /// </summary>
- /// <param name="speed">移动速度</param>
- void PlayerMove(float speed)
- {
- if (Mathf.Abs(Vector3.Distance(_transPlayer.position, _vec3Target)) >= 0.1f) {
- _vec3 = Vector3.ClampMagnitude(_vec3Target - _transPlayer.position, speed);
- _playerControl.Move(_vec3);
- } else {
- SetPlayerStatus(PLAYER_IDLE);
- }
- }
0 0
- Unity鼠标点击地面控制人物移动
- Unity中鼠标点击地面控制人物移动
- Unity中鼠标点击地面控制人物移动
- Unity实现点击地面控制人物移动
- KING_UNITY学习之鼠标点击地面控制人物移动
- Unity3D游戏场景之鼠标点击地面控制人物移动
- 实现鼠标点击地面实现人物在地面移动(c#)
- Unity 通过点击屏幕控制人物移动。
- Unity 通过点击屏幕控制人物移动
- unity学习笔记【点击地面人物走动】
- 【Unity 3D学习】鼠标点击控制人物移动到目标位置
- [unity3d]鼠标点击地面人物自动走动(也包含按键wasd&space控制)
- [unity3d]鼠标点击地面人物自动走动(也包含按键wasd&space控制)
- 鼠标点击地面人物自动走动(也包含按键wasd&space控制)
- [unity3d]鼠标点击地面人物自动走动(也包含按键wasd&space控制)
- 鼠标点击地面人物自动走动(也包含按键wasd&space控制) .
- unity3d]鼠标点击地面人物自动走动(也包含按键wasd&space控制)
- unity键盘控制人物移动
- php数组转换成xml
- 转:iPhone开发中,如何真机调试? (暂时不清楚机器是否已越狱)
- 剑指XX游戏(六) - 轻松搞定面试中的红黑树问题
- 《Android传感器高级编程》
- 信号实现父子进程同步
- Unity中鼠标点击地面控制人物移动
- HDU1269 强联通
- 编程语言中的运算符
- 穷举攻击的末路
- 学习Objc的网站,持续更新
- 云管理平台CloudStack介绍
- glMatrixMode()函数的参数中GL_PROJECTION和GL_MODELVIEW的作用
- JQ初接触,列出来分享给大家,高手勿喷!
- 2014重头戏:移动客户端之争