public interface IData
{
void Read(BinaryReader reader);
void Write(BinaryWriter writer);
}
public class CustomClass : IData
{
private int _customVar;
public void Write(BinaryWriter writer)
{
writer.Write(_customVar);
}
public void Read(BinaryReader reader)
{
_customVar = reader.ReadInt32();
}
}
public class PrefabClass: MonoBehaviour, IData
{
private int _intValue;
private float _floatValue;
private string _stringValue;
private CustomClass _customClass;
public void Write(BinaryWriter writer)
{
writer.Write(_intValue);
writer.Write(_floatValue);
writer.Write(_stringValue);
((IData)_customClass).Write(writer);
}
public void Read(BinaryReader reader)
{
// Читать нужно в том же порядке что и пишется
_intValue = reader.ReadInt32();
_floatValue = reader.ReadSingle();
_stringValue = reader.ReadString();
// Свои данные
// ...
((IData)_customClass).Read(reader);
}
}
public class DictionaryClass
{
private Dictionary<string, IData> _dict = new Dictionary<string, IData>();
public void Save()
{
using (BinaryWriter writer = new BinaryWriter(File.Open("Path", FileMode.Create)))
{
foreach(var item in _dict)
{
item.Write(writer);
}
}
}
public void Load()
{
if (File.Exists("Path"))
{
using (BinaryReader reader = new BinaryReader(File.Open("Path", FileMode.Open)))
{
foreach(var item in _dict)
{
item.Read(reader);
}
}
}
}
}
using UnityEngine;
using UnityEngine.UI;
public class NewBehaviourScript : MonoBehaviour
{
public Text Text;
// Объявляешь поле типа 'Data'
public Data SomeData;
// Methods
private void Awake()
{
// Создаешь экземпляр, иначе будет возвращать NULL.
SomeData = new Data();
// Используешь поля
SomeData.field1 = 2;
SomeData.field2 = false;
SomeData.field3 = "release";
}
void Update()
{
Text.text = SomeData.field1 + "";
}
public void OnClick()
{
// Обращаешься к полю через созданного экземпляра типа 'Data'.
SomeData.field1++;
}
}
public class Data
{
public int field1 = 1;
public bool field2 = true;
public string field3 = "test";
}
public class Data {
public int field1 = 1;
public bool field2 = true;
public string field3 = "test"
}
{
"field1": 1,
"field2": true,
"field3": "test"
}
using UnityEngine;
public class Data : MonoBehaviour
{
public int field1 = 1;
public bool field2 = true;
public string field3 = "test";
// Methods
public byte[] Save()
{
MemoryStream stream = new MemoryStream();
BinaryWriter writer = new BinaryWriter(stream);
// В каком порядке записываются данные, в таком и нжно будет читать!
writer.Write(field1); // int
writer.Write(field2); // bool
writer.Write(field3); // string
// Output - byte[] который используется для отправки с помощью WWWForm.
return stream.ToArray();
}
public void Load(byte[] data)
{
MemoryStream stream = new MemoryStream(data);
using (BinaryReader reader = new BinaryReader(stream))
{
// Читаем данные.
field1 = reader.ReadInt32();
field2 = reader.ReadBoolean();
field3 = reader.ReadString();
}
}
}
using UnityEngine;
public class Jump : MonoBehaviour
{
private float _power;
// Methods
public void Update()
{
// При нажатие сбрасываем силу прыжка.
if(Input.GetKeyDown(KeyCode.Space))
_power = 1;
// При зажатие увеличиваем силу на некое число.
else if(Input.GetKey(KeyCode.Space))
_power += .1f;
// При отпускании сделаем прыжок с полученной силой.
// Направление только нужно будет дописать.
else if(Input.GetKeyUp(KeyCode.Space))
rb.AddForce(_power, ForceMode2D.Impulse);
}
}
using System;
using UnityEngine;
using UnityEngine.UI;
public class SimpleCalculator : MonoBehaviour
{
[SerializeField] private InputField _firstInput;
[SerializeField] private InputField _secondInput;
[SerializeField] private InputField _signInput;
[SerializeField] private Text _text;
// Methods
public void Calculator()
{
int a = int.Parse(_firstInput.text);
int b = int.Parse(_secondInput.text);
_text.text = GetResult(a, b).ToString();
}
private float GetResult(int a, int b)
{
switch(_signInput.text)
{
case "+": return Add(a, b);
case "-": return Substract(a, b);
case "*": return Multiply(a, b);
case "/": return Divide(a, b);
default: throw new Exception("Invalid sign");
}
}
private float Add(int a, int b) => a + b;
private float Substract(int a, int b) => a - b;
private float Multiply(int a, int b) => a * b;
private float Divide(int a, int b) => a / b;
}
using UnityEngine;
// Кинуть на камеру
// Не забывать менять вращение самой камеры в ручную на сколько нужно.
public class CameraFollow : MonoBehavior
{
// Соединить тут объект которого камера должна преследовать.
[SerializedField] private Transform _target;
// Дистанция между объекта и самой камеры.
[SerializedField] private Vector3 _offset = new Vector3(0, -10, 0);
// Насколько плавно камера будет следовать за объектом.
[SerializedField] private float _smooth = .1f
// Methods
private void Update()
{
transform.position = Vector2.Lerp(transform.position, _target.transform.position + _offset, _smooth);
}
}