Результаты поиска
| |
q1w287 | Дата: Понедельник, 08 Августа 2016, 10:12 | Сообщение # 1 | Тема: Видео в Unity под Android |
частый гость
Сейчас нет на сайте
| Есть игра Yumm (вот видео). Это отрендеренное видео используется для персонажа? Как такое можно сделать в Unity на android? Только через Handheld.PlayFullScreenMovie или это не вариант. А может есть другие способы?
|
|
| |
q1w287 | Дата: Вторник, 12 Апреля 2016, 23:53 | Сообщение # 2 | Тема: Расстояние между объектами |
частый гость
Сейчас нет на сайте
| seaman, может что-то посоветуете?
|
|
| |
q1w287 | Дата: Вторник, 12 Апреля 2016, 23:30 | Сообщение # 3 | Тема: Расстояние между объектами |
частый гость
Сейчас нет на сайте
| seaman, обучение на деле лучшее обучение
|
|
| |
q1w287 | Дата: Вторник, 12 Апреля 2016, 19:03 | Сообщение # 4 | Тема: Расстояние между объектами |
частый гость
Сейчас нет на сайте
| Цитата Bizzy ( ) q1w287, Конечно можно, либо создаешь в скрипте хенд статик пременную типа Код public static Vector3 mushrums;
а в скрипте spawnItems пишешь Код
mushrum.gameObject = Instantiate (StealthMush,SpawnPoints[spawnIndex].position, SpawnPoints[spawnIndex].rotation) as GameObject; hand.mushrums = mushrum;
Либо берешь компонент из объекта(можешь просто добавить или искать его) Код
public Vector3 mushrums;
Код
mushrum.gameObject = Instantiate (StealthMush,SpawnPoints[spawnIndex].position, SpawnPoints[spawnIndex].rotation) as GameObject; handGO.GetComponent<hand>().mushrums = mushrum;
что-то не выходит ничего путного мне же надо чтобы в hand вычислялся float distInv исходя из Код Instantiate (StealthMush,SpawnPoints[spawnIndex].position, SpawnPoints[spawnIndex].rotation); что в spawnItems а тут получается ошибка что не может Vector3 работать с position (Type `UnityEngine.Vector3' does not contain a definition for `position') плюс в какую переменную определять mushrum в spawnItems? в public GameObject? а что на него тогда вешать?
|
|
| |
q1w287 | Дата: Пятница, 08 Апреля 2016, 11:10 | Сообщение # 5 | Тема: Расстояние между объектами |
частый гость
Сейчас нет на сайте
| Цитата Bizzy ( ) q1w287, И так, ты берешь координаты префаба(который просто лежит в проекте),а не тот который появляется в игре. в общем думаю так будет правильней:
а может можно как-то передать координаты Instantiate префаба из скрипта "spawnItems" в mushrums скрипта "hand"
|
|
| |
q1w287 | Дата: Четверг, 07 Апреля 2016, 17:38 | Сообщение # 6 | Тема: Расстояние между объектами |
частый гость
Сейчас нет на сайте
| Цитата Bizzy ( ) q1w287, Ну я уж хз что у тя там, выкладывай проект, уже на месте будем разбираться что у тебя там напутано.
вот выложил проект жать надо на иконку руки
|
|
| |
q1w287 | Дата: Четверг, 07 Апреля 2016, 14:04 | Сообщение # 7 | Тема: Расстояние между объектами |
частый гость
Сейчас нет на сайте
| по transform.position координаты совсем другие и у объекта который из префаба, при перемещении, не меняются совсем Добавлено (07 апреля 2016, 14:04) ---------------------------------------------
Цитата Bizzy ( ) q1w287, Он не меняет свою позицию, он создает объект. но у создаваемого объекта должны же меняться координаты
|
|
| |
q1w287 | Дата: Четверг, 07 Апреля 2016, 13:34 | Сообщение # 8 | Тема: Расстояние между объектами |
частый гость
Сейчас нет на сайте
| Цитата Bizzy ( ) q1w287, А может по тому что ты берешь не те объекты? Может сам объект стоит на месте а дочерний объект двигается(в общем координаты дочернего объекта не 0,0,0)? Получается что игрок двигается, первый объект(mushrums) не двигается, а второй(mushrumsInv) берется из префаба (изначально объекта нет) и меняет свое местоположение вот таким скриптом:
Код
public class spawnItems : MonoBehaviour {
public Transform[] SpawnPoints; public float SpawnTime=4.0f; public GameObject StealthMush;
// Use this for initialization void Start () { InvokeRepeating ("SpawnMush",SpawnTime,SpawnTime); } // Update is called once per frame void Update () { } public void Stop() { CancelInvoke("SpawnMush"); } public void SpawnMush() { int spawnIndex = Random.Range (0,SpawnPoints.Length); Instantiate (StealthMush,SpawnPoints[spawnIndex].position, SpawnPoints[spawnIndex].rotation); } }
|
|
| |
q1w287 | Дата: Четверг, 07 Апреля 2016, 11:54 | Сообщение # 9 | Тема: Расстояние между объектами |
частый гость
Сейчас нет на сайте
| Bizzy, да плоскость в x-z, поменял результат тот же, удаленный объект ближе чем около которого игрок. Вообще второй объект берется из префаба, и перемещается по разным точкам на карте, а расстояние всегда одно и то же. Может причина в том что это префаб?
Сообщение отредактировал q1w287 - Четверг, 07 Апреля 2016, 11:55 |
|
| |
q1w287 | Дата: Среда, 06 Апреля 2016, 16:59 | Сообщение # 10 | Тема: Расстояние между объектами |
частый гость
Сейчас нет на сайте
| Bizzy, Код public Transform player; public Transform mushrums; public Transform mushrumsInv;
float dist = Vector2.Distance(player.position, mushrums.position); float distInv = Vector2.Distance(player.position, mushrumsInv.position);
Debug.Log(dist); Debug.Log(distInv);
по логу до mushrums расстояние - 66.52308 (dist) до mushrumsInv расстояние - 26.24836 (distInv) может я что-то не понимаю...
Сообщение отредактировал q1w287 - Среда, 06 Апреля 2016, 17:00 |
|
| |
q1w287 | Дата: Среда, 06 Апреля 2016, 15:55 | Сообщение # 11 | Тема: Расстояние между объектами |
частый гость
Сейчас нет на сайте
| falcoware, у меня не 3d, с vector3 ничего не меняется
|
|
| |
q1w287 | Дата: Среда, 06 Апреля 2016, 15:24 | Сообщение # 12 | Тема: Расстояние между объектами |
частый гость
Сейчас нет на сайте
| Bizzy, irinautkina, vector2.distance - измеряет некорректно MANMANA, не понял как это приладить в моем случае, вот есть игрок и надо мерить расстояние до нескольких объектов сейчас сделал так
Код float dist = Vector2.Distance(player.position, mushrums.position); float distInv = Vector2.Distance(mushrumsInv.position, player.position); float distRun = Vector2.Distance(player.position, fastRun.position); float distFear = Vector2.Distance(player.position, beastFear.position); вот как здесь использовать raycast?
|
|
| |
q1w287 | Дата: Вторник, 05 Апреля 2016, 15:03 | Сообщение # 13 | Тема: Расстояние между объектами |
частый гость
Сейчас нет на сайте
| Цитата Jlovenpk1 ( ) Логика работы: - Персонаж смотри на объект. - определяется дистанция. - Выполняются действия. В твоем случае, ray каст есть? нет, рейкаста нет. Не совсем понимаю для чего он здесь.
|
|
| |
q1w287 | Дата: Вторник, 05 Апреля 2016, 13:56 | Сообщение # 14 | Тема: Расстояние между объектами |
частый гость
Сейчас нет на сайте
| Подскажите как Unity определяет расстояние. Определяю таким способом: Код float dist = (player.position - mushrums.position).sqrMagnitude; , некоторые объекты в игре. Но в результате получаю странные значения. Объект около которого находится игрок имеет гораздо большее значение чем объект который далеко от игрока, если смотреть по сцене. Пространство изометрическое, не 3d.
Сообщение отредактировал q1w287 - Вторник, 05 Апреля 2016, 13:57 |
|
| |
q1w287 | Дата: Среда, 30 Марта 2016, 10:08 | Сообщение # 15 | Тема: Запуск скрипта в других скриптах |
частый гость
Сейчас нет на сайте
| Egoor, получается так. Скрипт на врагах:
Код public class enemy : MonoBehaviour { private Vector3 Player; private Vector2 PlayerDirection; public float Xdif; public float Ydif; private float speed; private float distance; private bool stun; private float stuntime; GameObject playerObj; private Rigidbody2D myRigidbody2D; private bool isEnemyFear; public randomizer fear; // Use this for initialization void Start () { stuntime = 0; stun = false; speed = 6; playerObj = GameObject.Find ("Player"); myRigidbody2D = GetComponent<Rigidbody2D>(); } // Update is called once per frame public void Update () { distance = Vector2.Distance (Player, transform.position); Player = playerObj.transform.position; if (stuntime > 0) { stuntime -=Time.deltaTime; } else { stun = false; } if(fear.CheckFear()){ EnemyFear(); } else{ EnemyAttack(); } } void EnemyAttack(){ if (distance < 25 & !stun) { Xdif = Player.x - transform.position.x; Ydif = Player.y - transform.position.y; PlayerDirection = new Vector2 (Xdif, Ydif); myRigidbody2D.AddForce (PlayerDirection.normalized * speed); Debug.Log("нападают"); } } void EnemyFear(){ if (distance < 25 & !stun) { Xdif = Player.x + transform.position.x; Ydif = Player.y + transform.position.y; PlayerDirection = new Vector2 (Xdif, Ydif); myRigidbody2D.AddForce (PlayerDirection.normalized * speed); Debug.Log("убегают"); } StartCoroutine(Timer()); } void OnCollisionEnter2D(Collision2D Playerhit){ if (Playerhit.gameObject.CompareTag("Player")) { stun = true; stuntime = 1; } } IEnumerator Timer() { yield return new WaitForSeconds(10); isEnemyFear = false; StopCoroutine ("Timer"); } }
Скрипт на кнопке:
Код public class randomizer : MonoBehaviour {
private bool isEnemyFear;
public void CheckFear(){ int rand = Random.Range(0, 100); if(rand > 35) isEnemyFear = true; }
}
Как передать в скрипт на врагах?
ps. извините за возможные глупости.Добавлено (30 марта 2016, 10:08) --------------------------------------------- может кто-то еще кроме Egoor, может натолкнуть на решение?
Сообщение отредактировал q1w287 - Четверг, 24 Марта 2016, 22:21 |
|
| |
q1w287 | Дата: Четверг, 24 Марта 2016, 13:32 | Сообщение # 16 | Тема: Запуск скрипта в других скриптах |
частый гость
Сейчас нет на сайте
| Egoor, если я правильно понимаю вышеуказанный скрипт описывает логику врагов. всех врагов запихиваем в массив, таким образом?
Код GameObject[] enemies; enemies = GameObject.FindGameObjectsWithTag("enemy"); еще у меня есть функция которая ищет ближайшего врага к игроку
Код GameObject FindClosestEnemy() { GameObject[] gos; gos = GameObject.FindGameObjectsWithTag("enemy"); //GameObject closest; float distance = Mathf.Infinity; Vector3 position = transform.position; foreach (GameObject go in gos) { Vector3 diff = go.transform.position - position; float curDistance = diff.sqrMagnitude; if (curDistance < distance) { closest = go; distance = curDistance; } } return closest;} но как все это связать вместе что-то никак не доходит?
|
|
| |
q1w287 | Дата: Пятница, 18 Марта 2016, 13:46 | Сообщение # 17 | Тема: Запуск скрипта в других скриптах |
частый гость
Сейчас нет на сайте
| Egoor, большое спасибо, все дошло. Есть только один нюанс. Как грамотно это повесить на кнопку, чтобы срабатывала для всех врагов. Сейчас этот скрипт выглядит так:
Код public class randomizer : MonoBehaviour { private Vector3 Player; private Vector2 PlayerDirection; public float Xdif; public float Ydif; private float speed; private float distance; private bool stun; private float stuntime; private bool isEnemyFear; GameObject playerObj; private Rigidbody2D myRigidbody2D; // Use this for initialization void Start () { stuntime = 0; stun = false; speed = 6; playerObj = GameObject.Find ("Player"); myRigidbody2D = GetComponent<Rigidbody2D>(); } // Update is called once per frame public void Update () { distance = Vector2.Distance (Player, transform.position); Player = playerObj.transform.position; if (stuntime > 0) { stuntime -=Time.deltaTime; } else { stun = false; } if(isEnemyFear){ EnemyFear(); } else{ EnemyAttack(); } }
public void CheckFear(){ int rand = Random.Range(0, 100); if(rand > 35) isEnemyFear = true; }
void EnemyAttack(){ if (distance < 25 & !stun) { Xdif = Player.x - transform.position.x; Ydif = Player.y - transform.position.y; PlayerDirection = new Vector2 (Xdif, Ydif); myRigidbody2D.AddForce (PlayerDirection.normalized * speed); Debug.Log("нападают"); } } void EnemyFear(){ if (distance < 25 & !stun) { Xdif = Player.x + transform.position.x; Ydif = Player.y + transform.position.y; PlayerDirection = new Vector2 (Xdif, Ydif); myRigidbody2D.AddForce (PlayerDirection.normalized * speed); Debug.Log("убегают"); } StartCoroutine(Timer()); } void OnCollisionEnter2D(Collision2D Playerhit){ if (Playerhit.gameObject.CompareTag("Player")) { stun = true; stuntime = 1; } } IEnumerator Timer() { yield return new WaitForSeconds(10); isEnemyFear = false; StopCoroutine ("Timer"); }
} Сейчас если повесить скрипт на врага, все работает но только с этим врагом, так как кнопка обращается к определенному объекту Если же отдельно на пустой объект повесить само собой в transform.position не идут позиции врагов. Пробовал через поиск по тегу "enemy". Но тогда надо как-то находить определенного врага (который рядом с игроком) из массива. Или меня не туда понесло?
Сообщение отредактировал q1w287 - Пятница, 18 Марта 2016, 15:05 |
|
| |
q1w287 | Дата: Вторник, 15 Марта 2016, 12:12 | Сообщение # 18 | Тема: Запуск скрипта в других скриптах |
частый гость
Сейчас нет на сайте
| Egoor, спасибо все поправил. А вот по самому вопросу. Хочу сделать следующее. На всех врагах висит скрипт "enemy". По этому скрипту если игрок подходит на определенное расстояние, враг нападает. Есть скилл "напугать врагать". Он рандомный, т.е. типа, то сработает напугать, то нет. Если сработает, враг должен убегать от игрока, если нет то продолжает нападать. Пытаюсь сделать так:
Код public class randomizer : MonoBehaviour { public enemy enemyRun; private Vector3 Player;
public void fear() { int rand = Random.Range(0, 100); if (rand<55){ enemyRun.Update(); Debug.Log("нападают"); } if (rand >= 55) { enemyRun.Xdif = Player.x + transform.position.x; enemyRun.Ydif = Player.y + transform.position.y; enemyRun.Update(); Debug.Log("убегают"); }
}
} Т.е. по сути если выпадет rand<55, то враг продолжает нападать, если выпадет rand>=55 то нужно чтобы вызвался Update() с новыми Xdif и Ydif. И да, это срабатывает по нажатию кнопки.
Сообщение отредактировал q1w287 - Вторник, 15 Марта 2016, 12:14 |
|
| |
q1w287 | Дата: Среда, 09 Марта 2016, 13:37 | Сообщение # 19 | Тема: Запуск скрипта в других скриптах |
частый гость
Сейчас нет на сайте
| Есть скрипт
Код public class randomizer : MonoBehaviour {
public void fear() { int rand = Random.Range(0, 100); if (rand<55){ Debug.Log("нападают"); } if (rand >= 55) { Debug.Log("убегают"); }
}
}
Каким образом можно запустить следующий срипт
Код public class enemy : MonoBehaviour { private Vector3 Player; private Vector2 PlayerDirection; private float Xdif; private float Ydif; private float speed; private float distance; private bool stun; private float stuntime; // Use this for initialization void Start () { stuntime = 0; stun = false; speed = 6; }
// Update is called once per frame public void Update () { distance = Vector2.Distance (Player, transform.position); Player = GameObject.Find ("Player").transform.position; if (stuntime > 0) { stuntime -=Time.deltaTime; } else { stun = false; } if (distance < 25 & !stun) { Xdif = Player.x - transform.position.x; Ydif = Player.y - transform.position.y; PlayerDirection = new Vector2 (Xdif, Ydif); GetComponent<Rigidbody2D>().AddForce (PlayerDirection.normalized * speed); } } void OnCollisionEnter2D(Collision2D Playerhit){ if (Playerhit.gameObject.tag == "Player") { stun = true; stuntime = 1; } } }
Например в месте где указано
Код Debug.Log("нападают");
|
|
| |
q1w287 | Дата: Понедельник, 04 Января 2016, 21:05 | Сообщение # 20 | Тема: Скрипт на кнопке |
частый гость
Сейчас нет на сайте
| Здравствуйте. Подскажите как на кнопку повесить скрипт. Управление на тачскрине. Есть кнопка при нажатии которой должна выполняться анимация, но не в любом случае, а только при нахождении персонажа от определенного объекта на определенном расстоянии. В общем вот скрипт:
Код using UnityEngine; using System.Collections;
public class hand : MonoBehaviour { public Transform player; public Transform mushrums;
private Animator anim; private bool pick_up;
void Start () { anim = GetComponent<Animator> (); pick_up = false; } void Update () { anim.SetBool ("pick_up", pick_up);
float dist = Vector3.Distance(player.position, mushrums.position); Debug.Log(dist); if (dist <= 58.5f) { pick_up = true; Destroy (gameObject); } else { pick_up= false; } Но вот как его на кнопку повесить? Что-то никак не могу сделать.
|
|
| |
|