unity笔记(1)
作者:互联网
/// <summary> /// Component 类 提供了查找组件的功能(从自身、从后代、从先辈)。 /// </summary> public class ComponentDemo : MonoBehaviour { private void OnGUI() { if (GUILayout.Button("将当前物体颜色设置为红")) { GetComponent<MeshRenderer>().material.color = Color.red; } if (GUILayout.Button("获取当前物体所有组件")) { var allComponent = GetComponents<Component>(); foreach (var item in allComponent) { Debug.Log(item); } } if (GUILayout.Button("获取所有子物体中的MeshRenderer")) { var allRenderer = GetComponentsInChildren<MeshRenderer>(); foreach (var item in allRenderer) { item.material.color = Color.red; } } if (GUILayout.Button("获取所有先辈物体中的MeshRenderer")) { var allRenderer = GetComponentsInParent<MeshRenderer>(); foreach (var item in allRenderer) { item.material.color = Color.red; } } /* GetComponent:获取当前物体其他组件类型的引用。 GetComponents:获取当前物体所有组件引用。 GetComponentsInChildren:查找指定类型组件(从自身开始,并搜索所有后代) GetComponentInChildren:查找指定类型组件(从自身开始,并搜索所有后代,查找到第一个满足条件则结束) GetComponentsInParent:查找指定类型组件(从自身开始,并搜索所有先辈) */ } }
public class GameObjectDemo : MonoBehaviour { /* GameObject 类 -- Variables activeInHierarchy :理解为物体实际激活状态(物体自身被禁用或者父物体被禁用都为false) activeSelf:物体在Inspector面板激活状态 layer -- Public Functions AddComponent:为游戏对象添加组件 SetActive -- Static Functions * Find :根据名称查找游戏对象(慎用,如同大海捞针) * FindGameObjectsWithTag :获取使用指定标签的所有物体 * FindWithTag:获取使用标签的一个物体 * * Object 类 Static Functions * * 总结: * 如何查找某个组件引用 * Component 类 * -- 实例方法 * -- 查找当前物体其他类型组件引用 * -- 在先辈物体中查找指定类型组件引用 * -- 后代 * * Transform 类 * -- 实例方法 * -- 通过名称查找子物体 * -- 索引 * * GameObject 类 * -- 静态方法 * -- 通过标签查找物体(单个、所有) * -- 通过名称找物体(慎用) * -- 实例方法 * -- 查找当前物体其他类型组件 * -- 在先辈物体中查找指定类型组件引用 * -- 后代 * * Object 类 * -- 静态方法 * -- 根据类型查找对象 * //练习:(1)代码创建红色的聚光灯 // (2)点击按钮启用/禁用指定物体 * * 作业:查找血量最低的敌人 */ public GameObject targetGO; private void OnGUI() { if (GUILayout.Button("代码创建红色的聚光灯")) { //创建游戏对象 GameObject go = new GameObject("MyLight"); //添加灯光组件(创建Ligth类型对象 将引用添加到游戏对象列表中) Light light = go.AddComponent<Light>(); light.type = LightType.Spot; light.color = Color.red; } if (GUILayout.Button("启用/禁用指定物体")) { targetGO.SetActive(!targetGO.activeInHierarchy); } if (GUILayout.Button("FindGameObjectsWithTag")) { //获取所有敌人 var allEnemy = GameObject.FindGameObjectsWithTag("Enemy"); var playerGO = GameObject.FindWithTag("Player"); } if (GUILayout.Button("FindObjectsOfType")) { //无论当前组件位于哪个物体,都可以被查找到 var allRenderer = FindObjectsOfType<MeshRenderer>(); } } }
/// <summary> /// 生命周期、消息、可重写函数、必然事件 /// </summary> public class Lifecycle : MonoBehaviour { /* c# 类 { 字段 属性 构造函数 方法 } 脚本 { private/public 字段 方法 } */ //字段直接初始化(在构造函数中进行,调用Unity方法会产生异常) //本质:跨线程访问被禁止 //解决方案:放到Start 或 Awake中 //private int a = Random.Range(1, 101); private string a = "abc"; [Range(1,100)] public int b = 10; //在编译器中显示当前字段 [SerializeField] private bool c = true; //在编译器中隐藏当前字段 [HideInInspector] public float d = 1.0f; //***************生命周期********************* //Unity脚本 从唤醒 到 最后销毁的过程。 //必然事件:当满足某种条件自动执行的方法。 //重点:执行时机、作用、方法名称 //(前提:物体启用、脚本启用)Unity 引擎会在一开始先调用所有对象的Awake 再调用 所有对象的 Start //游戏物体加载 ---> 立即执行(仅1次) //作用:充当构造函数,初始化数据成员。 // 如果初始化有明确的先后顺序,需要先执行的放到Awake中,后执行的放到Start中 private void Awake() { //Debug.Log(this.name + ":Awake:Lifecycle"); } //游戏物体加载 ---> 等待脚本启用 --> 才执行(仅1次) private void Start() { //Debug.Log(this.name + ":Start:" + Time.time); } private void onm ouseDown() { Debug.Log("执行喽"); } //固定更新 //固定时间(默认0.02s) 执行 1次 //作用:对物体执行物理操作(移动、旋转、施加力……) // private void FixedUpdate() { //向前移动1m } //每渲染帧(大概0.02s) 执行1次 //作用:执行游戏逻辑 private void Update() { //向前移动1m //查看某一帧程序执行情况 //启动调试 F5 --> 运行场景 --> 暂停 --> 在可能出错的行加断点 --> 单帧运行 --> 调试…… --> 停止调试 Shift + F5 int a = 1; int b = 2; int c = a + b; } //延迟更新:在Update之后执行 //作用:适合执行跟随Update移动的代码 private void LateUpdate() { } }
/// <summary> /// Transform 类 提供了查找(根据名字、索引获取子物体)、移动、旋转、缩放物体的功能。 /// </summary> public class TransformDemo : MonoBehaviour { private void OnGUI() { if (GUILayout.Button("Find")) { //通过名称获取子物体变换组件引用 //this.transform.Find("子物体名称") //备注:如果通过路径获取物体,那么路径一定不能发生改变 Transform childTF = this.transform.Find("子物体名称/子物体名称"); //通过变换组件查找其他类型组件 childTF.GetComponent<MeshRenderer>().material.color = Color.red; } if (GUILayout.Button("获取所有子物体(孙子不要)")) { //写法1 int count = transform.childCount; for (int i = 0; i < count; i++) { //根据索引获取子物体 Transform tf = transform.GetChild(i); } //写法2 foreach (var child in transform) { //child子物体变换组件 } } if (GUILayout.RepeatButton("自转")) { //按下按钮 沿Y轴旋转1度 transform.Rotate(0, 1, 0);//沿自身坐标轴 //transform.Rotate(0, 1, 0,Space.World);//沿世界身坐标轴 } if (GUILayout.RepeatButton("移动")) { //移动 transform.Translate(0, 0, 1);//沿自身坐标轴 //transform.Translate(0, 1, 0,Space.World);//沿世界身坐标轴 } if (GUILayout.Button("LookAt")) { //注视旋转 物体Z轴指向目标位置 transform.LookAt(targetTF); } if (GUILayout.RepeatButton("围绕旋转")) { // (围绕的目标点,围绕的轴向,围绕的角度) transform.RotateAround(targetTF.position, Vector3.forward, 1); } if (GUILayout.RepeatButton("设置父物体")) { //将当前物体 设置为 targetTF 的子物体 transform.SetParent(targetTF); } } public Transform targetTF; /* Transform 类 -- Variables childCount localPosition:子物体相对于父物体坐标[编译器中显示的] localScale:子物体相对于父物体的缩放比例[编译器中显示的] lossyScale:(只读)可以理解为相对于模型的缩放比(父物体.localScale * 自身物体.localScale) parent position:相对于世界坐标系坐标 root -- Public Functions Find :通过名称查找子物体. GetChild:根据索引获取子物体 LookAt Rotate RotateAround SetParent Translate */ }
标签:--,物体,GUILayout,笔记,unity,查找,private,组件 来源: https://www.cnblogs.com/xms-669/p/15988883.html