Результаты поиска
| |
sinoptis | Дата: Воскресенье, 15 Июля 2012, 22:54 | Сообщение # 61 | Тема: Неработающий код |
почетный гость
Сейчас нет на сайте
| Данный ниже код прекрасно работал до обновления Unity. Но почему сейчас Unity выдает ошибку: error CS0426: The nested type `Euler' does not exist in the type `UnityEngine.Quaternion'?
Вот код: Code //направление на игрока Vector3 direction = transform.position - target.position; //запоминаем старые углы Vector3 oldRotate = transform.eulerAngles; //вычисляем новые углы Quaternion newRotate = Quaternion.LookRotation(direction,Vector3.up); transform.rotation = Quaternion.Euler(oldRotate.x,newRotate.eulerAngles.y ,newRotate.eulerAngles.z); Добавлено (14.07.2012, 14:46) --------------------------------------------- Теперь ещё и анимация перестала работать хотя я ничего не трогал Добавлено (15.07.2012, 22:54) --------------------------------------------- Ну что некто не знает?
|
|
| |
sinoptis | Дата: Четверг, 12 Июля 2012, 23:29 | Сообщение # 62 | Тема: Проблемка со скриптом. |
почетный гость
Сейчас нет на сайте
| Я в Unity некогда не писал var. А вот с форич заминочка вышла
|
|
| |
sinoptis | Дата: Четверг, 12 Июля 2012, 22:55 | Сообщение # 63 | Тема: Проблемка со скриптом. |
почетный гость
Сейчас нет на сайте
| seaman, Какой var в C#????!!
|
|
| |
sinoptis | Дата: Четверг, 12 Июля 2012, 16:30 | Сообщение # 64 | Тема: Проблемка со скриптом. |
почетный гость
Сейчас нет на сайте
| Js Code for( var hit in colliders ) C# Code RaycastHit hit; if(Physics.Raycast(ray,out hit,100)){ foreach(hit in colliders){ //трататата } } Если я конечно не ошибаюсь
Сообщение отредактировал sinoptis - Четверг, 12 Июля 2012, 16:34 |
|
| |
sinoptis | Дата: Среда, 11 Июля 2012, 18:46 | Сообщение # 65 | Тема: Помощь анимации робота |
почетный гость
Сейчас нет на сайте
| Помогите сделать анимация бега робота в Blender. Я бы и сам сделал но у него колени назад . Могу предоставить денежное вознаграждение за помощь( правда не большое) . Модель могу кинуть на e-mail.
|
|
| |
sinoptis | Дата: Вторник, 10 Июля 2012, 15:57 | Сообщение # 66 | Тема: Вопрос по List<> |
почетный гость
Сейчас нет на сайте
| Racot, Обошлось без этого.)))) После обновления юнити себя странно ведет
|
|
| |
sinoptis | Дата: Понедельник, 09 Июля 2012, 11:04 | Сообщение # 67 | Тема: Вопрос по List<> |
почетный гость
Сейчас нет на сайте
| Racot, Спасибо , конечно , но я так и не понял почему обьекты не добавляются. Хотя можно попробовать использовать Built-in array с заданным количеством юнитов. Добавлено (09.07.2012, 11:04) --------------------------------------------- Всё, проблема решилась сама собой.
|
|
| |
sinoptis | Дата: Понедельник, 09 Июля 2012, 00:11 | Сообщение # 68 | Тема: Вопрос по List<> |
почетный гость
Сейчас нет на сайте
| Вобщем есть два скрипта.( Переписывать полностью не буду так как много, напишу лишь ключевые функции) И так, первый скрипт весит на обьекте и по клику добавляет клон префаба на сцену и в лист, таким образом Code GameObject inUnit = Instantiate( buildingUnit, new Vector3(spawnPoin.transform.position.x, 2.816964f, spawnPoin.transform.position.y), Quaternion.identity ) as GameObject ; unitManager.AddUnit(inUnit); А во вторм скрипте есть публичная функция по добавлению обьекта(юнита) в лист Code public void AddUnit(GameObject unit) { AllUnits.Add(unit); } И у меня такая конструкция не работает , обьекты создаются но в лист не добавляются , а после выключения Play Mode они появляются в листе( когда они уже не нужны ). Помогите разобраться почему не работает.
|
|
| |
sinoptis | Дата: Воскресенье, 08 Июля 2012, 23:53 | Сообщение # 69 | Тема: Постройка зданий в RTS |
почетный гость
Сейчас нет на сайте
| seaman, Спасибо за разьяснение.
|
|
| |
sinoptis | Дата: Воскресенье, 08 Июля 2012, 16:10 | Сообщение # 70 | Тема: Постройка зданий в RTS |
почетный гость
Сейчас нет на сайте
| seaman, А графы не являются ли той самой картой проходимости, которая предоставляет алгоритму данные для поиска оптимального пути?
|
|
| |
sinoptis | Дата: Пятница, 06 Июля 2012, 10:24 | Сообщение # 71 | Тема: Постройка зданий в RTS |
почетный гость
Сейчас нет на сайте
| seaman, При том что при помощи А* можно опредилить является ли эта область проходимой или нет, ну и соответственно можно строить или нет. В Ассет сторе видел еще Unity Steer и Path кто использовал для поиска пути, а то А* и в правду мудрёный слишком.
|
|
| |
sinoptis | Дата: Четверг, 05 Июля 2012, 19:43 | Сообщение # 72 | Тема: Постройка зданий в RTS |
почетный гость
Сейчас нет на сайте
| SarCasm, Да ,но у него есть еще и бесплатная версия на сайте разработчика.
|
|
| |
sinoptis | Дата: Четверг, 05 Июля 2012, 10:24 | Сообщение # 73 | Тема: Постройка зданий в RTS |
почетный гость
Сейчас нет на сайте
| Здравствуйте, начал использовать в своем проекте A* Pathfinding и у меня возник вопрос как можно опредилить какие ноды находятся в определенном Bound'е и узнать проходимы они или нет? Заранее спасибо. Добавлено (05.07.2012, 10:24) --------------------------------------------- Что, неужели никто не использовал эту систему?
|
|
| |
sinoptis | Дата: Понедельник, 02 Июля 2012, 13:44 | Сообщение # 74 | Тема: Выделение рамкой |
почетный гость
Сейчас нет на сайте
| pixeye, Спасибо Добавлено (01.07.2012, 17:14) --------------------------------------------- Вот переписал эти скрипты на С# и совместил в одном. Но теперь не выделяются обьекты посмотрите может где я допустил ошибку? Code
using UnityEngine; using System.Collections; using System.Collections.Generic;
public class RTSPlayer : MonoBehaviour { //==Публичные переменные================ public GameObject target; public List<GameObject> selectedUnitsList; public List<GameObject> AllUnits; //====================================== public GUIStyle style;
private Vector2 startPos; private Vector2 endPos;
private Rect rect; private bool drawRect;
private readonly GUIContent cont = new GUIContent();
// Use this for initialization void Start () { AllUnits = new List<GameObject>(); selectedUnitsList = new List<GameObject>(); AddAllUnit(); } // Update is called once per frame void Update () { //====Выделение и снятие единичной цели================================================== if(Input.GetMouseButton(0)){ Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition); RaycastHit hit; if(Physics.Raycast(ray, out hit, 100 )&& hit.collider.tag == "Building"){ target = hit.collider.gameObject; Target tr = (Target)target.GetComponent("Target"); tr.ShowHealthBar(); } } if(Input.GetMouseButton(1)){ if(target !=null){ Target tr = (Target)target.GetComponent("Target"); tr.HideHealthBar(); target = null; } } //=============================================================================== } void OnGUI () { if (Input.GetMouseButtonDown(0)) { startPos = Input.mousePosition; drawRect = true; } if (Input.GetMouseButtonUp(0)){ drawRect = false; SelectUnitsInArea(startPos, endPos); }
if (drawRect) { endPos = Input.mousePosition; if(startPos==endPos)return;
rect = new Rect(Mathf.Min(endPos.x, startPos.x), Screen.height - Mathf.Max(endPos.y, startPos.y), Mathf.Max(endPos.x, startPos.x) - Mathf.Min(endPos.x, startPos.x), Mathf.Max(endPos.y, startPos.y) - Mathf.Min(endPos.y, startPos.y) );
GUI.Box(rect,cont,style); } } //поиск и добавление всех юнитов в список public void AddAllUnit(){ //помещаем всех врагов в массив go GameObject[] go = GameObject.FindGameObjectsWithTag("Unit"); //каждый элемент из найденных засовываем в массив потенциальных целей if(go != null){ foreach(GameObject unit in go) AddUnit(unit); } } //метод по добавлению в массив очередного элемента public void AddUnit(GameObject unit) { AllUnits.Add(unit); } void SelectUnitsInArea(Vector3 point1, Vector3 point2) { Debug.Log("SelectUnitsInArea"); if (point2.x < point1.x) { float x1 = point1.x; float x2 = point2.x; point1.x = x2; point2.x = x1; } if (point2.z > point1.z) { float z1 = point1.z; float z2 = point2.z; point1.z = z2; point2.z = z1; } foreach(GameObject go in AllUnits){ Vector3 goPos = go.transform.position; if (goPos.x > point1.x && goPos.x < point2.x && goPos.z < point1.z && goPos.z > point2.z) { selectedUnitsList.Add(go); Debug.Log("Select"); Solidier sl = (Solidier)go.GetComponent("Solidier"); sl.SetUnitSelected(true); } }
} }
Добавлено (02.07.2012, 13:44) --------------------------------------------- Извините , сам понял
|
|
| |
sinoptis | Дата: Суббота, 30 Июня 2012, 17:06 | Сообщение # 75 | Тема: Выделение рамкой |
почетный гость
Сейчас нет на сайте
| pixeye, Я переводил оба эти скрипта на С# полностью, но они не работали , я решил написать всё с нуля и спросил знающих людей как это работает т.к. я плохо разбираюсь в векторных вычислениях. Спасибо за обьяснение, хотя я уже и сам пришел к этому
Сообщение отредактировал sinoptis - Суббота, 30 Июня 2012, 17:07 |
|
| |
sinoptis | Дата: Суббота, 30 Июня 2012, 10:14 | Сообщение # 76 | Тема: Выделение рамкой |
почетный гость
Сейчас нет на сайте
| Помогите разобраться. На официальном форуме нашел исходник , этого самого выделения. Но все скрипты на Js и я не как не могу понять ( т.к. пишу на C#), как оно реализованно. Кому не сложно обьясните на С# только ту часть которая отвечает за определение находится обьект в таргете или нет. UnitSelection.js Code
private var mouseButton1DownPoint : Vector2; private var mouseButton1UpPoint : Vector2; private var mouseButton1DownTerrainHitPoint : Vector3; private var mouseButton2DownPoint : Vector2; private var mouseButton2UpPoint : Vector2; private var selectionPointStart : Vector3; private var selectionPointEnd : Vector3; private var mouseLeftDrag : boolean = false; private var terrainLayerMask = 1 << 8; private var nonTerrainLayerMask = ~terrainLayerMask; private var raycastLength : float = 200.0; // semi transparent texture for the selection rectangle var selectionTexture : Texture; // range in which a mouse down and mouse up event will be treated as "the same location" on the map. private var mouseButtonReleaseBlurRange : int = 20;
function OnGUI() { if (mouseLeftDrag) { var width : int = mouseButton1UpPoint.x - mouseButton1DownPoint.x; var height : int = (Screen.height - mouseButton1UpPoint.y) - (Screen.height - mouseButton1DownPoint.y); var rect : Rect = Rect(mouseButton1DownPoint.x, Screen.height - mouseButton1DownPoint.y, width, height); GUI.DrawTexture (rect, selectionTexture, ScaleMode.StretchToFill, true); } }
function Update () { // Left mouse button if (Input.GetButtonDown("Fire1")) { Mouse1Down(Input.mousePosition); } if (Input.GetButtonUp("Fire1")) { Mouse1Up(Input.mousePosition); } if (Input.GetButton("Fire1")) { // Used to determine if there is some mouse drag operation going on. Mouse1DownDrag(Input.mousePosition); } // Right mouse button if (Input.GetButtonDown("Fire2")) { mouseButton2DownPoint = Input.mousePosition; } if (Input.GetButtonUp("Fire2")) { mouseButton2UpPoint = Input.mousePosition; // De-selection if right mouse button is pressed at the same point (more or less) where it was clicked down. // Use this inRange with a slight offset so if right mb was not released _exactly_ at the button down position, but with a slight offset. if (IsInRange(mouseButton2DownPoint, mouseButton2UpPoint)) { UnitManager.GetInstance().ClearSelectedUnitsList(); } } }
function Mouse1DownDrag(screenPosition : Vector2) { // Only show the drag selection texture if the mouse has been moved and not if the user made only a single left mouse click if (screenPosition != mouseButton1DownPoint) { mouseLeftDrag = true; // while dragging, update the current mouse pos for the selection rectangle. mouseButton1UpPoint = screenPosition; var hit : RaycastHit; ray = Camera.main.ScreenPointToRay (screenPosition); if ( Physics.Raycast (ray, hit, raycastLength, terrainLayerMask) ) { //print ("Hit Terrain 2 " + hit.point); selectionPointEnd = hit.point; UnitManager.GetInstance().ClearSelectedUnitsList(); UnitManager.GetInstance().SelectUnitsInArea(selectionPointStart, selectionPointEnd); } } }
function Mouse1Down(screenPosition : Vector2) { mouseButton1DownPoint = screenPosition; var hit : RaycastHit; var ray = Camera.main.ScreenPointToRay (mouseButton1DownPoint); //Debug.DrawRay (ray.origin, ray.direction * 100.0, Color.green); if ( Physics.Raycast (ray, hit, raycastLength) ) // terrainLayerMask { if (hit.collider.name == "Terrain") { mouseButton1DownTerrainHitPoint = hit.point; selectionPointStart = hit.point; } else { //print ("Mouse Down Hit something: " + hit.collider.name);
// Ray hit a unit, not the terrain. Deselect all units as the fire 1 up // event will then select that just recently clicked unit! UnitManager.GetInstance().ClearSelectedUnitsList(); } //Debug.DrawRay (ray.origin, ray.direction * 100.0, Color.green); } }
function Mouse1Up(screenPosition : Vector2) { mouseButton1UpPoint = screenPosition; var hit : RaycastHit; //print("currently selected units: " + UnitManager.GetInstance().GetSelectedUnitsCount()); mouseLeftDrag = false; if (IsInRange(mouseButton1DownPoint, mouseButton1UpPoint)) { // user just did a click, no dragging. mouse 1 down and up pos are equal. // if units are selected, move them. If not, select that unit. if (UnitManager.GetInstance().GetSelectedUnitsCount() == 0) { // no units selected, select the one we clicked - if any. ray = Camera.main.ScreenPointToRay (mouseButton1DownPoint); if ( Physics.Raycast (ray, hit, raycastLength, nonTerrainLayerMask) ) { // Ray hit something. Try to select that hit target. //print ("Hit something: " + hit.collider.name); hit.collider.gameObject.SendMessage("SetSelected"); } } else { // untis are selected, move them. Unit Manager's unit count is > 0! UnitManager.GetInstance().MoveSelectedUnitsToPoint(mouseButton1DownTerrainHitPoint); } } }
function IsInRange(v1 : Vector2, v2 : Vector2) : boolean { var dist = Vector2.Distance(v1, v2); print("Right click release button distance: " + dist); if (Vector2.Distance(v1, v2) < mouseButtonReleaseBlurRange) { return true; } return false; } UnitManager.js Code
// the one and only instance for the unit manager private static var instance : UnitManager; private var allUnitsList = new Array(); private var selectedUnitsList = new Array(); private var debugMode = false;
// accessor that delivers always the one and only instance of the UnitManager // Use it like this: UnitManager.GetInstance().<function name> static function GetInstance() : UnitManager { if (instance == null) { instance = FindObjectOfType(UnitManager); } return instance; }
function GetSelectedUnitsCount() { return selectedUnitsList.length; }
function AddUnit(go : GameObject) { allUnitsList.Add(go); if (debugMode) { print("UnitManager: added unit: " + go.name); } }
function AddSelectedUnit(go : GameObject) { selectedUnitsList.Push(go); go.SendMessage("SetUnitSelected", true); if (debugMode) { print("UnitManager: added selected unit: " + go.name); } }
function ClearSelectedUnitsList() { if (debugMode) { print("ClearSelectedUnitsList"); } for (var go : GameObject in allUnitsList) { go.SendMessage("SetUnitSelected", false); } selectedUnitsList.Clear(); }
function MoveSelectedUnitsToPoint(destinationPoint : Vector3) { for (var go : GameObject in selectedUnitsList) { if (debugMode) { print("MoveSelectedUnits: Moving unit " + go.name); } go.SendMessage("MoveToPoint", destinationPoint); } }
function SelectUnitsInArea(point1 : Vector3, point2 : Vector3) { if (debugMode) { print("Select Units in area..."); } if (point2.x < point1.x) { // swap x positions. Selection rectangle is beeing drawn from right to left var x1 = point1.x; var x2 = point2.x; point1.x = x2; point2.x = x1; } if (point2.z > point1.z) { // swap z positions. Selection rectangle is beeing drawn from bottom to top var z1 = point1.z; var z2 = point2.z; point1.z = z2; point2.z = z1; } for (var go : GameObject in allUnitsList) { var goPos : Vector3 = go.transform.position; //print("goPos:" + goPos + " 1:" + point1 + " 2:" + point2); if (goPos.x > point1.x && goPos.x < point2.x && goPos.z < point1.z && goPos.z > point2.z) { selectedUnitsList.Push(go); if (debugMode) print("Unit inside: " + go.name); go.SendMessage("SetUnitSelected", true); } } }
function Test() { print("UnitManager: Test!"); }
function OnApplicationQuit() { instance = null; }
|
|
| |
sinoptis | Дата: Среда, 27 Июня 2012, 13:20 | Сообщение # 77 | Тема: Загрузка пользовательских изображений в Unity3d |
почетный гость
Сейчас нет на сайте
| pixeye, Спасибо огромное!
|
|
| |
sinoptis | Дата: Среда, 27 Июня 2012, 11:35 | Сообщение # 78 | Тема: Загрузка пользовательских изображений в Unity3d |
почетный гость
Сейчас нет на сайте
| Подскажите как в Unity дать пользователю возможность загружать в игру свои изображения , т.е. пользователь может выбрать изображение у себя на компьютере и оно будет использоваться в игре в качестве , скажем, текстуры. Заранее спасибо.
|
|
| |
sinoptis | Дата: Четверг, 14 Июня 2012, 23:17 | Сообщение # 79 | Тема: Constructor анимация |
почетный гость
Сейчас нет на сайте
| iNikit, уже скачал, спасибо
|
|
| |
sinoptis | Дата: Четверг, 14 Июня 2012, 11:46 | Сообщение # 80 | Тема: Constructor анимация |
почетный гость
Сейчас нет на сайте
| iNikit, у меня нет 3dmax. Прочитай первй пост
|
|
| |
|