目标:设置一个可移动平台,玩家跳上去后,会跟随移动
平台挂载脚本:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
//平台需要添加刚体 且为kinematic模式
public class MovingPlatform : MonoBehaviour
{
public Vector3 startPos;
public Vector3 endPos;
// 获取平台上的游戏物体
Rigidbody2D rigd2d;
public ContactFilter2D contactFilter;
public float speed;//移动速度
ContactPoint2D[] contactPoint = new ContactPoint2D[10];
private void Start()
{
rigd2d = transform.GetComponent<Rigidbody2D>();
}
public void FollowObjects()
{ //获取平台上游戏物体
//当平台和其他物体接触时,会将接触物体信息保存到ContactPoint2D数组中
//count代表接触游戏物体数量
int count = rigd2d.GetContacts(contactFilter,contactPoint);
//设置接触物体的速度值
for(int i = 0; i < count; i++)
{
//需要与endpos判断是施加左边的速度还是右边的速度
contactPoint[i].rigidbody.velocity += new Vector2(transform.position.x < endPos.x ? speed : -speed,0);
}
}
private void LateUpdate()
{
FollowObjects();
}
void Update()
{
transform.position = Vector3.MoveTowards(transform.position, endPos, speed* Time.deltaTime);
if(transform.position == endPos)
{
Vector3 temp = endPos;
this.endPos = this.startPos;
this.startPos = temp;
}
}
}