美文网首页
运行时控制模型位置并保存通用脚本

运行时控制模型位置并保存通用脚本

作者: ShawnWeasley | 来源:发表于2020-04-12 21:43 被阅读0次

拖到想运行时移动的模型上,运行后 按一下 “开关控制的按钮”比如默认是F1,你可以给不同的模型设置不同的启动按键,按一下就开启控制,再按一下就关闭控制。步长和按键设置需要在打包之前就设置好,修改完位置后 记得按一下用于保存的按钮。


WechatIMG4382.png
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEditor;

public class RunTimeMoveSave : MonoBehaviour
{
    [Header("保存名,需唯一,空则为本身")]
    public string m_SaveName = "";

    [Header("开关控制按钮")]
    public KeyCode m_OpenCloseControlKey = KeyCode.F1;

    [Header("要控制的物体,空则为本身")]
    public Transform m_ControlObj;

    [Header("控制移动的步长")]
    public float m_MoveStep = 0.01f;
    [Header("控制移动的按键")]
    public KeyCode m_Move_x_Up = KeyCode.UpArrow;
    public KeyCode m_Move_x_Down = KeyCode.DownArrow;
    public KeyCode m_Move_y_Up = KeyCode.LeftArrow;
    public KeyCode m_Move_y_Down = KeyCode.RightArrow;
    public KeyCode m_Move_z_Up = KeyCode.N;
    public KeyCode m_Move_z_Down = KeyCode.M;

    [Header("控制旋转的步长")]
    public float m_RotateStep = 1f;
    [Header("控制旋转的按键")]
    public KeyCode m_Rotate_x_Up = KeyCode.W;
    public KeyCode m_Rotate_x_Down = KeyCode.S;
    public KeyCode m_Rotate_y_Up = KeyCode.A;
    public KeyCode m_Rotate_y_Down = KeyCode.D;
    public KeyCode m_Rotate_z_Up = KeyCode.Q;
    public KeyCode m_Rotate_z_Down = KeyCode.E;


    [Header("控制缩放的步长")]
    public float m_ScaleStep = 0.01f;
    [Header("控制缩放的按键")]
    public KeyCode m_Scale_Up = KeyCode.O;
    public KeyCode m_Scale_Down = KeyCode.P;
    [Header("用于保存的按键")]
    public KeyCode m_SaveKey = KeyCode.L;
    [Header("用于清除的按键,清除后请退出程序重开,会加载默认角度位置")]
    public KeyCode m_ClearKey = KeyCode.C;
    // Use this for initialization
    void Start()
    {
        if (m_ControlObj == null)
            m_ControlObj = this.transform;
        if (m_SaveName == "")
            m_SaveName = this.name;
        Read();
    }

    void Read()
    {
        if (PlayerPrefs.GetInt("IsSet_" + m_SaveName) == 0)
        {
            //首次加载保存即可
            Save();
            return;
        }
        m_ControlObj.localPosition = new Vector3(PlayerPrefs.GetFloat("PosX_" + m_SaveName), PlayerPrefs.GetFloat("PosY_" + m_SaveName), PlayerPrefs.GetFloat("PosZ_" + m_SaveName));
        m_ControlObj.localEulerAngles = new Vector3(PlayerPrefs.GetFloat("RotX_" + m_SaveName), PlayerPrefs.GetFloat("RotY_" + m_SaveName), PlayerPrefs.GetFloat("RotZ_" + m_SaveName));
        m_ControlObj.localScale = new Vector3(PlayerPrefs.GetFloat("Scal_" + m_SaveName), PlayerPrefs.GetFloat("Scal_" + m_SaveName), PlayerPrefs.GetFloat("Scal_" + m_SaveName));
    }

