Рубрики
GameObject "Inspector" Unity-C# "GUI"

GUI «Функции»

//текущая прорисовка фона интерфейса имеет зелёный цвет
//по умолчанию white (белый)
GUI.backgroundColor = Color.green;
//текущая прорисовка элементов интерфейса имеет зелёный цвет
//по умолчанию white (белый)
GUI.color = Color.green;
//"пробел" в интерфейсе c отступом в 100 пикселей
UnityEngine.GUILayout.Space(100);
//статическая переменная (только для чтения)
//длинна элемента интерфейса 10 
static public readonly GUILayoutOption[] w10 = new GUILayoutOption[] { GUILayout.Width(10) };
//Переключать bool b c заголовком и длинной 
var new_b = EditorGUILayout.Toggle("заголовок", b, vars.w10);
Рубрики
Fragments "Unity-C#" Class "Mesh"

Mesh «Создание треугольника»

using UnityEditor;
using UnityEngine;

public class NewBehaviourScript : MonoBehaviour{
void Start(){
var m = new Mesh();
var v = new Vector3(0, 0, 0);
var d = 0.5f;

m.vertices = new Vector3[]{v,v+d*Vector3.up, v+d* Vector3.right};
m.triangles = new int[] { 0, 1, 2};

m.uv=new Vector2[]{d*new Vector2(1,1),d*new Vector2(1,0),d*new Vector2(0,1)};

m.RecalculateBounds();
m.RecalculateNormals();
        
var mr = gameObject.GetComponent<MeshRenderer>();
if (mr == null) gameObject.AddComponent<MeshRenderer>();

var mf = gameObject.GetComponent<MeshFilter>();
if (mf == null) mf = gameObject.AddComponent<MeshFilter>();
mf.sharedMesh = m;
AssetDatabase.CreateAsset(m,"Assets/Resources/2207170827/test.asset");
}
}
Рубрики
Fragments "Unity-C#" Class "Texture3D"

Texture3D «Создание»

static public void Создать(){
//создание текстуры 3d с определёнными характеристиками
TEXTURE = new Texture3D(R * MAX, R * MAX, R * MAX, TextureFormat.RGB24, false);
TEXTURE.filterMode = FilterMode.Point;

//создание цветового массива для текстуры 3d
Color[] colors = new Color[MAX * R * MAX * R * MAX * R];

//наполнение путём прохода по ячейкам
for (byte z = 0; z < R; z++){
  int zOffset = z * MAX * R * MAX * R;
    for (byte y = 0; y < R; y++){
      int yOffset = y * MAX * R;
        for (byte x = 0; x < R; x++)
         colors[x + yOffset + zOffset] = Color.green;
}
}

//запись в текстуру
TEXTURE.SetPixels(colors);
TEXTURE.Apply();
Сохранить();
//return tex;
}
//сохранить текстуру в файл asset
static public void Сохранить()
{
var res = "Assets/Resources/";
var f = res + PATH + ".asset";
if (System.IO.File.Exists(f))
 AssetDatabase.SaveAssets();
else
 AssetDatabase.CreateAsset(TEXTURE, f);
}
Рубрики
Unity скрипты.С#.основы.функции

Тригонометрические функции

Mathf.Deg2Rad
перевод градусов в радианы float

  • rotation.x=Mathf.Deg2Rad*угол
  • для rotation

Mathf.Rad2Deg
перевод радианы float в градусы

  • угол=Mathf.Rad2Deg*rotation.x
Рубрики
Unity Object Pool Синглтон

Использование пула объектов на примере

BadShooting.cs
не эффиктивность без использования пула объектов

youtube

в каждом Update
инстализируется объект «пуля»
назначается объекту родитель
вызывает метод, который устанавливает начальную позицию и поворот

public class BadShooting:MonoBehaviour;
{
[SerializableField]
private GameObject bullet;

[SerializableField]
private Transform bulletParent;

[SerializableField]
private Vector3 bulletSpawnPosition;

private void Update()
{
var bullet=GetBullet();
bullet.transform.SetParent(bulletParent);

bullet.GetComponent<BadBullet>().OnCreate(bulletSpawnPosition,transform.rotation);
}

private GameObject GetBullet()
{
return Instantiate(bullet);
}

}

BadBullet.cs
пуля летит прямо и через 3 секунды уничтожается

public class BadBullet:MonoBehaviour;
{
private float lifeTime=3;
private float currentLifeTime;
private float speed=10;

public void OnCreate(Vector3 position, Quaternion rotation)
{
transform.position=position;
transfor.rotation=rotation;
currentLifeTime=lifeTime;
}

void Update()
{
transform.Translate(Vector3.forward*Time.deltaTime*speed);

if ((currentLifeTime-=Time.deltaTime)<0)
Destroy(gameObject);
}
}