Как заменить/исправить PrefabUtility.SaveAsPrefabAsset?C#

Место общения программистов C#
Ответить
Anonymous
 Как заменить/исправить PrefabUtility.SaveAsPrefabAsset?

Сообщение Anonymous »

Итак, я создавал простую игру, и одна из вещей, которую я хотел, заключалась в том, чтобы вы могли выбирать скин во время игры, и это работало, но только в редакторе, поскольку я не знал, что его создание будет сделать так, чтобы функция больше не работала/вы просто не могли (немного глупо, когда я об этом думаю, но на самом деле не думал об этом).
Поэтому я хотел знать, если был способ сделать так, чтобы эта функция могла работать (поскольку я видел, как кто-то сказал, что они просто добавили файл редактора, но они никогда особо не объясняли, и это было расплывчато, так что я не знаю) или способ переработать ее, чтобы не использовать редактор.< /p>
Вот код для выбора игрока и персонажа игрока (я новичок в этом, поэтому код, вероятно, очень неуклюжий и неэффективный, заранее извините)
Выбор скина
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEditor;

public class skinManager : MonoBehaviour
{
public SpriteRenderer sr;
public SpriteRenderer sLeft;
public SpriteRenderer sLeftD;
public SpriteRenderer sDown;
public SpriteRenderer sRightD;
public SpriteRenderer sRight;
public SpriteRenderer sRightU;
public SpriteRenderer sUp;
public SpriteRenderer sLeftU;
public List skins = new List();
public List left = new List();
public List leftD = new List();
public List down = new List();
public List rightD = new List();
public List right = new List();
public List rightU = new List();
public List up = new List();
public List leftU = new List();
private int selectedSkin = 0;
private int selLeft = 0;
private int selLeftD = 0;
private int selDown = 0;
private int selRightD = 0;
private int selRight = 0;
private int selRightU = 0;
private int selUp = 0;
private int selLeftU = 0;
public GameObject playerSkin;
public GameObject playerLeft;
public GameObject playerLeftD;
public GameObject playerDown;
public GameObject playerRightD;
public GameObject playerRight;
public GameObject playerRightU;
public GameObject playerUp;
public GameObject playerLeftU;

public void NextOption()
{
selectedSkin = selectedSkin + 1;
selLeft = selLeft + 1;
selLeftD = selLeftD + 1;
selDown = selDown + 1;
selRightD = selRightD + 1;
selRight = selRight + 1;
selRightU = selRightU + 1;
selUp = selUp + 1;
selLeftU = selLeftU + 1;
if(selectedSkin == skins.Count)
{
selectedSkin = 0;
selLeft = 0;
selLeftD = 0;
selDown = 0;
selRightD = 0;
selRight = 0;
selRightU = 0;
selUp = 0;
selLeftU = 0;
}
sr.sprite = skins[selectedSkin];
sLeft.sprite = left[selectedSkin];
sLeftD.sprite = leftD[selectedSkin];
sDown.sprite = down[selectedSkin];
sRightD.sprite = rightD[selectedSkin];
sRight.sprite = right[selectedSkin];
sRightU.sprite = rightU[selectedSkin];
sUp.sprite = up[selectedSkin];
sLeftU.sprite = leftU[selectedSkin];
}

public void BackOption()
{
selectedSkin = selectedSkin - 1;
selLeft = selLeft - 1;
selLeftD = selLeftD - 1;
selDown = selDown - 1;
selRightD = selRightD - 1;
selRight = selRight - 1;
selRightU = selRightU - 1;
selUp = selUp - 1;
selLeftU = selLeftU - 1;
if(selectedSkin < 0)
{
selectedSkin = skins.Count - 1;
selLeft = left.Count - 1;
selLeftD = leftD.Count - 1;
selDown = down.Count - 1;
selRightD = rightD.Count - 1;
selRight = right.Count - 1;
selRightU = rightU.Count - 1;
selUp = up.Count - 1;
selLeftU = leftU.Count - 1;
}
sr.sprite = skins[selectedSkin];
sLeft.sprite = left[selectedSkin];
sLeftD.sprite = leftD[selectedSkin];
sDown.sprite = down[selectedSkin];
sRightD.sprite = rightD[selectedSkin];
sRight.sprite = right[selectedSkin];
sRightU.sprite = rightU[selectedSkin];
sUp.sprite = up[selectedSkin];
sLeftU.sprite = leftU[selectedSkin];
}

public void Select()
{
PrefabUtility.SaveAsPrefabAsset(playerSkin, "Assets/selectedskin.prefab");
PrefabUtility.SaveAsPrefabAsset(playerLeft, "Assets/selLeft.prefab");
PrefabUtility.SaveAsPrefabAsset(playerLeftD, "Assets/selLeftD.prefab");
PrefabUtility.SaveAsPrefabAsset(playerDown, "Assets/selDown.prefab");
PrefabUtility.SaveAsPrefabAsset(playerRightD, "Assets/selRightD.prefab");
PrefabUtility.SaveAsPrefabAsset(playerRight, "Assets/selRight.prefab");
PrefabUtility.SaveAsPrefabAsset(playerRightU, "Assets/selRightU.prefab");
PrefabUtility.SaveAsPrefabAsset(playerUp, "Assets/selUp.prefab");
PrefabUtility.SaveAsPrefabAsset(playerLeftU, "Assets/selLeftU.prefab");
}
}

