Using Unity, I’m trying to add GameObjects with a particular script to an array. I’ve tried a bunch of different methods and ultimately I’ve ended up with this, and for the life of me I can’t find why it’s giving me the error, because everything I’ve googled for the last hour has said it’s mostly from syntax and I cannot find the syntax error. I wonder if it wouldn’t just make sense to use a get/set but I really don’t understand how those are different from for loops. Thank you!
public class QuestFinderScript : MonoBehaviour {
GameObject[] objects;
public List<GameObject> interactables = new List<GameObject> ();
int interactablesSize;
void Start(){
interactables = new List<GameObject> ();
objects = GameObject.FindGameObjectsWithTag ("Untagged");
interactablesSize = objects.Length;
for (int i = 0; i < interactablesSize; i++) {
InteractionSettings iset = objects [i].GetComponent<InteractionSettings> ();
if (iset != null) {
interactables.Add [i];
}
}
}
}
asked Feb 23, 2017 at 20:19
4
Thanks to your input, I’ve fixed it — part of the problem was that I didn’t realize the script I was referencing was a child, not a component of the gameobject itself. But if anyone’s curious:
interactables = new List<GameObject> ();
objects = GameObject.FindGameObjectsWithTag ("questable");
interactablesSize = objects.Length;
Debug.Log (interactablesSize);
for (int i = 0; i < interactablesSize; i++) {
InteractionSettings iset = objects [i].GetComponentInChildren<InteractionSettings> ();
if (iset != null) {
interactables.Add(iset.gameObject);
}
}
answered Feb 23, 2017 at 20:40
jannarjannar
511 gold badge1 silver badge4 bronze badges
1st problem: As Pogrammer says, Add is a function for list, not an indexer.
Add(i) is correct
Of course, the error is due to your 1st problem.
2nd problem: Interactables os list of GameObject, you try to add integer(i is integer) to list of GameObjects.
Review your code and understand what you are going to add to Interactables.
answered Feb 23, 2017 at 20:32
EfeEfe
80010 silver badges32 bronze badges
How do I fix this problem when trying to run 2 different functions that do similar things? Both initialise a counter at 0 and then update based on an onmousedown script on a 3D object.
public class GameManager : MonoBehaviour
{
public List<GameObject> targets;
public TextMeshProUGUI mistakeText;
public TextMeshProUGUI QAText;
public int question;
public int mistakes;
void Start()
{
mistakes = 0;
mistakeText.text = "Mistakes: " + mistakes;
question = 0;
QAText.text = "Question: " + question; " /10";
}
// Update is called once per frame
public void UpdateMistakes(int mistakesToAdd)
{
mistakes += mistakesToAdd;
mistakeText.text = "Mistakes: " + mistakes;
}
public void UpdateQuestion(int questionToAdd)
{
question += questionToAdd;
QAText.text = "Question: " + question; "/10";
}
}
Image
asked Mar 10, 2020 at 18:38
2
Incorrect syntax for string concatination:
"Question: " + question; " /10";
->
"Question: " + question + " /10";
answered Mar 10, 2020 at 18:56
Fredrik SchönFredrik Schön
4,8781 gold badge20 silver badges32 bronze badges
2
Добрый день, у меня возникла проблема с кодом (c#) для спрайта beetle. Я несколько раз перепроверил свой код, но все равно мне выскакивает ошибка:
AssetsScriptsBeetle.cs(42,9): error CS0201: Only assignment, call, increment, decrement, await, and new object expressions can be used as a statement
Буду рад, если поможете)
Мой код:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class Beetle : MonoBehaviour
{
public float speed = 4f;
bool isWait = false;
bool isHidden = true;
public float waitTime = 4f;
public Transform point;
void Start()
{
point.transform.position = new Vector3(transform.position.x, transform.position.y + 1f, transform.position.z);
}
void Update()
{
if (isWait == false)
transform.position = Vector3.MoveTowards(transform.position, point.position, speed*Time.deltaTime);
if (transform.position == point.position)
{
if (isHidden)
{
point.transform.position = new Vector3(transform.position.x, transform.position.y + 1f, transform.position.z);
isHidden = false;
} else
{
point.transform.position = new Vector3(transform.position.x, transform.position.y - 1f, transform.position.z);
isHidden = true;
}
isWait = true;
StartCoroutine(Waiting());
}
}
IEnumerator Waiting()
{
yield return new WaitForSeconds(waitTime);
isWait == false;
}
}
C# Compiler Error
CS0201 – Only assignment, call, increment, decrement, and new object expressions can be used as a statement
Reason for the Error
You will receive this error when you have an invalid statement in your C# code. For example, you have an statement that end with a semicolon and doesnot have =, () , new — or ++ operation in it.
For example, try to compile the below code snippet.
namespace DeveloperPubNamespace { class Program { static void Main(string[] args) { 8 * 2; } } }
This will result with the error code CS0201 as you have used 8 * 2 in a statement but doesnot contain any assignment operation.
Error CS0201 Only assignment, call, increment, decrement, await, and new object expressions can be used as a statement ConsoleApp3 C:UsersSenthilBalusourcereposConsoleApp3ConsoleApp3Program.cs 7 Active
Solution
To fix the error code CS0201, you will need to ensure that the statement is valid. You can fix the above code by using the assignment operation.
namespace DeveloperPubNamespace { class Program { static void Main(string[] args) { int i = 8 * 2; } } }
Получение переменной из другого скрипта
Получение переменной из другого скрипта
Знаю, что таких вопросов очень много… Но у меня просто пишет ошибку.
Текст ошибки:
Assets/scripts/shooter.cs(10,64): error CS0201: Only assignment, call, increment, decrement, and new object expressions can be used as a statement
Вот скрипт:
Используется csharp
using UnityEngine;
using System.Collections;
public class shooter : MonoBehaviour {
public float maxSpeed = 13f;
private float move = 0;
public bool isFacing = true;
public void FixedUpdate()
{
GetComponent<SheenaController> ().isFacingRight;
if (isFacingRight == true) {
move = 1;
} else {
move = —1;
}
GetComponent<Rigidbody2D>().velocity = new Vector2 (move * maxSpeed, GetComponent<Rigidbody2D>().velocity.y);
}
}
Подскажите в чём ошибка?
Заранее всем спасибо!))
-
Dragon-FAST - UNIт
- Сообщения: 92
- Зарегистрирован: 15 авг 2016, 08:29
Re: Получение переменной из другого скрипта
greatPretender 14 фев 2017, 07:30
void Start(){
isFacing = GetComponent<SheenaController> ().isFacingRight;
}
- greatPretender
- Старожил
- Сообщения: 526
- Зарегистрирован: 23 сен 2015, 07:51
Re: Получение переменной из другого скрипта
Rpabuj1 14 фев 2017, 11:23
Скрипты должны висеть на объектах. То есть, сначала берем объект, потом скрипт на нем, потом переменную.
имя_объекта.getComponent<имя_скрипта>().имя_переменной;
- Rpabuj1
- Старожил
- Сообщения: 639
- Зарегистрирован: 04 авг 2015, 12:07
Re: Получение переменной из другого скрипта
Dragon-FAST 14 фев 2017, 11:59
Rpabuj1 писал(а):Скрипты должны висеть на объектах. То есть, сначала берем объект, потом скрипт на нем, потом переменную.
имя_объекта.getComponent<имя_скрипта>().имя_переменной;
Спасибо получилось как раз по твоей компоновке!))
кому может понадобиться вот мой скрипт:
Используется csharp
using UnityEngine;
using System.Collections;
public class shooter : MonoBehaviour {
public int move = —1;
public bool lr = true;
public GameObject sheena;
public void Start()
{
lr = sheena.GetComponent<SheenaController> ().isFacingRight;
if (lr == true) {
move = 1;
} else {
move = —1;
}
}
public void FixedUpdate()
{
if (move > 0) {
GetComponent<Rigidbody2D> ().AddForce (new Vector2 (20, 0));
} else {
GetComponent<Rigidbody2D> ().AddForce (new Vector2 (—20, 0));
}
}
public void Update(){
Destroy (gameObject, 1);
}
}
-
Dragon-FAST - UNIт
- Сообщения: 92
- Зарегистрирован: 15 авг 2016, 08:29
Re: Получение переменной из другого скрипта
Rpabuj1 14 фев 2017, 12:25
Dragon-FAST писал(а):
Rpabuj1 писал(а):Скрипты должны висеть на объектах. То есть, сначала берем объект, потом скрипт на нем, потом переменную.
имя_объекта.getComponent<имя_скрипта>().имя_переменной;
Спасибо получилось как раз по твоей компоновке!))
кому может понадобиться вот мой скрипт:Используется csharp
using UnityEngine;
using System.Collections;public class shooter : MonoBehaviour {
public int move = —1;
public bool lr = true;
public GameObject sheena;
public void Start()
{
lr = sheena.GetComponent<SheenaController> ().isFacingRight;
if (lr == true) {
move = 1;
} else {
move = —1;
}
}
public void FixedUpdate()
{
if (move > 0) {
GetComponent<Rigidbody2D> ().AddForce (new Vector2 (20, 0));
} else {
GetComponent<Rigidbody2D> ().AddForce (new Vector2 (—20, 0));
}
}
public void Update(){
Destroy (gameObject, 1);
}
}
Рад, что смог помочь
Удачи вам!
- Rpabuj1
- Старожил
- Сообщения: 639
- Зарегистрирован: 04 авг 2015, 12:07
Вернуться в Почемучка
Кто сейчас на конференции
Сейчас этот форум просматривают: Yandex [Bot] и гости: 34