예제 #1
0
    // Update is called once per frame
    void Update()
    {
        bool bIsMoving = false;

        foreach (var obj in MovingRoleInfo)
        {
            if (obj.Key.transform.position != obj.Value.targetPos && obj.Key.transform.position != obj.Value.originalPos)
            {
                bIsMoving = true;
                break;
            }
        }

        if (!bIsMoving && Input.GetMouseButtonDown(0))
        {                                                                               //首先判断是否点击了鼠标左键
            GameObject selectedObj = null;
            Ray        ray         = Camera.main.ScreenPointToRay(Input.mousePosition); //定义一条射线,这条射线从摄像机屏幕射向鼠标所在位置
            RaycastHit hit;                                                             //声明一个碰撞的点(暂且理解为碰撞的交点)
            if (Physics.Raycast(ray, out hit))                                          //如果真的发生了碰撞,ray这条射线在hit点与别的物体碰撞了
            {
                if (CanMoveRoles.Contains(hit.collider.gameObject))                     //如果碰撞的点所在的物体的名字是“StartButton”(collider就是检测碰撞所需的碰撞器)
                {
                    selectedObj = hit.collider.gameObject;
                }
            }

            if (selectedObj != null)
            {
                foreach (var role in MovingRoleInfo)
                {
                    if (role.Key != selectedObj && role.Value.targetPos == role.Key.gameObject.transform.position)
                    {
                        AnimationUtil.LookAt(role.Key, role.Value.originalPos);
                        AnimationUtil.SwitchAnimation(role.Key, "walk", MoveSpeed);
                        MoveUtil.MoveToPos(
                            role.Key,
                            role.Value.originalPos, MoveSpeed,
                            MoveUtil.MoveType.UniformStraight);
                    }
                }

                if (!MovingRoleInfo.ContainsKey(selectedObj) || selectedObj.transform.position == MovingRoleInfo [selectedObj].originalPos)
                {
                    RoleInfo info;
                    info.originalPos      = selectedObj.transform.position;
                    info.originalRotation = selectedObj.transform.rotation;

                    AnimationUtil.LookAt(selectedObj, TargetObject);
                    AnimationUtil.SwitchAnimation(selectedObj, "walk", MoveSpeed);
                    MoveUtil.MoveToObj(
                        selectedObj,
                        TargetObject, MoveSpeed,
                        MoveUtil.MoveType.UniformStraight);
                    info.targetPos = TargetObject.transform.position;
                    if (MovingRoleInfo.ContainsKey(selectedObj))
                    {
                        MovingRoleInfo [selectedObj] = info;
                    }
                    else
                    {
                        MovingRoleInfo.Add(selectedObj, info);
                    }

                    CreatePlayerUtil.Role = selectedObj;
                    foreach (var ro in CreatePlayerUtil.RoleModels)
                    {
                        if (ro.Value == selectedObj)
                        {
                            CreatePlayerUtil.type = ro.Key;
                            break;
                        }
                    }
                }
            }
        }

        foreach (var obj in MovingRoleInfo)
        {
            if (obj.Key.transform.position == obj.Value.targetPos)
            {
                AnimationUtil.SwitchAnimation(obj.Key, "idle", -1.0f);
                AnimationUtil.LookAt(obj.Key, Camera.main.gameObject);
            }
            else if (obj.Key.transform.position == obj.Value.originalPos)
            {
                AnimationUtil.SwitchAnimation(obj.Key, "idle", -1.0f);
                obj.Key.transform.rotation = obj.Value.originalRotation;
            }
        }
    }