首页 > 其他分享 >Unity3D___微信小游戏常用API总结

Unity3D___微信小游戏常用API总结

时间:2023-07-28 19:45:34浏览次数:59  
标签:Unity3D Log 微信 void fail API Debug public WX

获取用户信息

游戏初始化


WX.InitSDK((code) =>
{
            // 打印屏幕信息
            var systemInfo = WX.GetSystemInfoSync();
            Debug.Log($"{systemInfo.screenWidth}:{systemInfo.screenHeight}, {systemInfo.windowWidth}:{systemInfo.windowHeight}, {systemInfo.pixelRatio}");

            // 创建用户信息获取按钮,在底部区域创建一个300高度的透明区域
            // 首次获取会弹出用户授权窗口, 可通过右上角-设置-权限管理用户的授权记录
            var canvasWith = (int)(systemInfo.screenWidth * systemInfo.pixelRatio);
            var canvasHeight = (int)(systemInfo.screenHeight * systemInfo.pixelRatio);
            var buttonHeight = (int)(canvasWith / 1080f * 300f);
            infoButton = WX.CreateUserInfoButton(0, canvasHeight - buttonHeight, canvasWith, buttonHeight, "zh_CN", false);
            infoButton.OnTap((userInfoButonRet) =>
            {
                Debug.Log(JsonUtility.ToJson(userInfoButonRet.userInfo));
                txtUserInfo.text = $"nickName:{userInfoButonRet.userInfo.nickName}, avartar:{userInfoButonRet.userInfo.avatarUrl}";
                //userInfoButonRet.userInfo.nickName   获取用户昵称
                //userInfoButonRet.userInfo.avatarUrl  获取用户图片
            });
            Debug.Log("infoButton Created");

});

游戏分享

    public void OnShareClick()
    {
        WX.ShareAppMessage(new ShareAppMessageOption()
        {
            title = "分享标题xxx",
            imageUrl = "https://inews.gtimg.com/newsapp_bt/0/12171811596_909/0",
        });
    }

利用PlayerPref数据持久化

和在Unity中使用方法差不多

 // 注意!!! PlayerPrefs为同步接口,iOS高性能模式下为"跨进程"同步调用,会阻塞游戏线程,请避免频繁调用
        PlayerPrefs.SetString("mystringkey", "myestringvalue");
        PlayerPrefs.SetInt("myintkey", 123);
        PlayerPrefs.SetFloat("myfloatkey", 1.23f);

        Debug.Log($"PlayerPrefs mystringkey:{PlayerPrefs.GetString("mystringkey")}");
        Debug.Log($"PlayerPrefs myintkey:{PlayerPrefs.GetInt("myintkey")}");
        Debug.Log($"PlayerPrefs myfloatkey:{PlayerPrefs.GetFloat("myfloatkey")}");

文本输入框调用手机键盘输入

将脚本挂载在InputField上即可。


public class Inputs : MonoBehaviour, IPointerClickHandler, IPointerExitHandler
{
    public InputField input;
    public Text text;
    private bool isShowKeyboad = false;
    public void OnPointerClick(PointerEventData eventData)
    {
        ShowKeyboad();
    }

    public void OnPointerExit(PointerEventData eventData)
    {
        // 隐藏输入法
        if (!input.isFocused)
        {
            HideKeyboad();
        }
    }


    public void OnInput(OnKeyboardInputListenerResult v)
    {
        Debug.Log("onInput");
        Debug.Log(v.value);
        text.text = v.value;
        if (input.isFocused)
        {
            input.text = v.value;
        }

    }

    public void OnConfirm(OnKeyboardInputListenerResult v)
    {
        // 输入法confirm回调
        Debug.Log("onConfirm");
        Debug.Log(v.value);
        HideKeyboad();
    }

    public void OnComplete(OnKeyboardInputListenerResult v)
    {
        // 输入法complete回调
        Debug.Log("OnComplete");
        Debug.Log(v.value);
        HideKeyboad();
    }

    private void ShowKeyboad()
    {
        if (!isShowKeyboad)
        {
            WX.ShowKeyboard(new ShowKeyboardOption()
            {
                defaultValue = "",
                maxLength = 20,
                confirmType = "go"
            });

            //绑定回调
            WX.OnKeyboardConfirm(OnConfirm);
            WX.OnKeyboardComplete(OnComplete);
            WX.OnKeyboardInput(OnInput);
            isShowKeyboad = true;
        }
    }

