Не могу получить доступ к JS скрипту из С# - Форум Игроделов
Пн, 20 Май 2024, 02:17 
 
Приветствую Вас Гость Главная | Регистрация | Вход
Новые сообщения · Участники · Правила форума · Поиск · RSS ]
  • Страница 1 из 1
  • 1
Форум Игроделов » UNITY3D » ОБЩИЕ ВОПРОСЫ » Не могу получить доступ к JS скрипту из С#
Не могу получить доступ к JS скрипту из С#
ThierryHДата: Пт, 15 Авг 2014, 08:52 | Сообщение # 1
Нет аватара
 
Сообщений: 12
Награды: 0
Репутация: 0
Статус: Offline
Добрый день.
Очень прошу помочь.
Есть скрипт, который отвечает за вывод баров healthBar и других. Написан на C#.
Из него, как ни пытался, не могу обратиться к скрипту CharacterMotor (он на JS -из стандартных ассетов).
Искал в справках и видео, где-то писали, что нужно их по папкам правильно раскидать - но это не помогает.
Help, please
 
СообщениеДобрый день.
Очень прошу помочь.
Есть скрипт, который отвечает за вывод баров healthBar и других. Написан на C#.
Из него, как ни пытался, не могу обратиться к скрипту CharacterMotor (он на JS -из стандартных ассетов).
Искал в справках и видео, где-то писали, что нужно их по папкам правильно раскидать - но это не помогает.
Help, please

Автор - ThierryH
Дата добавления - 15 Авг 2014 в 08:52
AltairДата: Пт, 15 Авг 2014, 09:46 | Сообщение # 2
Unity 3D PRO Developer
 
Сообщений: 758
Награды: 6
Репутация: 195
Статус: Offline
ThierryH, если в одну папки закинуть,то может получится,но всё же лучше юзать один язык..
 
СообщениеThierryH, если в одну папки закинуть,то может получится,но всё же лучше юзать один язык..

Автор - Altair
Дата добавления - 15 Авг 2014 в 09:46
ThierryHДата: Пт, 15 Авг 2014, 09:50 | Сообщение # 3
Нет аватара
 
Сообщений: 12
Награды: 0
Репутация: 0
Статус: Offline
Пробовал, не выходит.
Придется переписывать Motor под C#
 
СообщениеПробовал, не выходит.
Придется переписывать Motor под C#

Автор - ThierryH
Дата добавления - 15 Авг 2014 в 09:50
HunjethДата: Пт, 15 Авг 2014, 11:00 | Сообщение # 4
 
Сообщений: 354
Награды: 1
Репутация: 112
Статус: Offline
Перемести C# скрипты в папку "Assets/Plugins", видел такое во многих проектах.

Сообщение отредактировал Hunjeth - Пт, 15 Авг 2014, 11:00
 
СообщениеПеремести C# скрипты в папку "Assets/Plugins", видел такое во многих проектах.

Автор - Hunjeth
Дата добавления - 15 Авг 2014 в 11:00
ThierryHДата: Пт, 15 Авг 2014, 12:45 | Сообщение # 5
Нет аватара
 
