Последние сообщения

Страницы: [1] 2 3 ... 10
1
C# / Re: Coroutines (Корутины)
« Последний ответ от Mimi Neko Ноябрь 15, 2017, 19:11:32 pm »
Корутины и наследование

Имеется родительский класс Parent.cs:  (он может ни быть к чему-либо прикреплен, а может просто где-то лежать в папке)
using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class Parent : MonoBehaviour {


//void Start (){
// StartCoroutine(MainCoroutine(0));//вызов этой корутины, в этом же классе
//}

        //объявление корутины в родительском классе:
public IEnumerator MainCoroutine(int a){

while(a < 5){
a++;
Debug.Log(a);
yield return null;
}
Debug.Log("end "+ a);
}

}

Так же имеется дочерний от него класс Children.cs:  (он висит на неком объекте)
using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class Children : Parent {



void Start (){

//корутина с таким именем, запустится из родительского класса только в том случае,
//если её нет в дочернем.
StartCoroutine(MainCoroutine(0));//запуск первой доступной корутины
StartCoroutine(base.MainCoroutine(0));//запуск корутины только родительского класса
}

        //Переопределение корутины родительского класса в дочернем:
public IEnumerator MainCoroutine(int a){

while(a < 10){
a++;
Debug.Log(a);
yield return null;
}
Debug.Log("end "+ a);
}
}

 - в результате, в дочерних классах можно запускать корутину, не зависимо от того, определена (точнее, переопределена) ли она в дочернем, или нет.
так же возможно запускать непосредственно корутину у родительского класса.
3
Unity3D поворот персонажа вместе с камерой в RPG 3D игре:

Добавляем данный скрипт к игроку и в target добавляем камеру.

    public class RelativeMoment : MonoBehaviour {
      [SerializeField] private Transform target;
      public float rotSpeed = 10.0f;
      void Update () {
        Vector3 movement = Vector3.zero;
        float horInput = Input.GetAxis ("Horizontal");
        float verInput = Input.GetAxis ("Vertical");
        if (horInput != 0 || verInput != 0){
          movement.x = horInput;
          movement.z = verInput;
          Quaternion tmp = target.rotation;
          target.eulerAngles = new Vector3 (0, target.eulerAngles.y, 0);
          movement = target.TransformDirection (movement);
          target.rotation = tmp;
        //  transform.rotation = Quaternion.LookRotation (movement);
          Quaternion direction = Quaternion.LookRotation (movement);
          transform.rotation = Quaternion.Lerp (transform.rotation, direction, rotSpeed * Time.deltaTime);
        }
      }
    }


источник: https://unity-help.tk
4
Unity3D поворот персонажа вместе с камерой в RPG 3D игре:

Добавляем данный скрипт к игроку и в target добавляем камеру.

    public class RelativeMoment : MonoBehaviour {
      [SerializeField] private Transform target;
      public float rotSpeed = 10.0f;
      void Update () {
        Vector3 movement = Vector3.zero;
        float horInput = Input.GetAxis ("Horizontal");
        float verInput = Input.GetAxis ("Vertical");
        if (horInput != 0 || verInput != 0){
          movement.x = horInput;
          movement.z = verInput;
          Quaternion tmp = target.rotation;
          target.eulerAngles = new Vector3 (0, target.eulerAngles.y, 0);
          movement = target.TransformDirection (movement);
          target.rotation = tmp;
        //  transform.rotation = Quaternion.LookRotation (movement);
          Quaternion direction = Quaternion.LookRotation (movement);
          transform.rotation = Quaternion.Lerp (transform.rotation, direction, rotSpeed * Time.deltaTime);
        }
      }
    }


источник: https://unity-help.tk
5
Unity3d - Копилка готовых решений / Re: Работа с 2D
« Последний ответ от Mimi Neko Ноябрь 06, 2016, 16:00:33 pm »
Дополнительные общие материалы:

Создание плиточного ландшафта для игр
http://websketches.ru/blog/sozdanie-plitohnogo-landhafta

Алгоритм поиска пути в браузерных играх
http://websketches.ru/blog/algoritm-poiska-pitu-v-brauzernih-igrax

Введение в пиксельную графику (Pixel Art) для игр
http://websketches.ru/blog/vvedenie-pixel-art-dla-igr

