SC-101笔记(Unity2D物理系统与简单移动控制)

Unity物理系统主要有三个组件:碰撞箱Collider,刚体RigidBody和平台控制器PlatformEffector

前期复习:

一般的游戏对象都自带一个公共基类Monobehavior,而后者又有层层往上的父类Component以及GameObject。分别提供了Destroy()、Instantiate()和getcomponent()等许多非常有用的方法。

Unity提供的Input类可以让我们很好的处理键盘输入。其中GetKeyDown()指的是当键盘的键被按下时触发、GetKeyUp()指的是当键盘的键被抬起时触发,GetKey()指的是当键盘的键被按住时,每帧执行的方法。

Unity还提供了自带的Random库,在不同的情境下都可以提供有效的随机值

Unity2D 物理组件

Tag

Tag是一个字符串变量,每一个游戏对象都有对应的标签。他主要的作用是:

1.判断一个物体是不是属于一个类

2.找到某个类的一个物体(使用FindGameObjectWithTag()方法)

Layer

Layer是一个整型变量,每个GameObject也都有一个layer。它可以用来给GameObject进行另外一种分组,从而实现:

1.让相机只渲染一些Layer(spriterenderer)

2.让物理运算只在一些Layer中进行

Collider2D

碰撞箱定义了一个物体的碰撞体积,但是想看到真实的物理模拟效果,还需要添加RigidBody组件。Collider2D有很多种形状,包括Box,circle,capsule,edge。

Collider组件有两种行为模式:Collider(有物理体积)和Trigger(无物理体积)。

Collider常用的方法有三个,其中OnCollidsionEnter2D()在刚碰撞到时触发一次,而OnCollisionExit2D()指在刚离开时触发一次,OnCollisionStay2D()指在接触期间每帧触发。这三个方法都有对应的Trigger版本。这些方法都有一个参数,表示碰撞信息。主要有三种常用成员:

collision.collider:对方的碰撞箱

collision.contacts:接触点的位置

collision.gamObject:对方的gameObject

RigidBody

RigidBody一般给物体处理除了碰撞之外的所有物理行为。有3种行为模式:

1.Dynamic完全参与物理模拟

2.Kinematic不会主动移动

3.Static不移动

常用的参数:

Gravity Scale,受到重力的大小

Constraints:锁定位移/旋转

Material:控制弹力和摩擦

LayerMask

LayerMask是一个整型变量,代表了一些layer的集合。因为int是32位的,刚好代表了Unity中layer的最大层数。可以使用1<<n表示第n层的LayerMask

射线检测Raycast

Physics2D.Raycast()往某个方向发出一根射线,碰撞到第一个物体就可以停止。

例子:检测可移动范围。

发出射线的一方不需要有碰撞箱,但是被碰撞的一方需要碰撞箱。

可以使用Input.GetAxis()方法获得键盘输入;

实现简单的移动、跳跃。

左右移动:声明初始化instance实例,使用transform.translate(v3)来表示移动。如果是横板,可以令y=z=0,x = Input.GetAxis("Horizontal")*speed*DeltaTime()或者使用rigidbody.velocity = (x*speed,0)来改变自设的速度属性。

跳跃(横板)可以使用rigidbody.AddForce(velocity)。这里需要Raycast添加IsGround判定,因为不能多段跳。

Platform Effector控制器

应用实例:常见的平台跳跃。勾选Used by Effector选项。

但是这个只能实现从下往上跳不被影响。如果希望在平台上时按下S可以下平台,需要另外的操作。(后期再补)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值