1. [SerializeField] GameObject[] mapPoints;
序列化
unity能够将public类型的数据序列化
添加SerializeField也能够将数据序列化(这是将植物大战僵尸的地图里的节点序列化)
(但是还是不太明白)
(暂且搁置)
2.get与set
get与set相当是 给与 数值设定时候添加一个过滤器
比如说 public float PH=1;
也可以这样写
public float PH
{
get{return PH;}//只读属性
set{PH=value}//只写属性
}
但是如果我们要限制PH的范围(如果value的值小于1就不能被赋给PH)
public float PH
{
get{return PH;}
set{
if(value>+1)
PH=value;}
}
3.GameObject
// 名字
this.gameObject.name
// 是否激活
this.gameObject.activeSelf
// 是否为静态
this.gameObject.isStatic
// 层级
this.gameObject.layer(返回int类型,层级前面的标号)
// 标签
this.gameObject.tag(返回string类型)
// transform
this.transform,通过Mono去得到的依附对象的GameObject的位置信息
与this.gameObject.transform得到的相同
此处请看大佬的文章(1条消息) GameObject知识点_Go_Accepted的博客-CSDN博客
其中的2、GameObject的静态方法比较有启发性
4.GetComponent
//获取模型对象
脚本名(ScriptName) 接收对象(Model) = GetComponent<脚本名(ScriptName)>();
//通过模型绑定的脚本来获取模型对象
//注意:如果多个模型上绑定同一个脚本,只会获取到最后绑定脚本的模型对象
//获取对象的属性
GameObject NewGame;/
/创建一个对象并为对象赋值
Button button= NewGame.GetComponent<Button>();
//得到NewGame绑定的button属性
//对象悬挂脚本
GameObject NewGame;
//创建一个对象并为对象赋值
脚本名(ScriptName) 接收对象(Model) = NewGame.GetComponent<脚本名(ScriptName)>();
//得到NewGame绑定的脚本
getCompent是获取游戏组件的一种方式(GameObject.GetCompent<type>();)
比如:新建的一个空对象 添加一个Rigidbody2D组件 我要修改其中的mass值
就可以在程序中写 GetCompent<Rigidbody>().mass=20;
4.list列表 public static List<Vector2> Points = new List<Vector2>();
先鸽着 以后有空再写 (虽然可能不大)
5.协程、IEnumrable是什么东西
协程开始与停止
startCoroutine()
stopCoroutine()//开始与停止的时候 应该配套 用字符串启动 就应该用字符串停止
比如:
startCoroutine(“createSun”);配套stopCoroutine(“createSun”);
yield的作用是进行一个等待的作用
禁止协程的进行 不能通过禁用脚本的来实现协程的停止
但可以通过或者是stopCoroutine、移除脚本、禁用对象、销毁对象、来实现协程的暂停
用inspector里的removeComponent或者是代码里加上destory实现(移除脚本)
用this.gameObject.SetActive(false)(禁用对象)
用Destory(.gameObject)(销毁游戏对象)
协程的特殊用法
其一便是实现两个或多个协程的嵌套使用
其二便是实现一个协程执行完毕之后再进行另外一个协程
public class SunFlower : MonoBehaviour
{
IEnumerator e;
Coroutine co;
IEnumerator Start()
{
e = CountCo();
co = StartCoroutine(e);//实现协程的启动
yield return e;
for (int i = 0; i <= 10; i++)
{
Debug.Log($"当前输出的Start的计时器i={i}");
//计时器的时间间隔为2秒
yield return new WaitForSecondsRealtime(2);
}
}
IEnumerator CountCo()
{
for(int i = 0; i <= 10; i++)
{
Debug.Log($"当前输出的CountCo的计时器i={i}");
//计时器的时间间隔为1秒
yield return new WaitForSecondsRealtime(1);
}
}
}
【Unity协程那些事:最深入浅出的协程底层原理解析!】 https://www.bilibili.com/video/BV19Z4y1w7Fa?share_source=copy_web&vd_source=4cadfd595e673b13230a7e296c618001
(此视频还有一部分没有看完)