#GameDev
6
Unity3d - Копилка готовых решений / Re: Работа с 2D
« Последний ответ от Mimi Neko Ноябрь 06, 2016, 16:00:10 pm »
Полезные ссылки по теме:

Работа с Unity3d в 2D:
http://websketches.ru/blog/rabota-s-unity-2d

2D игра на Unity3d Подробное руководство: (на русском!)
http://websketches.ru/blog/2d-igra-na-unity-podrobnoye-rukovodstvo-p1
http://websketches.ru/blog/2d-igra-na-unity-podrobnoye-rukovodstvo-p2
http://websketches.ru/blog/2d-igra-na-unity-podrobnoye-rukovodstvo-p3
http://websketches.ru/blog/2d-igra-na-unity-podrobnoye-rukovodstvo-p4
http://websketches.ru/blog/2d-igra-na-unity-podrobnoye-rukovodstvo-p5
http://websketches.ru/blog/2d-igra-na-unity-podrobnoye-rukovodstvo-p6
http://websketches.ru/blog/2d-igra-na-unity-podrobnoye-rukovodstvo-p7
http://websketches.ru/blog/2d-igra-na-unity-podrobnoye-rukovodstvo-p8

2D игра в Unity 5. Что нового в Unity 5:
http://websketches.ru/blog/unity5-pogrujenie-2d

Основы создания 2D персонажа в Unity 3D 4.3. Часть 1: заготовка персонажа и анимация покоя
https://habrahabr.ru/post/211472

2D #0.1 — Unity3D передвижение персонажа.
https://unity-help.tk/3d-0-1-unity3d-character-movement

2D #0.2 — Unity3D использование камеры в 2D
https://unity-help.tk/2d-0-1-unity3d-camera-usage-in-2d

2D #0.3 Стрельба в 2D
https://unity-help.tk/2d-0-3-shooting-into-2d

Архитектура простой 2D игры на Unity3D. План, факт и работа над ошибками
https://habrahabr.ru/post/231087/

#Unity3d Unity5 #2D #GameDev
7
Unity3d - Копилка готовых решений / Работа с 2D
« Последний ответ от Mimi Neko Ноябрь 06, 2016, 15:59:46 pm »
Раздел посвящён созданию 2D игр на Unity3d, и всему что с этим связано.
#Unity3d Unity5 #2D #GameDev
8
Работа с векторами:

Vector3.Lerp(startPosition, endPosition, Time.deltaTime(Time.tim/60)) — плавное передвижение объекта c одной точки в другую (вычитание промежуточных переменных называется Интерполяцией)

Vector3.Slerp(startPosition, endPosition, Time.deltaTime(Time.tim/60)) — плавное передвижение объекта по дуге c одной точки в другую

Vector(2,3,4).Magnitude — Находит длину вектора, это может быть вектор скорости, растояния, силы.

Vector(2,3,4).sqrMagnitude — тоже самое что и выше только без вычитания корня

Vector(2,3).ClampMagnitude(вектор, ограничитель) — ограничения вектора заданными параметрами,
используется для ограничения передвижения по диагонали.

Vectror(2,3) A — Vectror(2,3) B — вычитание векторов используется чтобы получить вектор движения, перемещения. порядок имеет значение.

Vector(2,3) A * speed — умножение вектора на скаляр speed используется чтобы ускорить или замедлить обьект, например можно использовать для влияние с помощью сил: дождь, ветер, солнце.

Vestor(2,3,4).Distance(endPos,startPos) аналогично (endPos-startPos).Magnitude — расстояние между двумя точками (вычитаение точек и находим длину найденного вектора)

public Vector3.normalized — возвращает копию вектора, который нормализирован, тоесть длина вектора (magnitude) составляет 1, направление копии такое же как и оригинала

public void Normalize() — функция выполняет нормализацию вектора, если значения слишком малы для нормализации, то возвращает 0 ( Нормализация производится просто, каждый параметр делится на длину вектора). Нормализированный вектор используется для контроля, чтобы точно управлять, например, скоростью.

