Не могу получить доступ к 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