#c# #loops #unity3d #iteration
#c# #циклы #unity3d #итерация
Вопрос:
Я пытаюсь получить число от 0 до 3. Я пытаюсь выполнить итерацию по счетчику, и каждые 5 нажатий на кнопку он вызывает метод, но, похоже, я не могу его понять. Я пробовал разные способы сделать это. Если бы я мог получить несколько советов о том, как это сделать, пожалуйста, дайте мне знать. Если вам нужна какая-либо другая информация, также дайте мне знать. Спасибо!
using UnityEngine;
using UnityEngine.UI;
using System;
using System.Threading;
public class ButtonClick : MonoBehaviour {
private Vector3 starPos;
private int starCounter;
private int[] starTypes;
private int totalStarTypes = 4;
public Button button;
public UnityEngine.UI.Text starCounterText;
private Image starImage;
// Use this for initialization
void Start () {
starTypes = new int[totalStarTypes];
}
void Update(){
if (Input.GetMouseButtonDown (0)) {
starCounter ;
}
for (int i = 0; i < starCounter; i ) {
int j = i;
int type = (j % 5);
if (type == 0) {
//SpawnStar (j%5);
}
}
}
// Update is called once per frame
public void UpdateStar () {
starCounterText.text = "Star Counter: " starCounter;
}
public void SpawnStar(int type){
if (type == 0) {
Debug.Log ("White Star Spawned!");
}
if (type == 1) {
Debug.Log ("Red Star Spawned!");
}
if (type == 2) {
Debug.Log ("Yellow Star Spawned!");
}
if (type == 3) {
Debug.Log ("Blue Star Spawned!");
}
}
}
Комментарии:
1. Что определяет, какая звезда появляется? Это тоже итеративно? Случайно? Какой-то другой определяющий фактор?
2. Для каждого клика счетчик добавляется на 1 (уже обработанный), и за каждые 5 кликов он порождает звезду. Итак, какое бы целое число ни обрабатывало логику 5-го клика (например, j или type, возможно, до сих пор не разработано), оно вызывает функцию для создания типа (int) star . Также я добавлю в него random, как только закончу с основами. На данный момент только итерация по счетчику, в которой обрабатывается логика, определяет, какой тип звезды порождается. Может быть, мне следует использовать like a List, выполнить итерацию по списку и получить из этого случайное значение int?
3. Вам не нужны списки, массивы или циклы. Это можно сделать с помощью простой математики. Помните принцип KISS.
Ответ №1:
Random r = new Random();
void Update()
{
if (Input.GetMouseButtonDown(0))
{
starCounter = (starCounter 1) % 5;
if (starCounter == 0) SpawnStar(r.Next(0, 4));
}
}
Ответ №2:
Ваш код будет отображать все звезды в каждом кадре после 5-го клика.
Попробуйте это, при нажатии появится одна звезда, и только та, которую вы хотели создать.
- Int
starCounter
будет обрабатывать, какую звезду создавать - Bool
executeSpawn
будет обрабатывать, когда создавать звезду
using UnityEngine;
using UnityEngine.UI;
using System;
using System.Threading;
public class ButtonClick : MonoBehaviour {
private Vector3 starPos;
private int starCounter;
private bool executeSpawn;
private int[] starTypes;
private int totalStarTypes = 4;
public Button button;
public UnityEngine.UI.Text starCounterText;
private Image starImage;
// Use this for initialization
void Start () {
starTypes = new int[totalStarTypes];
}
void Update(){
if (Input.GetMouseButtonDown (0)) {
starCounter ;
executeSpawn = true;
}
if(executeSpawn) {
SpawnStar (i % 5);
executeSpawn = false;
}
}
// Update is called once per frame
public void UpdateStar () {
starCounterText.text = "Star Counter: " starCounter;
}
public void SpawnStar(int type){
if (type == 0) {
Debug.Log ("White Star Spawned!");
}
if (type == 1) {
Debug.Log ("Red Star Spawned!");
}
if (type == 2) {
Debug.Log ("Yellow Star Spawned!");
}
if (type == 3) {
Debug.Log ("Blue Star Spawned!");
}
}
}
Комментарии:
1. Правильно, глядя на то, что
SpawnStar
делает функция, казалось бы, это то, что требуется. Я отредактирую ответ, чтобы отразить это2. Во-первых, в OP конкретно указано, что звездочка должна появляться при каждом 5-м клике. Во-вторых, этот код может вызываться
SpawnStar
с параметром 4, который ничего не сделает. В-третьих, если целью было создание звезды при каждом клике, логический флаг является избыточным.