关于游戏中参数导出调整的实现_PlayerPrefs方式实现

本文介绍了一种使用Unity和PlayerPrefs实现游戏参数导出与调整的方法,以便于测试和策划人员快速修改游戏中的物理属性和其他关键参数。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

关于游戏中参数导出调整的实现_PlayerPrefs方式实现<21/11/2017>(注意:InputField有坑!PlayerPrefs有默认读取!)

为了方便测试和策划调整手感,往往我们需要导出我们的参数,让他们进行调整可以节省我们一大部分开发的时间

(数据会保存在电脑或手机端本地),参数导出如下图:


一下代码,核心已经注释:<注意!>

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;

public class SettingManager : MonoBehaviour
{
    public GameObject ball;
    private Rigidbody2D rg;
    public InputField[] inputFields;
    public GameObject settingPanel;

    void Start()
    {
        rg = ball.GetComponent<Rigidbody2D>();
        rg.mass = PlayerPrefs.GetFloat("Mass", 1f);//GetFloat("Mass",1f)如果读取不到"Mass"值,会默认读取1f数值
        inputFields[0].text = rg.mass.ToString();//InputFields.text才是UGUI输入框的入口,此处每次更改后,输入框显示也得随PlayerPrefs数值进行更新
        rg.drag = PlayerPrefs.GetFloat("Linear Drag", 0f);
        inputFields[1].text = rg.drag.ToString();
        rg.angularDrag = PlayerPrefs.GetFloat("Angular Drag", 0.05f);
        inputFields[2].text = rg.angularDrag.ToString();
        rg.gravityScale = PlayerPrefs.GetFloat("Gravity Scale", 1f);
        inputFields[3].text = rg.gravityScale.ToString();
        BasketControl.rotateSpeed = PlayerPrefs.GetFloat("Rotate Angular Speed", 1000f);
        inputFields[4].text = BasketControl.rotateSpeed.ToString();
        BasketControl.ForcePowerRate = PlayerPrefs.GetFloat("Force Power Rate", 55f);
        inputFields[5].text = BasketControl.ForcePowerRate.ToString();
        DrawLine.parabola = PlayerPrefs.GetFloat("Parabola", 0.026f);
        inputFields[6].text = DrawLine.parabola.ToString();
    }
    
    public void ActiveSettingPanel()
    {
        settingPanel.SetActive(true);
        BasketControl.FixedAll = false;
    }

    public void FalseSettingPanel()
    {
        settingPanel.SetActive(false);
        BasketControl.FixedAll = true;
    }

    public void SettingDate()
    {
        PlayerPrefs.SetFloat("Mass", float.Parse(inputFields[0].text));
        PlayerPrefs.SetFloat("Linear Drag", float.Parse(inputFields[1].text));
        PlayerPrefs.SetFloat("Angular Drag", float.Parse(inputFields[2].text));
        PlayerPrefs.SetFloat("Gravity Scale", float.Parse(inputFields[3].text));
        PlayerPrefs.SetFloat("Rotate Angular Speed", float.Parse(inputFields[4].text));
        PlayerPrefs.SetFloat("Force Power Rate", float.Parse(inputFields[5].text));
        PlayerPrefs.SetFloat("Parabola", float.Parse(inputFields[6].text));

        rg.mass = PlayerPrefs.GetFloat("Mass", float.Parse(inputFields[0].text));
        rg.drag = PlayerPrefs.GetFloat("Linear Drag", float.Parse(inputFields[1].text));
        rg.angularDrag = PlayerPrefs.GetFloat("Angular Drag", float.Parse(inputFields[2].text));
        rg.gravityScale = PlayerPrefs.GetFloat("Gravity Scale", float.Parse(inputFields[3].text));
        BasketControl.rotateSpeed = PlayerPrefs.GetFloat("Rotate Angular Speed", float.Parse(inputFields[4].text));
        BasketControl.ForcePowerRate = PlayerPrefs.GetFloat("Force Power Rate", float.Parse(inputFields[5].text));
        DrawLine.parabola = PlayerPrefs.GetFloat("Parabola", float.Parse(inputFields[6].text));
    }
}
UI面板界面编排如此

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值