mirror of
https://github.com/m-lamonaca/dev-notes.git
synced 2025-04-06 02:46:39 +00:00
3.2 KiB
3.2 KiB
Unity C# Scripting
Logging
Debug.Log(string); //output message to console (more powerful and flexible than print())
Print(string); //output message to console
Scripts
public class ClassName : MonoBehaviour {
// Start is called before the first frame update
void Start()
{
}
// Update is called once per frame
void Update()
{
Time.deltaTime; // time since last frame
}
// FixedUpdate is calles every x seconds (not influenced by FPS instability)
// used for physics calculations which sould be FPS independant
void FixedUpdate()
{
Time.fixedDeltaTime; // fixed amount of time
Time.timeDelta; // if called inside FIxedUpadate() behaves like fixedDeltaTime
}
}
Script comunication
Referencing data in a sctipt from another.
//example of a script to be referenced in another
Using System;
public class Player : MonoBheaviour {
public float health = 10;
public event Action OnPlayerDeath; //event of type Action, needs using System
void Start() {
}
void Update() {
if (health <= 0) {
if (OnPlayerDeath != null) {
OnPleyerDeath(); // invoke Action (if no subscribers event will be NULL, can cause errors)
}
Destroy(GameObject); // needs to be notified
}
}
}
// example of script needing a reference to another
public class GameUI : MonoBehaviour {
Player player; //instance of referenced GameObject to be founf by its type
void Start(){
GameObject playerObj = GameObject.Find("Player"); //reference to game object
GameObject playerObj = GameObject.FindGameObjectWithTag("Tag"); //reference to game object
player = playerObj.GetComponent<Player>(); // get script attached to the GameObject
player = FindObjectOfType<Player>(); // get reference to an object
// on event invocation all subscribet methods will be called
player.OnPlayerDeath += GameOver; // subscribe method to event
}
void Update() {
DrawHealthBar(plyer.health); // call method passing data of player GameObject
}
void DrawHealthbar(float playerHealth) {
// implementation
}
public void GameOver() {
//game over screen
}
}
Screen
2D Screen Measures
Aspect Ratio = (screen_width [px]) / (screen_height [px])
Orhograpic Size [world units]
= (screen_height [world units] / 2)
Aspect Ratio * Orhograpic Size = (screen_width [world units] / 2)
Screen Width [world units]
= (AspectRatio * OrhograpicSize * 2)
screenWidth = Camera.main.aspect * Camera.main.orthographicSize * 2;
Scriptable Objects
Class to store data in stand alone assets, used to keep data out of scripts.
Can be used as a template.
[CreateAssetMenu(menuName = "ScriptableObjectName")] //enable creation of scriptable object
public class ScriptableObjectName : ScriptableObject {
//data structure here
}
Game Object Serialization
[SeralizeField] type variable; //access game object from code
Game Object Data Access
public type GetVariable(){
return variable;
}