    void Save()
    {
        PlayerPrefs.SetInt("IsSet_" + m_SaveName, 1);
        PlayerPrefs.SetFloat("PosX_" + m_SaveName, m_ControlObj.localPosition.x);
        PlayerPrefs.SetFloat("PosY_" + m_SaveName, m_ControlObj.localPosition.y);
        PlayerPrefs.SetFloat("PosZ_" + m_SaveName, m_ControlObj.localPosition.z);
        PlayerPrefs.SetFloat("RotX_" + m_SaveName, m_ControlObj.localEulerAngles.x);
        PlayerPrefs.SetFloat("RotY_" + m_SaveName, m_ControlObj.localEulerAngles.y);
        PlayerPrefs.SetFloat("RotZ_" + m_SaveName, m_ControlObj.localEulerAngles.z);
        PlayerPrefs.SetFloat("Scal_" + m_SaveName, m_ControlObj.localScale.y);

    }

    void Clear()
    {
        PlayerPrefs.SetInt("IsSet_" + m_SaveName, 0);
    }
    bool isSetting = false;
    // Update is called once per frame
    void Update()
    {
        if (Input.GetKeyDown(m_OpenCloseControlKey))
        {
            isSetting = !isSetting;
        }
        if (Input.GetKeyDown(m_SaveKey))
            Save();
        if (Input.GetKeyDown(m_ClearKey))
            Clear();
        if (!isSetting)
            return;

        if (Input.GetKeyDown(m_Move_x_Up))
        {
            m_ControlObj.localPosition += new Vector3(1, 0, 0) * m_MoveStep;
        }
        if (Input.GetKeyDown(m_Move_x_Down))
        {
            m_ControlObj.localPosition -= new Vector3(1, 0, 0) * m_MoveStep;
        }
        if (Input.GetKeyDown(m_Move_y_Up))
        {
            m_ControlObj.localPosition += new Vector3(0, 1, 0) * m_MoveStep;
        }
        if (Input.GetKeyDown(m_Move_y_Down))
        {
            m_ControlObj.localPosition -= new Vector3(0, 1, 0) * m_MoveStep;
        }
        if (Input.GetKeyDown(m_Move_z_Up))
        {
            m_ControlObj.localPosition += new Vector3(0, 0, 1) * m_MoveStep;
        }
        if (Input.GetKeyDown(m_Move_z_Down))
        {
            m_ControlObj.localPosition -= new Vector3(0, 0, 1) * m_MoveStep;
        }

        if (Input.GetKeyDown(m_Rotate_x_Up))
        {
            m_ControlObj.localEulerAngles += new Vector3(1, 0, 0) * m_RotateStep;
        }
        if (Input.GetKeyDown(m_Rotate_x_Down))
        {
            m_ControlObj.localEulerAngles -= new Vector3(1, 0, 0) * m_RotateStep;
        }
        if (Input.GetKeyDown(m_Rotate_y_Up))
        {
            m_ControlObj.localEulerAngles += new Vector3(0, 1, 0) * m_RotateStep;
        }
        if (Input.GetKeyDown(m_Rotate_y_Down))
        {
            m_ControlObj.localEulerAngles -= new Vector3(0, 1, 0) * m_RotateStep;
        }
        if (Input.GetKeyDown(m_Rotate_z_Up))
        {
            m_ControlObj.localEulerAngles += new Vector3(0, 0, 1) * m_RotateStep;
        }
        if (Input.GetKeyDown(m_Rotate_z_Down))
        {
            m_ControlObj.localEulerAngles -= new Vector3(0, 0, 1) * m_RotateStep;
        }

        if (Input.GetKeyDown(m_Scale_Up))
        {
            m_ControlObj.localScale += Vector3.one * m_ScaleStep;
        }
        if (Input.GetKeyDown(m_Scale_Down))
        {
            m_ControlObj.localScale -= Vector3.one * m_ScaleStep;
        }
    }
}

相关文章

网友评论

      本文标题:运行时控制模型位置并保存通用脚本

      本文链接:https://www.haomeiwen.com/subject/sclimhtx.html