Вторник, 26 Ноября 2024, 22:03

Приветствую Вас Гость

[ Новые сообщения · Игроделы · Правила · Поиск ]
  • Страница 3 из 3
  • «
  • 1
  • 2
  • 3
Результаты поиска
polousДата: Вторник, 05 Августа 2014, 11:24 | Сообщение # 41 | Тема: Дальность обзора/область видимости
частый гость
Сейчас нет на сайте
Люди добрые, подскажите!) [C#; Unity]

Делаю TBS (по типу X-Com и тп). У персонажей должна быть дальность обзора, в пределах которой персонаж способен обнаружить врага. Область видимости персонажа - это сектор круга с переменными радиусом круга и углом сектора.
Подскажите, каким образом это можно реализовать в коде? Как я не пытался ввести запрос в поисковике "дальность обзора", "угол обзора", "туман войны", "область видимости", "field of view" и тп - выдается информация по скриптингу камеры и ее настроек или дальности прорисовки местности, что не относится к моей задаче...
Кто сталкивался с подобными вопросами, есть идеи по реализации?

Добавлено (05.08.2014, 11:24)
---------------------------------------------
фактически, мне нужно лишь одно условие - если враг попал в эту область, он виден персонажу и начинается бой, если нет, то все курят, никого не видать. Можно даже самые общие рекомендации дать, чтоб я хоть понял, с чего мне начать в этом вопросе.

polousДата: Воскресенье, 03 Августа 2014, 17:15 | Сообщение # 42 | Тема: Локальные координаты объекта
частый гость
Сейчас нет на сайте
Спасибо большое, MANMANA, за помощь!
На буднях попробую и отпишусь

Добавлено (03.08.2014, 17:15)
---------------------------------------------
Я еще не пробовал предложенный вариант, т.к. проект на другом компе, но возникает следующий вопрос - неужели нельзя считать координаты уже созданного первым скриптом объекта без обращения к этому скрипту? Например, при помощи GameObject.transform.position? Это не работает здесь лишь потому, что в первом скрипте создавались не самостоятельные объекты, а копии одно? (По любому, наиглупейший вопрос smile но что делать, я учусь)

polousДата: Пятница, 01 Августа 2014, 14:23 | Сообщение # 43 | Тема: Локальные координаты объекта
частый гость
Сейчас нет на сайте
Ребята-эксперты, нужна ваша помощь или подсказка.
Я сгенерировал гексагональную сетку. Код на C# ниже по тексту. Координаты копий гексов (Vector2 gridPos) рассчитываются в скрипте с помощью методов createGrid() и calcWorldCoord(Vector2 gridPos). Этот скрипт основной и кидается на... например, камеру.
Мне нужно всего-лишь считывать эти координаты при наведении мышки и выводить в виде текста, например, в дебаг. А также подкрашивать гекс при наведении на него мышки. Но делать я это хочу из другого скрипта, который будет прикреплен к префабу гекса. Т.е., как я понимаю, мне нужно вытащить из первого скрипта из метода переменные gridPos.x и gridPos.у и использовать их во втором скрипте.... В инете много про это уже порасписано - и использование static, GetComponent, Transform, Instance и пр.... как я не пытался - не получается. Переменная gridPos видна только в рамках тех методов и как ее оттуда выудить в другой скрипт я не понимаю. Поможете новичку?)
Вот код первого скрипта:
Код

using UnityEngine;
using System.Collections;

public class GridManager: MonoBehaviour
{
   public GameObject Hex;

   public static int gridWidthInHexes = 100;
   public static int gridHeightInHexes = 100;

   private float hexWidth;
   private float hexHeight;
     

   void setSizes()
   {
    hexWidth = Hex.renderer.bounds.size.x;
    hexHeight = Hex.renderer.bounds.size.z;

   }
     
   Vector3 calcInitPos()
   {
    Vector3 initPos;
    initPos = new Vector3(0, 0, 0);
    return initPos;
   }
     
   //method used to convert hex grid coordinates to game world coordinates
   public Vector3 calcWorldCoord(Vector2 gridPos)
   {
    //Position of the first hex tile
    Vector3 initPos = calcInitPos();
    //Every second row is offset by half of the tile width
    float offset = 0;
    if (gridPos.y % 2 != 0)
     offset = hexWidth / 2;
      
    float x =  initPos.x + offset + gridPos.x * hexWidth;
    //Every new line is offset in z direction by 3/4 of the hexagon height
    float z = initPos.z + gridPos.y * hexHeight * 0.75f;
    return new Vector3(x, 0, z);
   }
     
   //Finally the method which initialises and positions all the tiles
   void createGrid()
   {
    //Game object which is the parent of all the hex tiles
    GameObject hexGridGO = new GameObject("HexGrid");
      
    for (float y = 0; y < gridHeightInHexes; y++)
    {
     for (float x = 0; x < gridWidthInHexes; x++)
     {
      //GameObject assigned to Hex public variable is cloned
      GameObject hex = (GameObject)Instantiate(Hex);
      //Current position in grid
      Vector2 gridPos = new Vector2(x, y);
      hex.transform.position = calcWorldCoord(gridPos);
      hex.transform.parent = hexGridGO.transform;
      //Debug.Log("HexClone position is (" + gridPos.x + "," + gridPos.y + ")");
     }
    }
   }

   void Start()
   {
    setSizes();
    createGrid();
   }
}


А вот код второго скрипта, где я хочу вызывать координаты гексов и подкрашивать:
Код

using UnityEngine;
using System.Collections;

public class Hex : MonoBehaviour {

  Vector2 gridPos;

  void Start () {}
   
  void Update () {}

  void OnMouseEnter() {
   transform.renderer.material.color = Color.yellow;
   Debug.Log("HexClone position is (" + gridPos.x + "," + gridPos.y + ")");
  }
   
     void OnMouseExit() {
   transform.renderer.material.color = Color.white;
  }
}


Сообщение отредактировал polous - Пятница, 01 Августа 2014, 14:25
  • Страница 3 из 3
  • «
  • 1
  • 2
  • 3
Поиск:

Все права сохранены. GcUp.ru © 2008-2024 Рейтинг