Сообщений: 12
Награды: 0
Репутация: 0
Статус: Offline
Пробовал не помогло(, но все равно спасибо. Решил путем переноса необх. функционала на C#.
Еще вопросик, у меня уже голова закипает.....помогите, пож-та:
пытаюсь получить доступ к скрипту GUIManager (к-ый отвечает за отрисовку баров здоровья и изменения здоровья),
через скрипт Heal (к-ый прибавляет жизни).
В скрипте Heal у меня:
Код

public class Heal : MonoBehaviour  
{
  public GUIManager gm = GameObject.Find("First Person Controller").GetComponent<GUIManager>();

  void OnTriggerEnter(Collider col)
  {
   GUIManager gm = GameObject.Find("First Person Controller").GetComponent<GUIManager>();
   GUIManager.AdjustCurrentHealth(20);          // вот к нему не могу получить доступ
   Destroy(gameObject);
  }
}

Не дает воспользоваться AdjustCurrentHealth;
Ошибка: error CS0120: An object reference is required to access non-static member `GUIManager.AdjustCurrentHealth(int)'
Я смотрел по этой ошибке - но не знаю как ее исправить.
 
СообщениеПробовал не помогло(, но все равно спасибо. Решил путем переноса необх. функционала на C#.
Еще вопросик, у меня уже голова закипает.....помогите, пож-та:
пытаюсь получить доступ к скрипту GUIManager (к-ый отвечает за отрисовку баров здоровья и изменения здоровья),
через скрипт Heal (к-ый прибавляет жизни).
В скрипте Heal у меня:
Код

public class Heal : MonoBehaviour  
{
  public GUIManager gm = GameObject.Find("First Person Controller").GetComponent<GUIManager>();

  void OnTriggerEnter(Collider col)
  {
   GUIManager gm = GameObject.Find("First Person Controller").GetComponent<GUIManager>();
   GUIManager.AdjustCurrentHealth(20);          // вот к нему не могу получить доступ
   Destroy(gameObject);
  }
}

Не дает воспользоваться AdjustCurrentHealth;
Ошибка: error CS0120: An object reference is required to access non-static member `GUIManager.AdjustCurrentHealth(int)'
Я смотрел по этой ошибке - но не знаю как ее исправить.

Автор - ThierryH
Дата добавления - 15 Авг 2014 в 12:45
ЛевшаДата: Пт, 15 Авг 2014, 13:00 | Сообщение # 6
Черный Волк
 
Сообщений: 7257
Награды: 30
Репутация: 3313
Статус: Offline
В гуиМенеджере сделай AdjustCurrentHealth() статичным.

X.cor.R (Prologue)
 
СообщениеВ гуиМенеджере сделай AdjustCurrentHealth() статичным.

Автор - Левша
Дата добавления - 15 Авг 2014 в 13:00
ThierryHДата: Пт, 15 Авг 2014, 13:34 | Сообщение # 7
Нет аватара
 
Сообщений: 12
Награды: 0
Репутация: 0
Статус: Offline
Не помогает, в этом случае появляется еще 7 таких же ошибок для currentHealth, maxHEalth и barLength.
Посмотрите, пож-та, на весь код:
GUIManager:
Код

public class GUIManager : MonoBehaviour  
{
  public float currentHealth = 100f;
  public int maxHealth = 100;

  public float currentStamina = 100f;
  public int maxStamina = 100;

  public float barLength = 0.0f;

  //  public Texture2D HP;
  public CharacterMotor chMotor;   

  void Start()
  {

   barLength = Screen.width / 8;

   chMotor = GetComponent<CharacterMotor>();
  }

  void Update()
  {
   AdjustCurrentHealth(0);
   CharacterController chController = GetComponent<CharacterController>();

   if(chController.velocity.magnitude > 0 && Input.GetKey(KeyCode.LeftShift))
   {
    currentStamina -= Time.deltaTime * 10;
    chMotor.movement.maxForwardSpeed = 10;
    chMotor.movement.maxSidewaysSpeed = 10;
   }
   else
   {
    chMotor.movement.maxForwardSpeed = 6;
    chMotor.movement.maxSidewaysSpeed = 6;
   }

   if(chController.velocity.magnitude == 0 && (currentStamina >= 0))
   {
    currentStamina += Time.deltaTime * 2;
   }

   if(chController.velocity.magnitude > 0 && Input.GetKey(KeyCode.LeftShift) && currentStamina <= 0)
   {
    chMotor.movement.maxForwardSpeed = 6;
    chMotor.movement.maxSidewaysSpeed = 6;
   }

   if(currentStamina >= maxStamina)
   {
    currentStamina = maxStamina;
   }
   if(currentStamina <= 0)
   {
    currentStamina = 0;
   }
  }

  void OnGUI()
  {
   GUI.Box(new Rect(5, 30, 40, 20), "HP");
   GUI.Box(new Rect(5, 50, 40, 20), "Stamina");

   GUI.Box(new Rect(45, 30, barLength, 20), currentHealth.ToString("0") + "/" + maxHealth);
   GUI.Box(new Rect(45, 50, barLength, 20), currentStamina.ToString("0") + "/" + maxStamina);
  }

  static void AdjustCurrentHealth(int adj)
  {
   currentHealth += adj;

   if(currentHealth >= maxHealth)
   {
    currentHealth = maxHealth;
   }
   if(currentHealth <= 0)
   {
    currentHealth = 0;
   }
   // healthBarLength = (Screen.width /8) * (curHealth / (float)maxHealth); // The full length of the bar * % of cur health.
   barLength = (Screen.width / 8) * (currentHealth / (float)maxHealth);
  }
}


И Heal:
Код

public class Heal : MonoBehaviour  
{  
  public GUIManager gm;

  void OnTriggerEnter(Collider col)
  {
   GUIManager gm = GameObject.Find("First Person Controller").GetComponent<GUIManager>();

   GUIManager.AdjustCurrentHealth(20);
   Destroy(gameObject);
  }
}

Добавлено (15 Авг 2014, 13:34)
---------------------------------------------
разобрался, переменные также сделал static. Теперь работает.

Вот только подскажите, теперь нельзя менять переменные health в инспекторе. Как это поправить?

 
СообщениеНе помогает, в этом случае появляется еще 7 таких же ошибок для currentHealth, maxHEalth и barLength.
Посмотрите, пож-та, на весь код:
GUIManager:
Код

public class GUIManager : MonoBehaviour  
{
  public float currentHealth = 100f;
  public int maxHealth = 100;

  public float currentStamina = 100f;
  public int maxStamina = 100;

  public float barLength = 0.0f;

  //  public Texture2D HP;
  public CharacterMotor chMotor;   

  void Start()
  {

   barLength = Screen.width / 8;

   chMotor = GetComponent<CharacterMotor>();
  }

  void Update()
  {
   AdjustCurrentHealth(0);
   CharacterController chController = GetComponent<CharacterController>();

   if(chController.velocity.magnitude > 0 && Input.GetKey(KeyCode.LeftShift))
   {
    currentStamina -= Time.deltaTime * 10;
    chMotor.movement.maxForwardSpeed = 10;
    chMotor.movement.maxSidewaysSpeed = 10;
   }
   else
   {
    chMotor.movement.maxForwardSpeed = 6;
    chMotor.movement.maxSidewaysSpeed = 6;
   }

   if(chController.velocity.magnitude == 0 && (currentStamina >= 0))
   {
    currentStamina += Time.deltaTime * 2;
   }

   if(chController.velocity.magnitude > 0 && Input.GetKey(KeyCode.LeftShift) && currentStamina <= 0)
   {
    chMotor.movement.maxForwardSpeed = 6;
    chMotor.movement.maxSidewaysSpeed = 6;
   }

   if(currentStamina >= maxStamina)
   {
    currentStamina = maxStamina;
   }
   if(currentStamina <= 0)
   {
    currentStamina = 0;
   }
  }

  void OnGUI()
  {
   GUI.Box(new Rect(5, 30, 40, 20), "HP");
   GUI.Box(new Rect(5, 50, 40, 20), "Stamina");

   GUI.Box(new Rect(45, 30, barLength, 20), currentHealth.ToString("0") + "/" + maxHealth);
   GUI.Box(new Rect(45, 50, barLength, 20), currentStamina.ToString("0") + "/" + maxStamina);
  }

  static void AdjustCurrentHealth(int adj)
  {
   currentHealth += adj;

   if(currentHealth >= maxHealth)
   {
    currentHealth = maxHealth;
   }
   if(currentHealth <= 0)
   {
    currentHealth = 0;
   }
   // healthBarLength = (Screen.width /8) * (curHealth / (float)maxHealth); // The full length of the bar * % of cur health.
   barLength = (Screen.width / 8) * (currentHealth / (float)maxHealth);
  }
}


И Heal:
Код

public class Heal : MonoBehaviour  
{  
  public GUIManager gm;

  void OnTriggerEnter(Collider col)
  {
   GUIManager gm = GameObject.Find("First Person Controller").GetComponent<GUIManager>();

   GUIManager.AdjustCurrentHealth(20);
   Destroy(gameObject);
  }
}

Добавлено (15 Авг 2014, 13:34)
---------------------------------------------
разобрался, переменные также сделал static. Теперь работает.

Вот только подскажите, теперь нельзя менять переменные health в инспекторе. Как это поправить?


Автор - ThierryH
Дата добавления - 15 Авг 2014 в 13:34
AltairДата: Пт, 15 Авг 2014, 14:57 | Сообщение # 8
Unity 3D PRO Developer
 
Сообщений: 758
Награды: 6
Репутация: 195
Статус: Offline
Цитата ThierryH ()
Вот только подскажите, теперь нельзя менять переменные health в инспекторе. Как это поправить?

Поменяй слово static на public.
 
Сообщение
Цитата ThierryH ()
Вот только подскажите, теперь нельзя менять переменные health в инспекторе. Как это поправить?

Поменяй слово static на public.

Автор - Altair
Дата добавления - 15 Авг 2014 в 14:57
ThierryHДата: Пт, 15 Авг 2014, 15:23 | Сообщение # 9
Нет аватара
 
Сообщений: 12
Награды: 0
Репутация: 0
Статус: Offline
если оставить только public, то будет таже ошибка (Ошибка: error CS0120: An object reference is required to access non-static member `GUIManager.AdjustCurrentHealth(int)' ).
Может еще как можно?
 
Сообщениеесли оставить только public, то будет таже ошибка (Ошибка: error CS0120: An object reference is required to access non-static member `GUIManager.AdjustCurrentHealth(int)' ).
Может еще как можно?

Автор - ThierryH
Дата добавления - 15 Авг 2014 в 15:23
HunjethДата: Пт, 15 Авг 2014, 18:10 | Сообщение # 10
 
Сообщений: 354
Награды: 1
Репутация: 112
Статус: Offline
Вот так:
Поменяй
Код

GUIManager.AdjustCurrentHealth(20);   
на
gm.AdjustCurrentHealth(20);

Код

static void AdjustCurrentHealth(int adj)   
на
public void AdjustCurrentHealth(int adj)


Сообщение отредактировал Hunjeth - Пт, 15 Авг 2014, 18:11
 
СообщениеВот так:
Поменяй
Код

GUIManager.AdjustCurrentHealth(20);   
на
gm.AdjustCurrentHealth(20);

Код

static void AdjustCurrentHealth(int adj)   
на
public void AdjustCurrentHealth(int adj)

Автор - Hunjeth
Дата добавления - 15 Авг 2014 в 18:10
korveenДата: Ср, 20 Авг 2014, 17:02 | Сообщение # 11
Победитель конкурса GCC
 
Сообщений: 183
Награды: 2
Репутация: 45
Статус: Offline
Переписанные скрипты JS на C#
ТЫК
замени скрипты, должно сработать


 
СообщениеПереписанные скрипты JS на C#
ТЫК
замени скрипты, должно сработать

Автор - korveen
Дата добавления - 20 Авг 2014 в 17:02
Форум Игроделов » UNITY3D » ОБЩИЕ ВОПРОСЫ » Не могу получить доступ к JS скрипту из С#
  • Страница 1 из 1
  • 1
Поиск:
Загрузка...

Game Creating CommUnity © 2009 - 2024