#c# #unity3d
#c# #unity-игровой движок
Вопрос:
Я создаю игру, в которой игрок будет решать фразу точно так же, как в «колесе фортуны» минус колесо, но проблема в том, что некоторые слова вырезаются, когда слово превышает 15 столбцов. есть ли какой-нибудь способ заполнить слово в следующей строке?
я пробовал это только с тем, что я знаю, создавая плитку для каждой буквы
кажется, я не могу найти какое-либо решение для этого в сети, и я только начал изучать unity
private const int Columns = 15;
private const float Space = 35.0f;
public void LettertoBox()
{
for (int i = 0; i < currentWord.Length; i )
{
int row = i / Columns;
int column = i % Columns;
Vector3 newPosition3;
newPosition3 = new Vector3((cen.transform.position.x column * Space), (((cen.transform.position.y )) - row * Space), cen2.transform.position.z);
if (currentWord[i].ToString() != " ")
{
GameObject k = (GameObject)Instantiate(letterimage, newPosition3, Quaternion.identity);
k.name = "letterimage" (i 1);
k.transform.SetParent(GameObject.Find("Canvas").transform);
}
else
{
GameObject k = (GameObject)Instantiate(noletterimage, newPosition3, Quaternion.identity);
k.name = "letterimage" (i 1);
k.transform.SetParent(GameObject.Find("Canvas").transform);
}
GameObject l = (GameObject)Instantiate(letter, newPosition3, Quaternion.identity);
l.name = "letter" (i 1);
l.transform.SetParent(GameObject.Find("Canvas").transform);
}
}
Фактический результат
Ожидаемый результат
Комментарии:
1. Конечно, при просмотре нового слова проверяйте количество оставшихся пробелов, если меньше длины слова, новую строку
2. @BugFinder могу я получить пример кода этого?
Ответ №1:
Это должно сработать для вас, если ни одно слово во фразе не слишком велико для строки (в этом случае вам просто нужно определить его и разделить с помощью ‘-‘)
public void LetterToBox() {
int rowCount = 0;
int position = 0;
foreach (string word in phraseToSplitToWords.Split(" ")) {
if (CannotFitWordWithoutCuttingPastTheLimit(position,word, whateverIsTheNumberOfLettersPerLineYouWant)) {
rowCont ;
position= 0;
}
PlaceTheWordLetterByLetterInThisPosition(position,row,word);
position = position word.Length 1; // 1 for the space between words
}
}
public void PlaceTheWordLetterByLetterInThisPosition(int positionInLine, int row, string word) {
foreach (char letter in word) {
var x = positionInLine* LETTER_WIDTH;
var y = row* LETTER_HEIGHT;
InstantiateLetter(x, y, letter); //basically the same way you did
}
}
public bool CannotFitWordWithoutCuttingPastTheLimit(int position, string word, int limit) {
return (position word.Length > limit);
}
Комментарии:
1. я не знаю, как заставить эту часть работать с InstantiateLetter(x, y, letter); они накладываются друг на друга, когда я делаю это следующим образом Instantiate (letter, newPosition3, Quaternion.identity);
2. можете ли вы отладить и проверить, какие значения имеет «newPosition3»? возможно, вам также потребуется передать им background в качестве родительского
3. я добавил positionInLine ; чтобы переместить x, и это сработало, спасибо!