Обращение к объекту скрипта из другого скрипта.
|
|
|
pixeye | Дата: Воскресенье, 06 Мая 2012, 12:35 | Сообщение # 2 |
Red Winter Software
Сейчас нет на сайте
| Quote (Fr0sT) Вот у меня есть скрипт,где чел собирает предметы(соник собирает кольца) и скрипт где когда чел(соник) подходит к врагу то число этих предметов = 0.Как мне обратится из второго скрипта к этой переменной(которая в первом)?Я уже лазил по нету,находил похожие темы но ничего там не онял.
Скрипт это компонент игрового объекта . К компонентам можно обращаться. GetComponent<имя_твоего_скрипта>().твоя переменная . ( Для этого переменная должна быть публичной )
Зная это, тебе осталось обратиться к компоненту конкретного объекта. Это можно сделать через коллайдеры и тригеры.
ACTORS - мой фреймворк на Unity Until We Die - игра над которой работаю
|
|
| |
Fr0sT | Дата: Воскресенье, 06 Мая 2012, 12:54 | Сообщение # 3 |
постоянный участник
Сейчас нет на сайте
| Я написал так Code using UnityEngine; using System.Collections;
public class Enemy : MonoBehaviour { void OnTriggerEnter(Collider SonicEnemy) { GetComponent<SonicCollision>().ring; if(SonicEnemy.gameObject.name == "Enemy") { ring = 0; Debug.Log("ring"); } } } а он выдаёт шоибку Assets/Scripts/Enemy.cs(8,52): error CS0201: Only assignment, call, increment, decrement, and new object expressions can be used as a statement.
Вот скрипт в котором переменная
Code using UnityEngine; using System.Collections;
public class SonicCollision: MonoBehaviour { void OnTriggerEnter(Collider SonicCollision) { int ring = 0; if(SonicCollision.gameObject.name == "Ring") { Destroy(SonicCollision.gameObject); ring ++; Debug.Log(ring); } } }
|
|
| |
Левша | Дата: Воскресенье, 06 Мая 2012, 13:26 | Сообщение # 4 |
почти ветеран
Сейчас нет на сайте
| Ты переменную ring обьявляешь внутри функции. Надо ее декларировать внутри класса, вне функций и сделать еe public.
Code using UnityEngine; using System.Collections;
public class SonicCollision: MonoBehaviour { public int ring = 0
void OnTriggerEnter(Collider SonicCollision) { ring = 0; if(SonicCollision.gameObject.name == "Ring") { Destroy(SonicCollision.gameObject); ring ++; Debug.Log(ring); } } }
X.cor.R (Prologue)
Сообщение отредактировал Левша - Воскресенье, 06 Мая 2012, 13:28 |
|
| |
|
MyACT | Дата: Воскресенье, 06 Мая 2012, 15:20 | Сообщение # 6 |
C# CODERS
Сейчас нет на сайте
| В void ТвойМетод(){ }Добавлено (06.05.2012, 15:20) --------------------------------------------- Это либо Update() либо твой любой
3дэшечки: https://sketchfab.com/myactyindie Курентли воркс он: https://myacty.itch.io/raskopnik
|
|
| |
|
Левша | Дата: Воскресенье, 06 Мая 2012, 15:34 | Сообщение # 8 |
почти ветеран
Сейчас нет на сайте
| Quote (Fr0sT) А если не трудно,можете сказать куда писать GetComponent<имя_твоего_скрипта>().твоя переменная. У тебя там все неправильно построено... Если скрипт SonicCollision висит на другом обьекте, то сначала надо получить ссылку на обьект, а уже после на его компонент. Code using UnityEngine; using System.Collections;
public class Enemy : MonoBehaviour {
SonicCollision targScript;
void OnTriggerEnter(Collider SonicEnemy) { targScript = gameObject.Find("ИмяОбьекта").GetComponent("SonicCollision"); if(SonicEnemy.gameObject.name == "Enemy") { targScript.ring = 0; Debug.Log("targScript.ring"); } } }
X.cor.R (Prologue)
Сообщение отредактировал Левша - Воскресенье, 06 Мая 2012, 15:35 |
|
| |
Fr0sT | Дата: Воскресенье, 06 Мая 2012, 15:34 | Сообщение # 9 |
постоянный участник
Сейчас нет на сайте
| Аннет,оба скрипта висят на сонике.Не выходит.
Сообщение отредактировал Fr0sT - Воскресенье, 06 Мая 2012, 15:47 |
|
| |
Левша | Дата: Воскресенье, 06 Мая 2012, 16:45 | Сообщение # 10 |
почти ветеран
Сейчас нет на сайте
| Если оба скрипта висят на одном обьекте, тогда зачем 2 скрипта ? Классы размножать ? Обьедини код в 1 класс и все просто решиться.
X.cor.R (Prologue)
|
|
| |
Fr0sT | Дата: Воскресенье, 06 Мая 2012, 19:05 | Сообщение # 11 |
постоянный участник
Сейчас нет на сайте
| Я просто чтото не дадумался сначала,а щас вод допер,ну всёравно огромное спасибо!
Добавлено (06.05.2012, 19:05) --------------------------------------------- А я вот так написал и у меня он теперь сквозь кольца проходит,что там не так.Я только начинаю скрипты писать если что,так что у меня много ошибок) Code using UnityEngine; using System.Collections;
public class RingCollector: MonoBehaviour { public int ring = 0; void OnTriggerEnter(Collider RingCollider,Collider EnemyCollider) { if(RingCollider.gameObject.name == "Ring") { Destroy(RingCollider.gameObject); ring ++; Debug.Log(ring); } else if(EnemyCollider.gameObject.name == "Enemy") { ring = 0; Debug.Log(ring); } } }
Script error: OnTriggerEnter The message must have 0 or 1 parameters. The message will be ignored.
Сообщение отредактировал Fr0sT - Воскресенье, 06 Мая 2012, 19:08 |
|
| |
Левша | Дата: Воскресенье, 06 Мая 2012, 20:39 | Сообщение # 12 |
почти ветеран
Сейчас нет на сайте
| Quote (Fr0sT) if(RingCollider.gameObject.name == "Ring") Сколько у тебя обьектов с таким именем? Лучше помести их в слой или таг и проверяй таг или лаер. И еще у тебя странная аргументация в функции OnTriggerEnter, по справке там может быть только один колайдер...
X.cor.R (Prologue)
|
|
| |