Вопрос-[ответ] по Unity
| |
QWER56 | Дата: Понедельник, 09 Августа 2010, 10:58 | Сообщение # 1 |
старожил
Сейчас нет на сайте
| Вопрос-[Ответ] по Unity3d
База скриптов Unity3d Курс Уроков по Unity 3D от Alcatraz
ConsMark - поисковик по интернет магазинам.
Сообщение отредактировал QWER56 - Вторник, 26 Июля 2011, 20:54 |
|
| |
EchoIT | Дата: Среда, 02 Июля 2014, 20:16 | Сообщение # 6201 |
старожил
Сейчас нет на сайте
| Adom, ты сначала пойми, что это такое, а потом у тебя отпадут вопросы вроде того, что ты задал сейчас.
Долгожданный анонсик: State of War
|
|
| |
Adom | Дата: Среда, 02 Июля 2014, 20:33 | Сообщение # 6202 |
Печенька!
Сейчас нет на сайте
| EchoIT, Единственное что я знаю (может и не правильно.) Это то что RPC это функция которая посылает сообщения всем объектам.
|
|
| |
allods | Дата: Среда, 02 Июля 2014, 21:47 | Сообщение # 6203 |
почти ветеран
Сейчас нет на сайте
| Насколько я знаю это не функция , RPC просто ставится перед функцией и отсылает данные всем игрокам, или выбранным то что произошло в этой функции. По крайней мере мне так помнится
|
|
| |
Adom | Дата: Среда, 02 Июля 2014, 22:47 | Сообщение # 6204 |
Печенька!
Сейчас нет на сайте
| Извините что я такой тупой но не могли бы вы показать на примере и расписать ? Код /*Created By Adom*/ using UnityEngine; using System.Collections;
public class HealthBox : MonoBehaviour { public float CurHealth=100; public float MaxHealth=100; public bool Damage; // Use this for initialization public void Start () { } // Update is called once per frame public void Update () { if(networkView.isMine){ if (CurHealth <= 0) { StartCoroutine(Dead()); } } } void OnTriggerEnter(){ if(GameObject.FindWithTag("Bullet")){ DamagePlayer(); } } [RPC] public void DamagePlayer(){ if(CurHealth>0){ CurHealth-=Random.Range(15,20); } } public void OnGUI(){ if(networkView.isMine){ GUI.Label(new Rect(100,700,150,50),CurHealth+"/"+MaxHealth); GUI.Box(new Rect(100,700,100,20),""); } } IEnumerator Dead(){ yield return new WaitForSeconds(0.1f); // продолжить примерно через 100ms Network.Destroy (gameObject); GameObject.FindWithTag ("Server").GetComponent<SpawnScript> ().NewPlayer (); } }
|
|
| |
allods | Дата: Четверг, 03 Июля 2014, 00:48 | Сообщение # 6205 |
почти ветеран
Сейчас нет на сайте
| я не знаю как там в unitynetwork а в фотоне так
Код [RPC] public void takeDMG(float amt) { hp -= amt; if(hp<=0) { Die(); } }
Код h.GetComponent<PhotonView>().RPC("takeDMG",PhotonTargets.All, dmg); "h" обжект у которого надо отнять хп
Примерно так наверное и у юнити сервера , сказать не могу
Добавлено (03.07.2014, 00:12) --------------------------------------------- Кто может сказать, как через скрипт узнать какая анимация проигрывается в macanim. В legacy просто через animation а в меканим?
Добавлено (03.07.2014, 00:48) --------------------------------------------- animator.GetCurrentAnimatorStateInfo(int layer)
Сообщение отредактировал allods - Четверг, 03 Июля 2014, 00:49 |
|
| |
lentinant | Дата: Четверг, 03 Июля 2014, 04:04 | Сообщение # 6206 |
ленивый программист
Сейчас нет на сайте
| Цитата WPhoeniXW ( ) Да ну не может быть... Мне, кажется, ты что-то путаешь. Я думаю это из-за компиляции под Андроид. Если скомпилировать под Web, всё приложение весит 789 КБ Я тебе вот такую аналогию проведу. Есть игровой автомат. Он автономно воспроизводит одну игру, но имеет большой размер. И есть компакт-диск с игрой и компьютер, который эту игру производит. Сам по себе компакт-диск маленький, но без компа он ничего не стоит. По аналогии с юнити - автономная игра вмещает в себя движок, поэтому весит так много. web-версия же просто является набором ресурсов, сам движок находится у тебя на компе в виде плагина Unity Web Player.
Когда-то тут будут ссылки на крутые проекты. Или нет.
|
|
| |
lakoris | Дата: Четверг, 03 Июля 2014, 05:36 | Сообщение # 6207 |
постоянный участник
Сейчас нет на сайте
| lentinant, все правильно
|
|
| |
iOne | Дата: Четверг, 03 Июля 2014, 10:13 | Сообщение # 6208 |
был не раз
Сейчас нет на сайте
| Помогите разобраться где ошибка.
Есть скрипт на объекте, в нём переменная:
Код //Радиус объекта, ближе нельзя приближаться public float Radius = 15f; Пытаюсь получить переменную из другого скрипта:
Код if (Input.GetMouseButton(0)) { ray = UnityEngine.Camera.mainCamera.ScreenPointToRay(Input.mousePosition); if (Physics.Raycast(ray, out hit, 10000.0f)) { target = hit.transform.position; //point; heightPlayer = hit.collider.transform.GetComponents<PlanetInfo>().Radius; } } Переменная heightPlayer тоже float и сейчас задана жестко. Если убрать строчку: Код heightPlayer = hit.collider.transform.GetComponents<PlanetInfo>().Radius; Всё работает. При запуске выдаёт ошибку: Код Assets/Scripts/MovePlayer.cs(46,99): error CS1061: Type `PlanetInfo[]' does not contain a definition for `Radius' and no extension method `Radius' of type `PlanetInfo[]' could be found (are you missing a using directive or an assembly reference?)
|
|
| |
Adom | Дата: Четверг, 03 Июля 2014, 10:48 | Сообщение # 6209 |
Печенька!
Сейчас нет на сайте
| allods, В Unity наверное почти так-же сейчас попробую )
|
|
| |
xMoonGuarDx | Дата: Четверг, 03 Июля 2014, 10:55 | Сообщение # 6210 |
участник
Сейчас нет на сайте
| iOne, посмотри, что бы твоя переменная Radius была в классе PlanetInfo (если это класс, а не интерфейс или enum), так же проверь область видимости, т.е. что твой скрипт знает о существовании этого класса.
|
|
| |
iOne | Дата: Четверг, 03 Июля 2014, 11:31 | Сообщение # 6211 |
был не раз
Сейчас нет на сайте
| Код public class PlanetInfo : MonoBehaviour {
//Радиус объекта, ближе нельзя приближаться public float Radius = 50f; }
Цитата xMoonGuarDx ( ) так же проверь область видимости, т.е. что твой скрипт знает о существовании этого класса. Можно подробнее, не совсем понял как это сделать.
Ещё один вопрос: как определить радиус коллаидра выбранного объекта?
Сообщение отредактировал iOne - Четверг, 03 Июля 2014, 11:33 |
|
| |
NEBR | Дата: Четверг, 03 Июля 2014, 12:33 | Сообщение # 6212 |
почти ветеран
Сейчас нет на сайте
| Цитата iOne ( ) как определить радиус коллаидра выбранного объекта?
Вот, например, коллайдер стандартного куба. Эту величину можно изменять
А из скрипта обратится к ней можно так Код
public BoxCollider boxCollider;
void Start() { Debug.Log(boxCollider.size.x); }
Если объект не куб, а любой другой - делается аналогично, только вместо size будет radius
King Size #Gamiron12
Сообщение отредактировал NEBR - Четверг, 03 Июля 2014, 12:35 |
|
| |
Adom | Дата: Четверг, 03 Июля 2014, 12:38 | Сообщение # 6213 |
Печенька!
Сейчас нет на сайте
| allods, Спасибо твой вариант помог ). И все-таки задам старый вопрос. Как сделать скачивание целой папки ? т.е что-бы при нажатии кнопки скачивалась папка и был выбор пути куда ее кидать ?
Сообщение отредактировал Adom - Четверг, 03 Июля 2014, 12:38 |
|
| |
lentinant | Дата: Четверг, 03 Июля 2014, 12:55 | Сообщение # 6214 |
ленивый программист
Сейчас нет на сайте
| iOne, ты используешь GetComponents - этот метод возвращает МАССИВ. В ошибке четко сказано - ты получаешь не один компонент, а массив, и пытаешься получить с этого массива значение, как с одного компонента. Замени GetComponents на GetComponent.
Когда-то тут будут ссылки на крутые проекты. Или нет.
|
|
| |
iOne | Дата: Четверг, 03 Июля 2014, 13:37 | Сообщение # 6215 |
был не раз
Сейчас нет на сайте
| Цитата NEBR ( ) А из скрипта обратится к ней можно так Если объект не куб, а любой другой - делается аналогично, только вместо size будет radius Спасибо, пригодится.
Цитата lentinant ( ) iOne, ты используешь GetComponents - этот метод возвращает МАССИВ. В ошибке четко сказано - ты получаешь не один компонент, а массив, и пытаешься получить с этого массива значение, как с одного компонента. Замени GetComponents на GetComponent. Огромное спасибо. Не понял что он про массив ругается. Теперь всё работает.
Ну и крайний вопрос на сегодня: При выполнении команды Код Debug.Log("Радиус планеты " + heightPlayer); Русские символы отображаются не корректно, понятно что кодировка не та, но где её поменять?
Сообщение отредактировал iOne - Четверг, 03 Июля 2014, 13:41 |
|
| |
allods | Дата: Четверг, 03 Июля 2014, 14:18 | Сообщение # 6216 |
почти ветеран
Сейчас нет на сайте
| Кто может помочь, При входе в триггер я изменяю некоторые переменные у обжекта который входит. Мне нужно изменить только раз, потом чтоб на него этот триггер больше не действовал.
Для этого я создал массив . Идея, заполнять массив теми обжектами, которые входят в триггер . Потом проверять обжект который входит в триггер, если он есть в массиве, то ничего не делать.
Нужно занести этот обжект только раз а массив, если его там еще нет. Вроде все просто, при входе в триггер проверять есть обжект или нет, но я не догоняю как ?
if(players[i]!=other.collider.gameObjecl) заполняет с каждым входом в триггер новый массив который не являются other.collider.gameObjecl. Как проверять правильно кто может сказать ?
|
|
| |
NEBR | Дата: Четверг, 03 Июля 2014, 15:32 | Сообщение # 6217 |
почти ветеран
Сейчас нет на сайте
| allods, попробуй стринговыми переменными. Велосипед, конечно, но, думаю, работать будет. Или по именам, например
if(players[i].name != other.collider.gameObject.name) { //добавляем объект в массив }
King Size #Gamiron12
|
|
| |
allods | Дата: Четверг, 03 Июля 2014, 16:21 | Сообщение # 6218 |
почти ветеран
Сейчас нет на сайте
| если массив пустой то ругается что нету объекта , то есть ничего не работает. А если сравнивать только с не пустыми массивами то тоже не работает так как они еще пустые, кольцо получается Добавлено (03.07.2014, 16:08) --------------------------------------------- если заполнить массивы другими объектами (любыми) то все массивы заполняются объектом который зашел в триггер, поскольку имя его не равняется именам других Добавлено (03.07.2014, 16:21) --------------------------------------------- В общем что я хочу сделать .
Персонаж делает широкий удар мечом, при срабатывании триггера меча с игроком отнимает у них ХП. Дело в том что иногда игрок может войти несколько раз в триггер меча, а отнять ХП нужно только один раз за удар, не важно сколько раз сработал триггер .
На мече висит триггер и скрипт, при входе в триггер проверяется игрок ли это. Если игрок то отнимаем ХП.
Удар широкий и наносит урон всем игрокам до кого прикоснется, если игрок перемещается то возможно что меч коснется 2 или более раз одного и того же игрока(это мне надо избежать).
Получается , я делаю массив куда заношу игроков в которых попал меч, и проверяю является ли игрок одним из тех в кого он попал. Если еще не попадал то отнимаем ХП. После завершения удара я отчищаю все массивы .
|
|
| |
lentinant | Дата: Четверг, 03 Июля 2014, 16:28 | Сообщение # 6219 |
ленивый программист
Сейчас нет на сайте
| allods, пользуйся списками (List). Проверка, есть ли элемент в списке, проводится методом Contains, который возвращает соответственное логическое значение. Добавлено (03.07.2014, 16:28) ---------------------------------------------
Цитата allods ( ) если массив пустой то ругается что нету объекта , то есть ничего не работает. А если сравнивать только с не пустыми массивами то тоже не работает так как они еще пустые, кольцо получается Какая-то высосанная с пальца проблема. Массив пустой? Значит, там точно нет твоего объекта (ваш кеп), и ты можешь смело добавлять его в массив.
Когда-то тут будут ссылки на крутые проекты. Или нет.
|
|
| |
allods | Дата: Четверг, 03 Июля 2014, 16:31 | Сообщение # 6220 |
почти ветеран
Сейчас нет на сайте
| lentinant, ты про Array? Добавлено (03.07.2014, 16:31) ---------------------------------------------
Цитата allods ( ) Какая-то высосанная с пальца проблема. Массив пустой? Значит, там точно нет твоего объекта (ваш кеп), и ты можешь смело добавлять его в массив. Я сказал что заполняет весь массив сразу , а потом и эти все уже заполняются другим объектом
|
|
| |
|