jiangwei小站
644 字
3 分钟
unity笔记
2024-10-09

创建节点#

GameObject node = new GameObject();

实例化组件#

MeshRenderer comp = new MeshRenderer();

实例化组件脚本#

SimpleLogic script1 = new simpleLogic();

生命周期:#

Awake() -> Start() -> OnEnable() -> Update() -> OnDisable() -> OnDestroy()

脚本运行顺序:#

先执行所有组件的 Awake()方法。 调用顺序不确定,就是跟节点顺序无关。 如果要提高脚本执行顺序,可以设置脚本的 ExecuteIn Order 属性。最后一行点击+号。优先级越小越高。

脚本参数 public#

[ Tooltip(“说明”) ] public float speed = 2.0f;

public GameObject Target;

public AudioClip[] clips;

设值顺序 初始化参数 -> 编辑器设置 -> Start -> Update

数据类型#

值类型:int, float, bool, string, enum, Vector2, Vector3, Vector4, Color, Quaternion, Rect, Bounds, Ray, Ray2D, Matrix4x4, AnimationCurve, Gradient 引用类型:GameObject, Transform, Component, ScriptableObject

数组#

int[] numbers = new int[5]; numbers[0] = 1;

运行的时候是无法保存#

可以先暂停游戏, 使用 copy Component 来保存数据 结束运行后用 paste Component 来恢复数据

获取组件#

AudioSource audio = this.GetComponent(); audio.Play();

node.GetComponent();

鼠标输入事件#

Input.GetMouseButtonDown(0); // 鼠标左键按下 Input.GetMouseButtonUp(0); // 鼠标左键松开 Input.GetMouseButton(0); // 鼠标左键按住

消息调用#

public GameObject target; target.SendMessage(“methodName”, arg); // 调用节点上的 methodName 方法 BroadcastMessage(“methodName”); // 调用场景中所有节点上的 methodName 方法

获取父子级 Transform#

Transform parent = transform.parent; Transform child = transform.GetChild(0);

transform.find(“childName”); // 查找子节点

foreach (Transform child in transform) {}

this.transform.SetParent(parent); // 设置父节点 this.transform.SetParent(null); // 一级节点

gameObject.activeSelf; // 是否显示 gameObject.setActive(true); // 显示节点

Random.Range()#

Random.Range(0, 10); // 0-9 随机整数

定时调用#

Invoke(“methodName”, 2.0f); // 2 秒后调用 methodName 方法 CancelInvoke(“methodName”); // 取消 methodName 方法的调用 CancelInvok(); // 取消所有调用 InvokeRepeating(“methodName”, delay, interval); // 每隔 0.5 秒调用 methodName 方法 isInvoking = true; // 是否正在调用

Invoke(nameof(CallMethodWithParameter), 2.0f);

Vector3#

Vector3 v1 = new Vector3(1, 2, 3); Vector3 v2 = new Vector3(4, 5, 6); Vector3 v3 = v1 + v2; // 加法 Vector3 v4 = v1 - v2; // 减法 Vector3 v5 = v1 * 2.0f; // 乘法 Vector3 v6 = v1 / 2.0f; // 除法

v4.Normalize(); // 归一化

v4.magnitude; // 长度 float distance = Vector3.Distance(v1, v2); // 距离

预制体#

将节点拖到assets 右键可以导出预制体 右键可以解除预制体

覆盖编辑: Overrides (反向应用)

动态创建实例#

public GameObject bulletPrefab; GameObject bullet = Instantiate(bulletPrefab, null); bullet.transform.position = Vector3.zero; bullet.transform.localEulerAngles = Vector3.zero;

Destroy(bullet, 2.0f); // 2 秒后销毁实例 Destroy(this.gameObject, 2.0f); // 2 秒后销毁实例

物理系统#

添加刚体组件 Rigidbody 添加碰撞体组件 Collider assets添加物理材质 physic material 设置弹性系数 bounciness 摩擦力 friction

void onTriggerEnter(Collider other) {} // 碰撞体进入 void onTriggerStay(Collider other) {} // 碰撞体持续 void onTriggerExit(Collider other) {} // 碰撞体离开

天空盒#

Window -> Rendering -> Lighting -> Environment -> Skybox Material