Управление игроком
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.SceneManagement;
using UnityEngine.UI;

public class movement : MonoBehaviour
{
public bool gameStarted = false;
private bool noReset = false;
public GameObject selectedskin;
public GameObject selLeft;
public GameObject selLeftD;
public GameObject selLeftU;
public GameObject selRight;
public GameObject selRightD;
public GameObject selRightU;
public GameObject selDown;
public GameObject selUp;
private Sprite left;
private Sprite right;
private Sprite down;
private Sprite up;
private Sprite leftDown;
private Sprite rightDown;
private Sprite leftUp;
private Sprite rightUp;
private Sprite stare;
private int sceneID = 0;

void Start()
{
stare = selectedskin.GetComponent().sprite;
left = selLeft.GetComponent().sprite;
right = selRight.GetComponent().sprite;
down = selDown.GetComponent().sprite;
up = selUp.GetComponent().sprite;
leftDown = selLeftD.GetComponent().sprite;
rightDown = selRightD.GetComponent().sprite;
leftUp = selLeftU.GetComponent().sprite;
rightUp = selRightU.GetComponent().sprite;
}

void Update()
{
if (gameStarted)
{
float moveX = 0f;
float moveY = 0f;
float moveSpeed = 6f;
if(Input.GetKey(KeyCode.W))
{
moveY = +1f;
gameObject.GetComponent().sprite=up;
}
if(Input.GetKey(KeyCode.UpArrow))
{
moveY = +1f;
gameObject.GetComponent().sprite=up;
}
if(Input.GetKey(KeyCode.A))
{
moveX = -1f;
gameObject.GetComponent().sprite=left;
}
if(Input.GetKey(KeyCode.LeftArrow))
{
moveX = -1;
gameObject.GetComponent().sprite=left;
}
if(Input.GetKey(KeyCode.S))
{
moveY = -1f;
gameObject.GetComponent().sprite=down;
}
if(Input.GetKey(KeyCode.DownArrow))
{
moveY = -1f;
gameObject.GetComponent().sprite=down;
}
if(Input.GetKey(KeyCode.D))
{
moveX = +1f;
gameObject.GetComponent().sprite=right;
}
if(Input.GetKey(KeyCode.RightArrow))
{
moveX = +1f;
gameObject.GetComponent().sprite=right;
}
if(Input.GetKey(KeyCode.W)&&Input.GetKey(KeyCode.A))
{gameObject.GetComponent().sprite=leftUp;}
if(Input.GetKey(KeyCode.W)&&Input.GetKey(KeyCode.D))
{gameObject.GetComponent().sprite=rightUp;}
if(Input.GetKey(KeyCode.UpArrow)&&Input.GetKey(KeyCode.LeftArrow))
{gameObject.GetComponent().sprite=leftUp;}
if(Input.GetKey(KeyCode.UpArrow)&&Input.GetKey(KeyCode.RightArrow))
{gameObject.GetComponent().sprite=rightUp;}
if(Input.GetKey(KeyCode.S)&&Input.GetKey(KeyCode.A))
{gameObject.GetComponent().sprite=leftDown;}
if(Input.GetKey(KeyCode.S)&&Input.GetKey(KeyCode.D))
{gameObject.GetComponent().sprite=rightDown;}
if(Input.GetKey(KeyCode.DownArrow)&&Input.GetKey(KeyCode.LeftArrow))
{gameObject.GetComponent().sprite=leftDown;}
if(Input.GetKey(KeyCode.DownArrow)&&Input.GetKey(KeyCode.RightArrow))
{gameObject.GetComponent().sprite=rightDown;}
if(!Input.GetKey(KeyCode.W)&&!Input.GetKey(KeyCode.A)&&!Input.GetKey(KeyCode.S)&&!Input.GetKey(KeyCode.D)&&!Input.GetKey(KeyCode.UpArrow)&&!Input.GetKey(KeyCode.LeftArrow)&&!Input.GetKey(KeyCode.DownArrow)&&!Input.GetKey(KeyCode.RightArrow))
{gameObject.GetComponent().sprite=stare;}
Vector3 moveDir = new Vector3(moveX, moveY).normalized;
transform.position += moveDir * moveSpeed * Time.deltaTime;
}

if (Input.GetKeyDown(KeyCode.Space) && !noReset)
{
GameStart();
}
if (Input.GetKeyDown(KeyCode.R) && noReset && !gameStarted)
{
RestartScene();
}
if (Input.GetKeyDown(KeyCode.Escape))
{
HomeScreen();
}
}

public void HomeScreen()
{
SceneManager.LoadScene(sceneID);
}

void GameStart()
{
gameStarted = true;
noReset = true;
}

void GameEnd()
{
gameStarted = false;
}

void OnTriggerEnter2D(Collider2D other)
{
if(other.gameObject.CompareTag("enemy"))
{
GameEnd();
}
}

public void RestartScene()
{
SceneManager.LoadScene(SceneManager.GetActiveScene().buildIndex);
}
}


Подробнее здесь: https://stackoverflow.com/questions/790 ... refabasset
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C#»