Пятница, 29 Ноября 2024, 14:25

Приветствую Вас Гость

[ Новые сообщения · Игроделы · Правила · Поиск ]
  • Страница 1 из 1
  • 1
Обращение к объекту скрипта из другого скрипта.
Fr0sTДата: Воскресенье, 06 Мая 2012, 12:28 | Сообщение # 1
постоянный участник
Сейчас нет на сайте
Вот у меня есть скрипт,где чел собирает предметы(соник собирает кольца) и скрипт где когда чел(соник) подходит к врагу то число этих предметов = 0.Как мне обратится из второго скрипта к этой переменной(которая в первом)?Я уже лазил по нету,находил похожие темы но ничего там не онял.



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
Fr0sTДата: Воскресенье, 06 Мая 2012, 15:18 | Сообщение # 5
постоянный участник
Сейчас нет на сайте
А если не трудно,можете сказать куда писать GetComponent<имя_твоего_скрипта>().твоя переменная. А то я чтото не въеду...Можете исправить ошибку в первом скрипте и тыкнуть меня носом в неё.



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
Fr0sTДата: Воскресенье, 06 Мая 2012, 15:22 | Сообщение # 7
постоянный участник
Сейчас нет на сайте
непонял



ЛевшаДата: Воскресенье, 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 скрипта ? Классы размножать ? smile
Обьедини код в 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)
  • Страница 1 из 1
  • 1
Поиск:

Все права сохранены. GcUp.ru © 2008-2024 Рейтинг