Вопрос-[ответ] по Unity
| |
QWER56 | Дата: Понедельник, 09 Августа 2010, 10:58 | Сообщение # 1 |
старожил
Сейчас нет на сайте
| Вопрос-[Ответ] по Unity3d
База скриптов Unity3d Курс Уроков по Unity 3D от Alcatraz
ConsMark - поисковик по интернет магазинам.
Сообщение отредактировал QWER56 - Вторник, 26 Июля 2011, 20:54 |
|
| |
Labirintik | Дата: Среда, 11 Декабря 2013, 19:03 | Сообщение # 5121 |
постоянный участник
Сейчас нет на сайте
| Цитата allods ( ) Без сида они меняются , но проблема в том что они могут быть одинаковые. Под одинаковыми я имею в виду то что рандом1 = рандом2 или с рандом3 а мне нужно обязательно разное значение Может проверять если i = i-1, то опять ставить рандом число.
|
|
| |
Adom | Дата: Среда, 11 Декабря 2013, 19:05 | Сообщение # 5122 |
Печенька!
Сейчас нет на сайте
| Блин протупил =(. Теперь все.
|
|
| |
allods | Дата: Среда, 11 Декабря 2013, 20:23 | Сообщение # 5123 |
почти ветеран
Сейчас нет на сайте
| Цитата NEBR ( ) но думаю, это не лучший способ. решил таким способом, кидать в update
Код Random.seed = Random.Range(42,9000); for (var i = 0; i < cM; i++) { for (var i2 = 0; i2 < cM; i2++) { if(charRand[i]==charRand[i2] && i!=i2) { charRand[i] = Random.Range(0,8); } } } будет рандомить пока не будут все разные
Сообщение отредактировал allods - Среда, 11 Декабря 2013, 20:24 |
|
| |
lentinant | Дата: Среда, 11 Декабря 2013, 23:13 | Сообщение # 5124 |
ленивый программист
Сейчас нет на сайте
| Есть такая штука, как списки. То же, что и массивы, только позволяет удобно удалять, добавлять и искать элементы. Можно банально сделать список с 9 элементов, с значениями от 0 до 8, брать индекс Random.Range(0, list.Count) (от 0 до последнего элемента списка), брать соответственный элемент списка в массив charRand, а из листа удалять. Таким образом, если мы получаем по запросу от 0 до 8 рандомное число 3, то у нас элемент списка с числом 2. Следующий рандом индекса будет от 0 до 7, и полученный элемент списка точно не будет 2.
Когда-то тут будут ссылки на крутые проекты. Или нет.
|
|
| |
allods | Дата: Среда, 11 Декабря 2013, 23:28 | Сообщение # 5125 |
почти ветеран
Сейчас нет на сайте
| Не совсем так, рандом от 0 до 8, выпал4. Потом ты как будешь делать рандом? от 0 до 4 и от 5 до 8? я не догоняю
|
|
| |
lentinant | Дата: Четверг, 12 Декабря 2013, 00:33 | Сообщение # 5126 |
ленивый программист
Сейчас нет на сайте
| Цитата allods ( ) Не совсем так, рандом от 0 до 8, выпал4. Потом ты как будешь делать рандом? от 0 до 4 и от 5 до 8? я не догоняю Да нет же. Мы берем случайный элемент списка. В списке каждый элемент - число от 0 до 8 (то есть, первый элемент - 0, второй - 1, третий - 2, и т.д.). С помощью Random.Range(0, list.Count) мы генерируем число, которое будет служить индексом для выбора элемента списка. Не самого числа, а именно элемента списка. В начале оно у нас может быть от 0 до 8. Припустим, выпало число 1, значит, мы берем второй элемент списка, число 1. После чего этот элемент удаляем. Длина списка становится меньше на единицу, а сам список теперь имеет вид 0, 2, 3, 4... Теперь мы получаем индекс от 0 до 7. И если нам опять попадет 1, то этот индекс будет отвечать уже элементу списка, содержащему 2, так как элемент списка, содержащий 1, мы уже удалили. И т.д..Добавлено (12.12.2013, 00:33) --------------------------------------------- Грубо говоря, это если у тебя числа были написаны на бумажках, а бумажки были в какой-то вазочке. Ты вытаскиваешь из вазы случайную бумажку, и следующий раз, ты уже не можешь ее вытащить, так как ее там уже нет.
Когда-то тут будут ссылки на крутые проекты. Или нет.
|
|
| |
allods | Дата: Четверг, 12 Декабря 2013, 07:25 | Сообщение # 5127 |
почти ветеран
Сейчас нет на сайте
| Идея очень хорошая, я сперва не так понял, но есть но Все 4 или более рандомов рандомятся одновременно , получится что если 3 или более рандомнят на скажем 2 в один момент, то все 3 так и останутся с 2, все ровно придется перепроверять
Сообщение отредактировал allods - Четверг, 12 Декабря 2013, 12:58 |
|
| |
Adom | Дата: Четверг, 12 Декабря 2013, 14:53 | Сообщение # 5128 |
Печенька!
Сейчас нет на сайте
| Эмм поможете написать нормальный контроллер ? Я сделал но коряво. Вот мое детище ! Код using UnityEngine; using System.Collections;
public class ControllerD2 : MonoBehaviour { public Transform Player; public float Speed = 1.0f; public MouseLook cam; public Camera cam2; public float Gravity; private float timeout; public float footstepTime = 0.7f; public AudioClip step; public AudioClip step2; public AudioClip step3; public AudioClip step4; public float a = 100; public float b = 20; public Transform cube; private RaycastHit Hit; public AudioClip cel; // Use this for initialization void Start () { } void Update(){ Vector3 Direction = Player.TransformDirection(Vector3.down); if(Physics.Raycast(Player.position, Direction, out Hit,10000f)){ } timeout += Time.deltaTime; if(Input.GetKeyDown(KeyCode.Mouse1)){ cam.sensitivityX = 2; cam.sensitivityY = 2; cam2.fieldOfView = 25; audio.PlayOneShot(cel); }else{ if(Input.GetKeyUp(KeyCode.Mouse1)){ audio.PlayOneShot(cel); cam2.fieldOfView = 65; cam.sensitivityX = 10; cam.sensitivityY = 10; } } { if(Input.GetKey(KeyCode.W)){ transform.position += transform.forward * 0.7f; } if(Input.GetKey(KeyCode.S)){ transform.position -= transform.forward * 0.7f; } if(Input.GetKey(KeyCode.D)){ transform.position += transform.right * 0.7f; } if(Input.GetKey(KeyCode.A)){ transform.position -= transform.right * 0.7f; } if(Input.GetKey(KeyCode.Space)){ Gravity +=0.1f; transform.position += transform.up * Speed; } if(Input.GetKey(KeyCode.LeftShift)){ transform.position += transform.forward * 2; } } } // Update is called once per frame void FixedUpdate () { transform.position -= transform.up * Time.deltaTime; if(Input.GetKey(KeyCode.W)&timeout>=Speed && Hit.collider.name == "Dirt"){//это timeout = 0; audio.PlayOneShot(step); }else{ if(Input.GetKey(KeyCode.W)&timeout>=Speed && Hit.collider.name == "Grass"){ timeout = 0; audio.PlayOneShot(step2); }else{ if(Input.GetKey(KeyCode.W)&timeout>=Speed && Hit.collider.name == "GoodDirt"){ timeout = 0; audio.PlayOneShot(step3); }else{ if(Input.GetKey(KeyCode.W)&timeout>=Speed && Hit.collider.name == "Cliff"){ timeout = 0; audio.PlayOneShot(step4); } } } } } }
|
|
| |
NEBR | Дата: Четверг, 12 Декабря 2013, 15:02 | Сообщение # 5129 |
почти ветеран
Сейчас нет на сайте
| Adom, у меня есть отличный контроллер, писал его с полгода назад. С другого компа достану и вышлю тебе ближе к вечеру, там шаги по разным поверхностям, приседания, бег (звук шагов тоже убыстряется при этом), прыжки в воду (всплеск), плавание (под водой, над водой) со звуками гребков и прочие фишки. Разберешься в нем, может почерпнешь что нибудь для своего
King Size #Gamiron12
|
|
| |
Adom | Дата: Четверг, 12 Декабря 2013, 15:04 | Сообщение # 5130 |
Печенька!
Сейчас нет на сайте
| NEBR, ооо спасибо =) Буду очень признателен ). И плюс в репу тебе )
|
|
| |
allods | Дата: Четверг, 12 Декабря 2013, 15:38 | Сообщение # 5131 |
почти ветеран
Сейчас нет на сайте
| Цитата NEBR ( ) у меня есть отличный контроллер А волнового алгоритма у тебя не завалялось ?
Пытаюсь сохранить массивы и загрузить потом
Код PlayerPrefs.SetInt("caseBag"+[i],caseBag[i]); PlayerPrefs.SetString("caseItemName"+[i],caseItemName[i]);
а гружу так
Код if(PlayerPrefs.GetInt("caseBag"+[i])) caseBag[i]=PlayerPrefs.GetInt("caseBag"+[i]); if(PlayerPrefs.GetString("caseItemName"+[i])) caseItemName[i]=PlayerPrefs.GetString("caseItemName"+[i]);
но чот пусто
Добавлено (12.12.2013, 15:38) --------------------------------------------- ох лол сколько муки из за этого, надо вот так делать
Код if(PlayerPrefs.GetInt(""+caseBag+"["+i+"]")) caseBag[i]=PlayerPrefs.GetInt(""+caseBag+"["+i+"]"); if(PlayerPrefs.GetString(""+caseItemName+"["+i+"]")) caseItemName[i]=PlayerPrefs.GetString(""+caseItemName+"["+i+"]");
и тоже самое для сохранения
Сообщение отредактировал allods - Четверг, 12 Декабря 2013, 15:39 |
|
| |
NEBR | Дата: Четверг, 12 Декабря 2013, 16:07 | Сообщение # 5132 |
почти ветеран
Сейчас нет на сайте
| allods, только плюсы надо было добавить? Хорошо что ты разобрался, мне скоро предстоит то же самое, искал бы. А волновые алгоритмы... опиши подробнее, что нужно? )
King Size #Gamiron12
Сообщение отредактировал NEBR - Четверг, 12 Декабря 2013, 16:08 |
|
| |
allods | Дата: Четверг, 12 Декабря 2013, 19:30 | Сообщение # 5133 |
почти ветеран
Сейчас нет на сайте
| создаю 2йной массив
var point:int[ , ];
потом хочу вписать в него
point[x ,y ]=1;
но получаю ошибку
A null value was found where an object instance was required
что делать
Добавлено (12.12.2013, 16:09) --------------------------------------------- Цитата NEBR ( ) только плюсы надо было добавить? да для [ ] плюсы и в +" "+ вот так+ "["+ иначе скобки не засчитает =) а я всю ночь вчера возился! толкь вот недавно подумал что может скобки не прописываются и что может их надо в ручную вписывать
Добавлено (12.12.2013, 16:12) --------------------------------------------- Цитата allods ( ) А волновые алгоритмы... опиши подробнее, что нужно? ) Да хоть полу готовый, как примерно в героях3 в бою. В инете для юнити вообще 0 по волновому. А сам вообще не догоняю
Добавлено (12.12.2013, 16:48) --------------------------------------------- короче еще одна заметочка
Код caseBag[i]=PlayerPrefs.GetInt("caseBag"+"["+i+"]"); а не Код caseBag[i]=PlayerPrefs.GetInt(""+caseBag+"["+i+"]");
Добавлено (12.12.2013, 18:48) --------------------------------------------- Никто не может помочь с двумерным массивом ? как его создавать и заполнять?
Добавлено (12.12.2013, 19:30) --------------------------------------------- кое как нашел на англоязычном форуме
Код public var caseItemStat:int[,] = new int[10,10];
Сообщение отредактировал allods - Четверг, 12 Декабря 2013, 19:32 |
|
| |
NEBR | Дата: Суббота, 14 Декабря 2013, 09:03 | Сообщение # 5134 |
почти ветеран
Сейчас нет на сайте
| Adom, извини, забыл позавчера контроллер найти. Выкладываю сегодня, как говорится, лучше поздно... Вообщем на сцене стандартный юнити контроллер от первого лица со всеми его скриптами + я добавил некоторые, вот один из них, для звуков. Я заккоментил его, будут вопросы спрашивай.
Код var FootSteps1 : AudioClip []; // в этот массив назначаем звуки шагов по земле, например var FootSteps2 : AudioClip []; // в этот - звуки шагов по дереву var goWater : AudioClip; var StepTime : float = 0; // Время шага. var audioSource : AudioSource; var stepping : boolean = false; // Шагаем? По умолчанию нет. var controller : CharacterController; var type : boolean = false; function Awake() { controller = GetComponent(CharacterController); }
function Update () { var hit : RaycastHit; if (Physics.Raycast (transform.position, -Vector3.up, hit)) { // выпускаем луч от игрока вниз if ((hit.collider.name == "Terrain") || (hit.collider.name == "water")) { // если луч уперся в терраин или в воду type = false; } else { type = true; } } if(controller.isGrounded){ // если персонаж на земле тогда... if(!stepping){ // если персонаж не шагает тогда...
if (Input.GetButton("Vertical") || Input.GetButton("Horizontal")){ // нажата ли клавиши ходьбы.
if(Input.GetKey(KeyCode.LeftShift)) { //если нажата клавиша бега StepTime = 0.3; // время между звуками шагов делаем 0.3с } else if(Input.GetKey(KeyCode.LeftControl)) { // если нажали приседание StepTime = 0.8; // время между шагами длаем 0.8с } else { StepTime = 0.5; // если нажата просто клавиша ходьбы, время шага 0.5 } footfall(); } } } }
function footfall(){ stepping = true; if(type){ audioSource.PlayOneShot (FootSteps2[Random.Range(0,FootSteps1.length)]); yield WaitForSeconds (StepTime); stepping = false; } else { audioSource.PlayOneShot (FootSteps1[Random.Range(0,FootSteps1.length)]); yield WaitForSeconds (StepTime); stepping = false; } }
function GoWater() { // эта функция вызывалась из другого скрипта. Она проигрывает звук прыжка в воду, всплеск audioSource.PlayOneShot (goWater); }
здесь можно скачать мою сценку с этим скриптом (60 мб)
King Size #Gamiron12
Сообщение отредактировал NEBR - Суббота, 14 Декабря 2013, 09:08 |
|
| |
NEBR | Дата: Суббота, 14 Декабря 2013, 09:11 | Сообщение # 5135 |
почти ветеран
Сейчас нет на сайте
| Цитата allods ( ) да для [ ] плюсы и в +" "+ вот так+ "["+ иначе скобки не засчитает =) а я всю ночь вчера возился! толкь вот недавно подумал что может скобки не прописываются и что может их надо в ручную вписывать спасибо, возьмем на заметку! Цитата allods ( ) Да хоть полу готовый, как примерно в героях3 в бою. В инете для юнити вообще 0 по волновому. А сам вообще не догоняю коллега реализует поиск пути, посмотри ссылки в его теме, я видел пару интересных
King Size #Gamiron12
Сообщение отредактировал NEBR - Суббота, 14 Декабря 2013, 09:16 |
|
| |
Adom | Дата: Суббота, 14 Декабря 2013, 11:56 | Сообщение # 5136 |
Печенька!
Сейчас нет на сайте
| Эмм тут загвоздка одна... Я делаю это все на шарпе и он ругается на AudioSource FootSteps1[];Добавлено (14.12.2013, 11:51) --------------------------------------------- А не все уже разобрался ) Добавлено (14.12.2013, 11:56) --------------------------------------------- Блин опять не получается =( Код using UnityEngine; using System.Collections;
public class ControllerD : MonoBehaviour { public Transform Player; private RaycastHit Hit; public AudioClip cel; public float StepTime = 0; public bool stepping = false; CharacterController controller; bool type = false; AudioSource audioSource; public AudioClip [] foot1; public AudioClip [] foot2; // Use this for initialization void Awake(){ controller = GetComponent<CharacterController>(); } void Start () { } void Update(){ Vector3 Direction = Player.TransformDirection(Vector3.down); if(Physics.Raycast(Player.position, Direction, out Hit,10000f)){ } if (Input.GetButton("Vertical") || Input.GetButton("Horizontal")){ if(Input.GetKey(KeyCode.LeftShift)) { //если нажата клавиша бега StepTime = 0.3f; // время между звуками шагов делаем 0.3fс } else if(Input.GetKey(KeyCode.LeftControl)) { // если нажали приседание StepTime = 0.8f; // время между шагами длаем 0.8fс }else { StepTime = 0.5f; // если нажата просто клавиша ходьбы, время шага 0.5f } footfall(); } } void footfall(){ stepping = true; if(type){ audioSource.PlayOneShot(foot2[Random.Range(0,foot1.length)]);// На это ругается =( } } }
|
|
| |
allods | Дата: Суббота, 14 Декабря 2013, 16:38 | Сообщение # 5137 |
почти ветеран
Сейчас нет на сайте
| скопируй ошибку и кинь сюда, а то я свой волшебный шар и кофейную гущу оставил дома
|
|
| |
Adom | Дата: Суббота, 14 Декабря 2013, 16:57 | Сообщение # 5138 |
Печенька!
Сейчас нет на сайте
| allods, =) Окау Их там несколько error CS1061: Type `UnityEngine.AudioClip[]' does not contain a definition for `length' and no extension method `length' of type `UnityEngine.AudioClip[]' could be found (are you missing a using directive or an assembly reference?)
error CS1502: The best overloaded method match for `UnityEngine.Random.Range(float, float)' has some invalid arguments
error CS1503: Argument `#2' cannot convert `object' expression to type `float'
|
|
| |
castielblack | Дата: Суббота, 14 Декабря 2013, 17:11 | Сообщение # 5139 |
почетный гость
Сейчас нет на сайте
| Код audioSource.PlayOneShot(foot2[Random.Range(0,foot1.Length)]); Вот так эта строчка должна выглядеть.
Знания : C#, Lua, C++, Unity, Dreemchest, DirectX 11 Выпущенные проекты : BuildAndRun, Match 3 Cubes
|
|
| |
NEBR | Дата: Суббота, 14 Декабря 2013, 17:13 | Сообщение # 5140 |
почти ветеран
Сейчас нет на сайте
| Adom в C# Length надо писать с большой буквы
King Size #Gamiron12
Сообщение отредактировал NEBR - Суббота, 14 Декабря 2013, 17:13 |
|
| |
|