Unity中玩家通过点击行走 或 滑动屏幕行走的实现

来源:互联网 发布:优酷视频解析 知乎 编辑:程序博客网 时间:2024/05/01 11:20

前几天在QQ群,有人问了怎么实现人物的行走控制,正好之前做过一个游戏的小DEMO,控制一个玩家接受任务,然后去副本打怪,就有实现这功能。

分享一下相关代码吧,呵呵,自己参照Unity的demo写的不涉及其他...

private void TouchControl() {        if (state != STATE_DIALOG && state != STATE_DIE) {  //如果角色不在对话状态/死亡状态,才能移动            int touchCount = 0;            if (touchCount < Input.touchCount) {                Vector2 touchPosition = Input.GetTouch(touchCount).position;                touchPosition.y = 480 - touchPosition.y;                //如果是单击或者是滑动                if (Input.GetMouseButtonDown(0) || Input.GetTouch(touchCount).phase == TouchPhase.Moved ) {                    Ray ray = mainCam.ScreenPointToRay(Input.mousePosition);                    Debug.DrawRay(ray.origin, ray.direction * 10, Color.yellow);  // 不放心的话,画出这条射线看看                    RaycastHit hit;  //用来从一个raycast后获取信息。                    if (Physics.Raycast(ray, out hit)) {   //如果射线发生碰撞返回true                        float touchDist = (transform.position - hit.point).magnitude; //返回向量的长度                        if (touchDist > 0.1) {                            targetLocation = hit.point;                            state = STATE_MOVING;                            targetCircle.transform.position = hit.point;                        }                    }                }            }        }// 以上代码,主要是获取一个目标点,有了目标点,我们就要让玩家行走移动了。        else if (state == STATE_MOVING) {            Vector3 movement = Vector3.zero;            movement = targetLocation - transform.position;            movement.y = 0;            float dist = movement.magnitude;            if (dist < 0.1) {                state = STATE_STAND;            }            else {                movement = movement.normalized * speed;            }            movement += velocity;            movement += Physics.gravity;            movement *= Time.deltaTime;            character.Move(movement);            FaceMovementDirection();        }    //控制角色朝向移动方向    private void  FaceMovementDirection (){    Vector3 horizontalVelocity = character.velocity;   horizontalVelocity.y = 0; //忽略垂直移动   if ( horizontalVelocity.magnitude > 0.1f )            player.forward = horizontalVelocity.normalized;  //控制玩家朝向    }

粗略的贴了点代码,琢磨一下,实现起来应该不难~~

也当是记一下笔记,以后备用。