22070人加入学习
(189人评价)
Unity2D 官方入门案例 - Ruby's Adventure

制作完成于2020年5月5日,基于Unity2019.3

价格 免费

ctrl+r+e 一键生成属性

ctrl+k+f 一键对齐代码

[展开全文]

想要让代码安全性高只要属性或者方法需要private就加上

Trigger老师这节视频讲到了封装 需要借鉴

新学的知识:

当外部能够改变我们不希望能够被改变的属性时,可以将变量封装具体代码如下

例:public int Health {get{ return Health;}}

外部届时创建实例(对象)后 对象名.Health  就可以只读变量值了

 

当然还有一个 {set{Health =Value}} 可以修改变量值但这样直接public就更省事

[展开全文]

在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>();

[展开全文]