在OnTriggerEnter()获取其他脚本时要collision.GetComponent<>()获取脚本实例
Destory(gameObject);//销毁物体
gameObject.SetActive(false);//取消激活
在OnTriggerEnter()获取其他脚本时要collision.GetComponent<>()获取脚本实例
Destory(gameObject);//销毁物体
gameObject.SetActive(false);//取消激活
Box Collider 2D 中一个属性是 is Trigger(是否开启触发器)
Triggher: 触发某一个事件的机关
脚本方法:OnTriggerEnter2D()//触发检测
速度需要一定限制当速度够快时会直接穿过碰撞器容易出bug
如何在TileMap添加碰撞器(空气墙)
在TileMap添加TileMap Collider 2D组件,这个时候需要修改Tiles文件的Tiles类型,将不需要空气墙的瓦片类型Collider Type设置为none,需要的设置为Sprite即可
更一步优化的方法(避免卡墙,还有性能优化):添加Composite Collider 2D组件(联合碰撞)并勾选Tilemap组件Use by Composite 属性这时所有挨在一起的碰撞器将会融合一起,再将Rigidbody2D组件的Body Type 设置成Static(静态),这样地图就不会因为什么不可抗力而移动了
注意:Composite Collider 2D会自动添加刚体2D组件
静态方法:
类名.方法名(参数),全局可访问,不需要实例
普通方法:
对象名.方法名(参数),需要实例
实例:
例如:
Person person2 = new Person();
两个物体碰撞 移动那方发生抖动是因为在脚本中我们定义了一个移动的方法 unity也在刚体里提供了移动的方法 两者的力相斥 所以才会发生抖动
解决方法为:将我们自生定义的位置该成由unity 刚体组件去给我们控制移动位置
新学的脚本代码:Rigidbody.MovePostion(位置参数);
如果不想让运动的一方碰撞后依着物体受力旋转只需要将Rotation z轴冻结
具体操作如下 点击运动一方的Rigidbody组件 下拉点击Constrtaints 勾选Freeze Rotation(冻结z轴)即可
碰撞的条件是:双方必须都有碰撞器且一方拥有刚体,最好是运动的一方,因为unity为了性能的优化,刚体长时间不发生碰撞检测会休眠
如果将刚体交给了物体那么人物碰撞到物体时,物体会被推动
添加完Rigidbody 2D 刚体组件后 我们这个项目是不需要重力的 将组件里的Gravity Scale属性修改成0即可
Rigidbody 2D(人物) 和 BoxCollider(人物,物体) 组件搭配在一起 使游戏物体拥有发生碰撞能力
预制体是文件时更改后所有子体都会跟着更改,当预制体为子体时可以单独更改属性,不会影响母体和其他子体
当预制体单独设置后觉得效果不错想要运用到所有预制体,可以打开属性面板点击overrides点击apply all即可
注意:更改的是文件 无法使用ctrl+z
通过project setting 设置Graphics 可以设置渲染模式 想要真实渲染 将transparency设置成custom axis 自定义
做完tilemap需要解决渲染顺序和层级
使用layer(层级) 可以在2D游戏物体中的sprite renderer和地形tilemaprenderer组件中的order in layer 属性设置层级大小,值越大越后渲染值,越小越优先渲染
(最先渲染的一定是底部的)
地形一定要最底层 这里设置成-10
图片切割前需将图片的Sprite Mode属性设置为Multiple 然后再点击Sprite Editor按钮 左上角有两个箭头点击第二个 Grid by cell Count 是按照行列来切割 往c和r打出想要的行和列即可
只创建完TileMap还不行,得再创建Tiles,Tiles 再Assets下Tiles包中创建,
给瓦片地图添加刚体的操作内容需要重点关注
public int maxHealth=5;//最大生命值currentHealth;//Ruby的当前生命值
currentHealth = maxHealth;
private void ChangeHealth(int amount)
{currentHealth=Mathf.Clamp(currentHealth+amount,0,maxHealth);
}
private Rigidbody2D rigidbody2d;
rigidbody2d =GetComponent<Rigidbody2D>();
Rididbody 2D
重载,函数名相同,参数个数不同。