Ошибка cs0201 юнити

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

jannar's user avatar

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

jannar's user avatar

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

Efe's user avatar

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

Joe's user avatar

2

Incorrect syntax for string concatination:

"Question: " + question; " /10";

->

"Question: " + question + " /10";

answered Mar 10, 2020 at 18:56

Fredrik Schön's user avatar

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

C# Error CS0201 - Only assignment, call, increment, decrement, and new object expressions can be used as a statement

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



Понравилась статья? Поделить с друзьями:
  • Ошибка cs0116 unity
  • Ошибка cs0104 unity
  • Ошибка cs0103 visual studio
  • Ошибка crycloud hunt showdown 0x60004
  • Ошибка cs0102 unity