Рубрики
C# Fragments "Unity-C#" test "C#" ООП "Интерфейс" ООП "Свойство"

C# «Получить конвертированное значение свойства экземпляра по имени в интерфейсе»

public interface ITest
{
/// <summary>
/// проверка экземпляра типа Dictionary на заполенность
/// </summary>
public bool Пустой  => System.Convert.ToInt32(this.GetType().GetProperty("Count").GetValue(this))== 0;
}
public class Test:Dictionary<uint,string> ITest{
}
ITest Ex= new Test();
Debug.log(Ex.Пустой);
Рубрики
C# Fragments "Unity-C#" test "C#" Метод ООП "Интерфейс"

C# «Метод интерфейса присваивает значения свойствам без реализации в классе»

using UnityEngine;
namespace test2208041738
{
    public interface ITest
    {
        public byte Prop1
        {
            get;
            set;
        }
        public string Prop2
        {
            get;
            set;
        }
public void Method_props_assign() => this.Method(2, "hello");

public (byte, string) Method(byte Prop1, string Prop2) => (this.Prop1 = Prop1, this.Prop2 = Prop2);
}
    public class Test : ITest
    {
        private byte _prop1;
        private string _prop2;
        
        public byte Prop1
        {
            get => _prop1;
            set => _prop1 = value;
        }
        public string Prop2
        {
            get => _prop2;
            set => _prop2 = value;
        }
        static public void test()
        {
            ITest t = new Test();
            t.Method_props_assign();
            Debug.Log(t.Prop1 + "," + t.Prop2);
        }
    }
}
Рубрики
Class "Mesh" Fragments "Unity-C#"

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");
}
}
Рубрики
Class "Texture3D" Fragments "Unity-C#"

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);
}
Рубрики
Canvas Fragments "Unity-C#" Unity

Загрузка UI Префаба на сцену

var go=PrefabUtility.LoadPrefabContents(Application.dataPath+"/Resources/PREFABS/prefab_104515022021.prefab");

go.transform.SetParent(GameObject.Find("Canvas_world").transform);
//после переноса объекта в родитель изменятся Scale
go.GetComponent<RectTransform>().localScale = Vector3.one;