Unity中鼠标点击地面控制人物移动
2014-01-08 21:15
1011 查看
代码实现了鼠标点击控制人物移动的功能,人物会朝向鼠标点击的目标点走去,双击鼠标为跑动。以后还会再添加鼠标点击时的提示效果。
/// <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); } }
相关文章推荐
- KING_UNITY学习之鼠标点击地面控制人物移动
- Unity中鼠标点击地面控制人物移动
- Unity3D游戏场景之鼠标点击地面控制人物移动
- Unity实现点击地面控制人物移动
- 【Unity 3D学习】鼠标点击控制人物移动到目标位置
- Unity鼠标控制物体360°旋转和点击移动
- [unity3d]鼠标点击地面人物自动走动(也包含按键wasd&space控制)
- Unity 通过点击屏幕控制人物移动。
- [unity3d]鼠标点击地面人物自动走动(也包含按键wasd&space控制)
- [unity3d]鼠标点击地面人物自动走动(也包含按键wasd&space控制)
- Unity控制鼠标移动及点击
- 鼠标点击地面人物自动走动(也包含按键wasd&space控制)
- 鼠标点击地面人物自动走动(也包含按键wasd&space控制) .
- unity3d]鼠标点击地面人物自动走动(也包含按键wasd&space控制)
- Unity 通过点击屏幕控制人物移动
- Unity学习2 鼠标点击控制物体移动
- unity3d实现一个人物跟随鼠标点击地面那点就移动那点,实现点击特效加人物动画方向的切换。
- Unity 鼠标点击左右移动,人物跟随旋转
- [unity3d]鼠标点击地面人物自动走动(也包含按键wasd&space控制)
- unity3d 鼠标点击 控制人物行走