    private void HideKeyboad()
    {
        if (isShowKeyboad)
        {
            WX.HideKeyboard(new HideKeyboardOption());
            //删除掉相关事件监听
            WX.OffKeyboardInput(OnInput);
            WX.OffKeyboardConfirm(OnConfirm);
            WX.OffKeyboardComplete(OnComplete);
            isShowKeyboad = false;
        }
    }
}

音效控制

和在Unity中使用方法差不多


public class AudioManager : MonoBehaviour
{
    public AudioSource AudioSource;
    public AudioClip AudioClipLong;
    public AudioClip AudioClipShort;
    public Slider VolumeSlider;

    private void Start()
    {
        VolumeSlider.value = AudioSource.volume;
        VolumeSlider.onValueChanged.AddListener((_) =>
        {
            OnVolumeChanged(_);
        });
    }
    void OnVolumeChanged(float volume)
    {
        AudioSource.volume = volume;
    }
    
    /// <summary>
    ///   循环播放
    /// </summary>

    public void PlayLong()
    {
        AudioSource.clip = AudioClipLong;
        AudioSource.loop = true;
        AudioSource.Play();
    }
    /// <summary>
    ///   播放一次
    /// </summary>

    public void PlayShort()
    {
        AudioSource.clip = AudioClipShort;
        AudioSource.loop = false;
        AudioSource.Play();
    }

    /// <summary>
    /// 暂停播放
    /// </summary>
    public void Pause()
    {
        AudioSource.Pause();
    }
    /// <summary>
    /// 恢复播放
    /// </summary>
    public void Resume()
    {
        AudioSource.UnPause();
    }

    /// <summary>
    /// 关闭声音
    /// </summary>
    public void Stop()
    {
        AudioSource.Stop();
    }
}

获取微信字体


// fallbackFont作为旧版本微信或者无法获得系统字体文件时的备选CDN URL
var fallbackFont = Application.streamingAssetsPath + "/Fz.ttf";
 WX.GetWXFont(fallbackFont, (font) =>
            {
                if (font != null)
                {
                    txtTestWXFont.font = font;
                }
            });

微信文件系统存储

    public void OnFileSystemManagerClick()
    {
        // 扫描文件系统目录
        fs.Stat(new WXStatOption
        {
            path = env.USER_DATA_PATH + "/__GAME_FILE_CACHE",
            recursive = true,
            success = (succ) =>
            {
                Debug.Log($"stat success");
                foreach (var file in succ.stats)
                {
                    Debug.Log($"stat info. {file.path}, " +
                        $"{file.stats.size}," +
                        $"{file.stats.mode}," +
                        $"{file.stats.lastAccessedTime}," +
                        $"{file.stats.lastModifiedTime}");
                }
            },
            fail = (fail) =>
            {
                Debug.Log($"stat fail {fail.errMsg}");
            }
        });

        // 同步接口创建目录(请勿在游戏过程中频繁调用同步接口)
        var errMsg = fs.MkdirSync(env.USER_DATA_PATH + "/mydir", true);

        // 异步写入文件
        fs.WriteFile(new WriteFileParam
        {
            filePath = env.USER_DATA_PATH + "/mydir/myfile.txt",
            encoding = "utf8",
            data = System.Text.Encoding.UTF8.GetBytes("Test FileSystemManager"),
            success = (succ) =>
            {
                Debug.Log($"WriteFile succ {succ.errMsg}");
                // 异步读取文件
                fs.ReadFile(new ReadFileParam
                {
                    filePath = env.USER_DATA_PATH + "/mydir/myfile.txt",
                    encoding = "utf8",
                    success = (succ) =>
                    {
                        Debug.Log($"ReadFile succ. stringData(utf8):{succ.stringData}");
                    },
                    fail = (fail) =>
                    {
                        Debug.Log($"ReadFile fail {fail.errMsg}");
                    }
                });

                // 异步以无编码(二进制)方式读取
                fs.ReadFile(new ReadFileParam
                {
                    filePath = env.USER_DATA_PATH + "/mydir/myfile.txt",
                    encoding = "",
                    success = (succ) =>
                    {
                        Debug.Log($"ReadFile succ. data(binary):{succ.binData.Length}, stringData(utf8):{System.Text.Encoding.UTF8.GetString(succ.binData)}");
                    },
                    fail = (fail) =>
                    {
                        Debug.Log($"ReadFile fail {fail.errMsg}");
                    }
                });

            },
            fail = (fail) =>
            {
                Debug.Log($"WriteFile fail {fail.errMsg}");
            },
            complete = null
        });
    }

