I’m pretty new at C# scripting and the whole Unity thing.
I’ve watched tutorials and read a dozen forums from users that got the same error and I’ve tried to fix it
but I feel like I’m messing it up more.
Unity is saying the error is on line 16 column 10, visual study can’t pick up any errors.
It was meant to be a simple script to make my character move but it’s getting real difficult to solve whatever is happening.
What Unity is saying :
My script:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class NewBehaviourScript : MonoBehaviour
{
// Start is called before the first frame update
void Start(int mDir)
{ }
private float speed = 2.0f;
public GameObject character;
}
// Update is called once per frame
void Update()
{
if (Input.GetKey(KeyCode.D))
{
transform.position += Vector3.right * speed * Time.deltaTime;
}
if (Input.GetKey(KeyCode.A))
{
transform.position += Vector3.left * speed * Time.deltaTime;
}
if (Input.GetKey(KeyCode.W))
{
transform.position += Vector3.up * speed * Time.deltaTime;
}
forward;
if (Input.GetKey(KeyCode.S))
{
transform.position += Vector3.down * speed * Time.deltaTime;
}
}
asked Dec 15, 2020 at 8:52
4
All members (field, property and method) have to be in a class. In your case, the method Update
isn’t in a class. Maybe you close the class NewBehaviourScript
too early. More information in the official documentation.
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
namespace MyProject
{
public class NewBehaviourScript : MonoBehaviour
{
// Start is called before the first frame update
void Start(int mDir)
{
}
private float speed = 2.0f;
public GameObject character;
// Update is called once per frame
void Update()
{
if (Input.GetKey(KeyCode.D))
{
transform.position += Vector3.right * speed * Time.deltaTime;
}
if (Input.GetKey(KeyCode.A))
{
transform.position += Vector3.left * speed * Time.deltaTime;
}
if (Input.GetKey(KeyCode.W))
{
transform.position += Vector3.up * speed * Time.deltaTime;
}
forward;
if (Input.GetKey(KeyCode.S))
{
transform.position += Vector3.down * speed * Time.deltaTime;
}
}
} // Close the class NewBehaviourScript
} // Close the namespace
Little advice, you can also encapsulate the class in namespace classify classes. Generally, the namespace name is the project’name + folder structure.
IndieGameDev
2,8953 gold badges15 silver badges29 bronze badges
answered Dec 15, 2020 at 8:56
vernouvernou
6,2724 gold badges29 silver badges57 bronze badges
I’ve got this error and need help, it is on (92,28), but the error has remained, any help would be appreciated, Im relatively new to programming in c# so I’m not entirely familiar with the programming language yet, so this is probably a beginner question, but even so, an answer and and explanation as to what i did wrong as so I can improve upon myself is always appreacited.
using UnityEngine;
[CreateAssetMenu(fileName = "Pokemon", menuName = "Pokemon/Create New Pokemon")]
public class PokemonBase : ScriptableObject
{
[SerializeField] string name;
[TextArea]
[SerializeField] string description;
[SerializeField] Sprite frontSprite;
[SerializeField] Sprite backSprite;
[SerializeField] PokemonType type1;
[SerializeField] PokemonType type2;
//Base Stats
[SerializeField] int maxHp;
[SerializeField] int attack;
[SerializeField] int defense;
[SerializeField] int spAttack;
[SerializeField] int spDefense;
[SerializeField] int speed;
[SerializeField] List<LearnableMove> learnableMoves;
public string Name
{
get { return name; }
}
public string Description
{
get { return description; }
}
public Sprite FrontSprite
{
get { return frontSprite; }
}
public Sprite BackSprite
{
get { return backSprite; }
}
public PokemonType Type1
{
get { return type1; }
}
public PokemonType Type2
{
get { return type2; }
}
public int MaxHp
{
get { return maxHp; }
}
public int Attack
{
get { return attack; }
}
public int Defense
{
get { return defense; }
}
public int SpAttack
{
get { return spAttack; }
}
public int SpDefense
{
get { return spDefense; }
}
public int Speed
{
get { return speed; }
}
}
public List<LearnableMove> LearnableMoves
{
get { return learnableMoves; }
}
[System.Serializable]
public class LearnableMove
{
[SerializeField] MoveBase moveBase;
[SerializeField] int level;
public MoveBase Base
{
get { return moveBase; }
}
public int Level
{
get { return level; }
}
}
public enum PokemonType
{
None,
Normal,
Fire,
Water,
Grass,
Electric,
Ice,
Fighting,
Poison,
Ground,
Flying,
Physic,
Bug,
Rock,
Ghost,
Dragon
} ```
введите описание изображения здесь. Я следил за инструкциями по созданию игры Brackeys из YouTube и я застрял на видео нет. 7 и я не могу понять, как решить проблему. Пожалуйста помоги.
ссылка на учебник
Код в 7:36
using UnityEngine;
using UnityEngine UI;
public class Score : MonoBehaviour
{
public Transform player;
public Text scoreText;
void Update()
{
scoreText.text = player.position.z.ToString("0");
}
}
2 ответа
Лучший ответ
Сначала проверьте вторую строку вашего кода. В using UnityEngine UI;
отсутствует точка между UnityEngine
и UI
. Я считаю, что это суть вашей проблемы и вызывает появление двух других ошибок. Строка должна быть using UnityEngine.UI;
.
Тем не менее, вот объяснение того, как определить маршрут такой проблемы .
Пожалуйста, перейдите по следующим двум ссылкам для получения информации о ваших двух кодах ошибок. Помните, что они всегда доступны через быстрый поиск в Google:
- CS1002: эта ошибка означает, что вам не хватает точки с запятой ( ;). В C # точка с запятой требуется в конце почти всех строк. Глядя на ваш код, вы видите, что отсутствующая точка с запятой не находится в этом конкретном блоке кода, поэтому она должна быть в другом месте вашего кода. Чтобы найти его, самый простой способ — это зайти в окно консоли Unity и дважды щелкнуть строку с ошибкой или найти расположение сценария и номер строки в сообщении. Любой из них должен приблизить вас к отсутствующей точке с запятой.
- CS0116: эта ошибка означает пространство имен, которое содержит что-то отличное от класса, структуры или другого пространства имен. Это означает, что структура вашего кода ошибочна. Снова перейдите к ошибке и посмотрите, сможете ли вы найти сценарий, в котором она содержится. Затем просмотрите структуру и убедитесь, что нет никаких областей, где что-то вроде метода выходит за пределы вашего класса (это обычное дело и может означает, что вы поместили метод непосредственно в пространство имен, что приведет к CS0116.
Надеюсь это поможет!
Изменить: подумайте еще немного о логике здесь, и это 100% вторая строка. Представьте, как компилятор это интерпретирует. На самом деле, когда вы пропускаете этот период, вы видите «две строчки».
using UnityEngine
UI;
Итак, он смотрит на это и говорит две вещи:
- После
using UnityEngine
отсутствует точка с запятой - Вы должны сделать что-то в области пространства имен перед вашим классом, что запрещено
Довольно интересно, когда вы думаете о том, почему он говорит вам, что у вас есть обе эти ошибки.
3
Jee
12 Май 2020 в 06:30
Ошибка находится во второй строке вашего кода:
using UnityEngine;
using UnityEngine UI;
Следует изменить на:
using UnityEngine;
using UnityEngine.UI;
Вам понадобится период для доступа к другому пространству имен в пространстве имен UnityEngine.
3
Arcanum Astronaut
22 Июл 2020 в 18:24
C# Compiler Error
CS0116 – A namespace cannot directly contain members such as fields or methods.
Reason for the Error
This is one of the simplest of the errors that you will notice in C#. You will receive this error when you have declared a field or method directly under namespace instead of the class.
In C#, a namespace can contain only other namespaces, classes, Enums and structs and not fields, variables or methods directly under them.
Try compiling the below code snippet and you will immediately see the C# Compiler error CS0116.
namespace DeveloperPublishNamespace { public int Field1; public class DeveloperPublish { public static void Main() { } } }
Error CS0116 A namespace cannot directly contain members such as fields or methods ConsoleApp1 C:UsersSenthilsourcereposConsoleApp1ConsoleApp1Program.cs 3 Active
Solution
You can fix this by moving the fields or methods from the namespace into a class.
Помогите со скриптом
Помогите со скриптом
Я только учусь писать скрипты.Вообщем кому не сложно можете подсказать скрипт на то, что когда ты смотришь на объект долго то он тебя убивает(как в слендере).Прошу,заранее благодарен.
- goodrussianguy
- UNец
- Сообщения: 8
- Зарегистрирован: 04 июн 2014, 20:05
Re: Помогите со скриптом
Good1101 04 июн 2014, 21:01
Возможно OnBecameVisible чем то поможет
Используется csharp
void OnBecameVisible()
{
player.health = 0;
}
Как тут стрелять?
-
Good1101 - Адепт
- Сообщения: 1100
- Зарегистрирован: 17 ноя 2011, 14:07
-
- ICQ
Re: Помогите со скриптом
GameWorld 04 июн 2014, 23:46
Вешаешь этот скрипт на объект.
Используется csharp
public float health = 100;//Жизнь игрока
void Update()
{
if (!renderer.isVisible) //Если пропал из камеры
{
health = 100; // Сбрасываем жизнь на 100
}
}
void OnGUI()
{
if (renderer.isVisible && health != 0) //Если Слендер в камере и жзнь не равна нулю
{
health -= Time.deltaTime * 5; //Уменьшаем жизнь
GUI.TextArea(new Rect(10, 10, 200, 20), «Health: « + health);//выводим на экран
}
if (health == 0) //Если жизнь на нуле
{
GUI.TextArea(new Rect(10, 10, 200, 20), «Your dead!»); //Выводим сообщение.
health = 0;
}
}
«Улучшение работающего продукта — приводит к его ухудшению.»
-
GameWorld - Старожил
- Сообщения: 620
- Зарегистрирован: 11 янв 2011, 03:02
- Skype: Alien3DModeller
Re: Помогите со скриптом
goodrussianguy 05 июн 2014, 12:46
Простите что снова беспокою,но:
Assets/die.js(1,8): BCE0043: Unexpected token: float.
Я попытался вставить не в Java script а в C# script и там такое:
Assets/die.cs(1,14): error CS0116: A namespace can only contain types and namespace declarations
Assets/die.cs(3,10): error CS0116: A namespace can only contain types and namespace declarations
Assets/die.cs(11,10): error CS0116: A namespace can only contain types and namespace declarations
- goodrussianguy
- UNец
- Сообщения: 8
- Зарегистрирован: 04 июн 2014, 20:05
Re: Помогите со скриптом
MF_Andreich 05 июн 2014, 12:53
А ты это просто в текст вставил без объявления класса ? Судя по ошибке — да…
Не надо так.
Это же внутренности класса. Нужно создать новый скрипт, и вставить это унутрь него, а не вместо него.
Смотрим:
Используется csharp
using UnityEngine;
using System.Collections;
public class die : MonoBehaviour {
// Use this for initialization
void Start () {
}
//вставить отсюды
// Update is called once per frame
void Update () {
}
//до сюды
}
З.Ы. И читать маны по скриптам C#. Ибо с таким
настроем ты слоника не продашь
уровнем знаний по теме, далеко не уедешь.
Holly Shovel Team
-
MF_Andreich - Старожил
- Сообщения: 924
- Зарегистрирован: 20 июн 2013, 10:09
- Откуда: Барнаул
- Skype: mf_andreich
-
- ICQ
Re: Помогите со скриптом
goodrussianguy 05 июн 2014, 13:16
ГЛУБОЧАЙШЕ извиняюсь,но:
Assets/dead.cs(35,14): error CS0111: A member `die.Update()’ is already defined. Rename this member or use different parameter types
- goodrussianguy
- UNец
- Сообщения: 8
- Зарегистрирован: 04 июн 2014, 20:05
Re: Помогите со скриптом
MF_Andreich 05 июн 2014, 13:25
тяжело…
Update — это метод. Он может быть только один с таким названием (ну вообще не один, но должен тогда отличаться параметрами). Ошибка натолкнула меня на мысль, что ты вставил код не вместо, а рядом с тем куском, который я показал…
Holly Shovel Team
-
MF_Andreich - Старожил
- Сообщения: 924
- Зарегистрирован: 20 июн 2013, 10:09
- Откуда: Барнаул
- Skype: mf_andreich
-
- ICQ
Re: Помогите со скриптом
goodrussianguy 05 июн 2014, 13:34
Вставил скрипт на игрока, смотрю монстру прямо в лицо и хоть бы что.В плотную подхожу тоже ничего,смотрит на меня и все.
- goodrussianguy
- UNец
- Сообщения: 8
- Зарегистрирован: 04 июн 2014, 20:05
Re: Помогите со скриптом
MF_Andreich 05 июн 2014, 13:43
Продолжаем разговор. Данный скрипт вешается на то, что мы видим, а не на то, что у нас смотрит. В общем не рекомендую пока лезть в такие дебри, а начать с хело ворлд, изучения ООП как такового, C# и только потом приступать к скриптованию игры. Либо найти программиста.
Holly Shovel Team
-
MF_Andreich - Старожил
- Сообщения: 924
- Зарегистрирован: 20 июн 2013, 10:09
- Откуда: Барнаул
- Skype: mf_andreich
-
- ICQ
Re: Помогите со скриптом
goodrussianguy 05 июн 2014, 13:52
Друг дал этот скрипт,но он тоже не работает вообщем пойду найду программиста.
Используется csharp
using UnityEngine;
using System.Collections;
public class Slender : MonoBehaviour
{
private bool teleported;
public GameObject slender;
public float approximationSlenderMin, approximationSlenderMax, approximationSlender, approximationMinus, TeleportTimerMinus;
public GameObject target;
private float distance;
private Vector3 SlenderPosition;
public float TeleportTimer;
private float TeleportTimerDown;
public float _deadTimer;
private float deadTimerDown;
private Vector3 TargetPosition;
public float MaxDistance;
public NoiseEffect Effect;
private Vector3 direction;
public float DeadDistance;
public GameObject light;
void Start ()
{
deadTimerDown = _deadTimer;
TeleportTimerDown = TeleportTimer;
slender = gameObject;
target = GameObject.FindGameObjectWithTag («Player»);
SlenderPosition = slender.gameObject.transform.position;
}
void Update ()
{
approximationSlender = Random.Range (approximationSlenderMin, approximationSlenderMax);
Distance ();
TargetPosition = target.transform.position;
slender.gameObject.transform.position = SlenderPosition;
SlenderTeleport ();
if (distance <= DeadDistance) {
DeadTimer ();
}
if (distance < MaxDistance) {
if ((Vector3.Dot (target.transform.forward, (slender.transform.position — target.transform.position)) > 0) || (distance < 2)) {
Effect.enabled = true;
Effect.grainIntensityMin += 0.01f;
DeadTimer ();
} else {
deadTimerDown = _deadTimer;
if (Effect.grainIntensityMin > 0) {
Effect.grainIntensityMin -= 0.05f;
} else {
Effect.enabled = false;
}
}
}
}
public void SlenderTeleport ()
{
if (TeleportTimerDown > 0)
TeleportTimerDown -= Time.deltaTime;
if (TeleportTimerDown < 0)
TeleportTimerDown = 0;
if (TeleportTimerDown == 0) {
SlenderPosition.x = (TargetPosition.x — approximationSlender);
SlenderPosition.z = (TargetPosition.z — approximationSlender);
direction = TargetPosition — slender.transform.position;
direction.y = 0;
slender.transform.rotation = Quaternion.Slerp (slender.transform.rotation, Quaternion.LookRotation (direction), 1000 * Time.deltaTime);
if (TeleportTimer > 3) {
TeleportTimer -= TeleportTimerMinus;
}
if (approximationSlenderMin > 1) {
approximationSlenderMax += approximationMinus;
approximationSlenderMin += approximationMinus;
}
TeleportTimerDown = TeleportTimer;
}
}
public void Distance ()
{
distance = Vector3.Distance (slender.transform.position, target.transform.position);
}
public void DeadTimer ()
{
if (deadTimerDown > 0)
deadTimerDown -= Time.deltaTime;
if (deadTimerDown < 0)
deadTimerDown = 0;
if (deadTimerDown == 0) {
Dead ();
}
}
public void Dead ()
{
Destroy (target.gameObject);
light.SetActive(true);
}
}
- goodrussianguy
- UNец
- Сообщения: 8
- Зарегистрирован: 04 июн 2014, 20:05
Re: Помогите со скриптом
goodrussianguy 05 июн 2014, 14:16
Может быть поможете последний раз?Я все вставил и вот что пишет:
MissingComponentException: There is no ‘Renderer’ attached to the «Slender» game object, but a script is trying to access it.
You probably need to add a Renderer to the game object «Slender». Or your script needs to check if the component is attached before using it.
die.OnGUI () (at Assets/die.cs:22)
- goodrussianguy
- UNец
- Сообщения: 8
- Зарегистрирован: 04 июн 2014, 20:05
Вернуться в Скрипты
Кто сейчас на конференции
Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 13