刚开始接触unity,通过视频和书籍进行学习,准备每周学习完后进行一次沉淀总结,如果有错误,希望大佬们指出
两个方法:
start()//运行该脚本只调用一次(描述感觉不正确),通常用于各种初始化
Update()// 每帧都在调用
FixedUpdate() // 定时调用的方法,默认是0.02s(有一次修改了这个值成1,发现运行起来后,game窗口刷新频率就变了,1s刷一次,感觉不能随便改啊)
碰撞检测:
OnCollisionEnter(Collision collision); // 碰撞开始会触发这个方法;
OnCollisionStay(Collision collision); // 碰撞后没有分开,一直粘着,就会持续执行这个方法
OnCllisionExit(Collision collision); // 碰撞结束,就是分开了,会执行一次这个方法
可穿透的碰撞检测(碰撞的对象可穿透,不会影响自己的移动):
OnTriggerEnter(Collider other);
OnTriggerStay(Collider other); // 在碰撞对象的内部就会一直触发这个方法
OnTriggerExit(Collider other);
这边想要触发这个效果就必须吧把XXX Collider中的 Is Trigger打钩起来。
零零散散的小点:
预制体:一个方便修改属性的功能,通过这个功能在修改一些属性的时候,可以一起同步到所有预制体的实例对象。(粗浅理解,粗浅用法)
RigidBody 刚体组件,上面的碰撞检测与它有关:两个物体都必须带有碰撞器(Collider),其中一个物体还必须带有Rigidbody刚体。
可以通过AddForce(Vector3)给他施加某个方向的力,让其移动
获取一个对象的方法:
GameObject.Find(string name).GetCompoment
// 注意这边有个坑,如果Find找不到对象,直接调用Get会报错,类似空指针访问数据。
几个问题:
1. 用Destroy删除对象,然后立刻判断是否找得到这个对象,返回的结果是找得到?
原因是:因为Destroy是而是异步执行的,不会影响主线程的执行。所以,想要达成上面那个效果就得使用DestroyImmediate(顺序执行,删完再接着运行)。但是使用时又发现报错了,在碰撞检测中不能使用DestroyImmediate。
2.我在脚本中挪动了对象的坐标,开始运行时,却发现物体没有被移动,但是Scence窗口中选中该物体,坐标却在移动。
原因未知,虽然之后发现取消勾选了static,就回复正常了,但是之后我再勾选static,又无法复现。 static表示这个物体是静态的、不会移动。不过出现的情况和下面文章链接描述的相同意应该是这个原因
查阅文章:
Unity的inspector面板中static的作用_蹦蹦跳跳小米粒的博客-CSDN博客_unity中static的作用
Unity中使用Destroy删除游戏物体的大坑_zxy13826134783的博客-CSDN博客_unity删除物体