标签:Unity3D,Log,微信,void,fail,API,Debug,public,WX
From: https://www.cnblogs.com/lxp-blog/p/17588519.html

相关文章

  • API调试工具用什么?试试Apipost
    前言Apipost是一款支持RESTfulAPI、SOAPAPI、GraphQLAPI等多种API类型,支持HTTPS、WebSocket、gRPC多种通信协议的API调试工具。除此之外,Apipost还提供了自动化测试、团队协作、等多种功能。这些丰富的功能简化了工作流程,提高了研发效率,这也让Apipost成为开发人员首选的API......
  • API调试工具用什么?试试Apipost
    前言 Apipost是一款支持RESTfulAPI、SOAPAPI、GraphQLAPI等多种API类型,支持HTTPS、WebSocket、gRPC多种通信协议的API调试工具。除此之外,Apipost还提供了自动化测试、团队协作、等多种功能。这些丰富的功能简化了工作流程,提高了研发效率,这也让Apipost成为开发人员首选的A......
  • 微信小程序中业务域名的配置
     需要配置业务域名,需要先将域名http转https 1,首先在该微信小程序的公众号平台中下载业务域名的证书2,将下载的证书放进nginx的根目录3,在nginx中(root为.txt的地址) ......
  • 微信小程序里使用iconfont
     一、单纯使用icon字体,不带原始样式1、下载fontClass版图标2、解压缩,将其中的.ttf字体格式文件进行转化注:微信小程序里本身不支持通过url引入外部文件的方式,所以要将引用的文件转成引用Base64码转化后:然后将这段转化后的@font-face替换到原先的iconfont.css文件中的@font......
  • API接口设计规范
    说明:在实际的业务中,难免会跟第三方系统进行数据的交互与传递,那么如何保证数据在传输过程中的安全呢(防窃取)?除了https的协议之外,能不能加上通用的一套算法以及规范来保证传输的安全性呢?下面我们就来讨论下常用的一些API设计的安全方法,可能不一定是最好的,有更牛逼的实现方式,但是这篇是......
  • 程序员 不得不知道的 API 接口常识
    说实话,我非常希望自己能早点看到本篇文章,大学那个时候懵懵懂懂,跟着网上的免费教程做了一个购物商城就屁颠屁颠往简历上写。至今我仍清晰地记得,那个电商教程是怎么定义接口的:管它是增加、修改、删除、带参查询,全是POST请求一把梭,比如下面这样:修改用户的收货地址POST/xxx-mall/c......
  • C# webapi 参数(AI)
    在C#WebAPI中,参数是用于接收和处理HTTP请求中传递的数据的方式。WebAPI支持不同类型的参数,包括路由参数、查询字符串参数、请求体参数和标头参数。以下是一些常用的WebAPI参数类型:路由参数(RouteParameters):路由参数从URL的路径中提取值。在WebAPI中,通常使用路由模板来定义路由......
  • [APIO2023] 序列
    [APIO2023]序列题意求一个序列的子区间中中位数出现的最多次数。题解考试的时候被薄纱了,感觉自己太弱了/kk首先题目求的是中位数,这种东西有一个经典的操作,将原序列转为\(01\)序列。考虑枚举中位数\(x\),将小于\(x\)的数设为\(-1\),等于\(x\)的设为\(0\),将大于\(x\)......
  • 微信公众号模板消息源码实现,打破服务号群发推送次数限制
    公众号服务号每个月只能群发推送四次文章,我们可以使用模板消息为公众号粉丝推送信息下面是使用golang实现的模板消息发送类库封装,轻松实现模板消息发送wechat.gopackagelibimport("github.com/silenceper/wechat/v2""github.com/silenceper/wechat/v2/cache"......
  • Unity3D_拯救死循环
    当我们无意间写了死循环,此时只能调出任务管理器重新打开Unity工程一个偶然的机会我得知了一个不用结束任务,就可以挽救死循环的方法,整理如下总体思路:首先,创建一个Cube,让它沿Y轴旋转,通过它是否旋转来判断程序是否进入了死循环;其次,创建一个bool类型的变量,默认值为false,通过按......