Vector(2,3).Dot (Vector3 A, Vectror3 B) — скалярное произведение векторов (Dot Product), возвращает скаляр от -1 до 1. По сути, это перемножение двух векторов после чего умноженных на косинус угла между векторами. Используется в игре, например, для проверки находится ли герой в поле зрения врага.
Если 1 — то векторы паралельный,
если больше 0, то векторы направлены в одну сторону, но не паралельны,
если 0 , то векторы перпендикулярны,
если меньше 0, то векторы направлены в разные стороны,
если -1, то векторы паралельны но направлены в разные стороны.cos 0 — 1
cos 60 — 0.5
cos 90 — 0

Vector3.Cross(Vector3 A, Vector3 B) — использует для поиска нормали (перпендикуляра) к плоскости, чтобы узнать куда смотрит тот или иной обьект.Величина результата равна произведению величин исходных векторов, умноженному на синус угла между ними. Для поиска направления вектора используется правило левой руки (большой палец, это первый вектор, указательный второй, средний палец укажет направление перпендикуляра)

Поворот точки на угол angle: 
rotated_point.x = point.x * cos(angle) — point.y * sin(angle); rotated_point.y = point.x * sin(angle) + point.y * cos(angle);

Vector3.SmoothDamp плавное перемещение параметры описаны тут
public static Vector3 SmoothDamp(Vector3 current, Vector3 target, ref Vector3 currentVelocity, float smoothTime, float maxSpeed = Mathf.Infinity, float deltaTime = Time.deltaTime);

Дополнительные материалы:
Таблицы Брадиса — http://uchim.org/matematika/tablica-bradisa — опеределение угла cos sin с помощью числа.

источник: https://unity-help.tk
9
Передвижение персонажа в 2D: (один из вариантов)

Передвижение объекта в 2d пространстве описывается с помощью нескольких функций.

    У вас должен быть создан объект и к нему должен быть прикреплен скрипт, указанный ниже ( если название скрипта отличается от MoovementHero, не забудьте сменить название класса в самом скрипте)
    К объекту должен быть прикреплен компонент Rigidbody2D;

    public class MoovementHero : MonoBehaviour {
       //Создаем/инициализируем переменную Rigidbody;
       //Создаем/инициализируем переменную speed - множитель скорости передвижения;
       //...
    Rigidbody2D rb2d;
       //...
       void FixedUpdate () {
       // Сохраняем компонент в переменную;
       //...
       Rigidbody2D rb2d = GetComponent<Rigidbody2D> ();
       //....
    }
    void Update () {
       //Получаем значение от кнопок. Какие кнопки Horizontal и Vertical смотрим в редакторе Unity Edit - Project Settings - Input - Axes
       float x = Imput.GetAxis("Horizontal");
       float y = Input.GetAxis("Vertical");
       //Создаем 2D вектор направения передвижения
       Vector2 movement = new Vector2 (x,y);
       //Добавляем силу передвижения к объекту
       // law <em>force = mass x acceleration</em> - чем больше масса, тем больше нужжно приложить силу, чтобы ускорить и придать определенную скорость.
       //Time.deltaTime - делает игру фрейм независимой, это значит что количество FPS не влияет на общую скорость передвижения.
       rb2d.AddForce (movement*speed*Time.deltaTime);
       //или другой вариант
       // rb2d.transform.Translate(movement*speed*Time.deltaTime);
    }
    }

источник: https://unity-help.tk
10
Передвижение персонажа в 3D: (один из вариантов)

    //для 3D объекта
    public class 3DMovement: MonoBehaviour {
    //Инициализация переменной
    void Awake () {
    Rigidbody rb = GetComponent<Rigidbody> ();
    }
    void FixedUpdate () {
       float x = Imput.GetAxis("Horizontal");
       float z = Input.GetAxis("Vertical");
       //По оси "y" у нас 0 по той причине что значение в вертикальной плоскости не меняется.
       Vector3 movement = new Vector3 (x, 0, y);
       //для 3d
       transform.translate(x*speed*Time.deltaTime, 0, z*speed*Time.deltaTime);
       //ограничение движения по диагонали одной скоростью
       movement = Vector3.ClampMagnitude(movement, speed);
       // преобразование в глобальную систему координат
       // TransformPoint - используется если вектор представляет собой позицию (position), а не направление (direction)
       movement  = transform.TransformDirection(movement);
       // компонент CharancterController _charController
       _charController.Move(movement);
    }
    }

источник: https://unity-help.tk
Страницы: [1] 2 3 ... 10