物品item下创建两个sprite子物体,一个用于显示基础图片,另一个用于显示阴影。
阴影子物体挂载脚本用于跟显示基础图片对应,需要做到丢出物品时阴影也为物品的样式。
在物品item上挂载脚本ItemBounce,并在脚本里声明改变游戏物体位置所需的变量和抛物线所需的变量
private Transform spriteTrans; // 基础图片的trans组件
private BoxCollider2D coll; // 游戏物体的碰撞判断,在丢弃时不进行碰撞检测
public float gravity = -3.5f; // 重力,下落速度
private bool isGround; // 是否落地
private float distance; // 目标点与自身的初始距离
private Vector2 direction; // 向量
private Vector3 targetPos; // 目标坐标
得到以上变量创建函数Bounce在Update里执行,用IsGround判断是否落地,如果落地打开物体的碰撞组件。
isGround = spriteTrans.position.y <= transform.position.y;
if(!isGround)
{
spriteTrans.position += Vector3.up * Settings.gravity * Time.deltaTime;
}
else
{
spriteTrans.position = transform.position;
coll.enabled = true;
}
y轴移动做完后可以用Vector3.Distance(自身坐标,目标坐标)两个坐标之间的距离作为x移动的判断
if(Vector3.Distance(transform.position,targetPos) >0.1f)
{
transform.position += (Vector3)direction * distance * -Settings.gravity * Time.deltaTime;
// transform.position = Vector3.Lerp(targetPos, transform.position, 0.1f*Time.deltaTime);
}
再写一个调用函数用于外部传入目标坐标和游戏物体坐标初始化。
// 外部调用函数
public void InitBounceItem(Vector3 target,Vector2 dir)
{
coll.enabled = false; // 碰撞体
direction = dir; // 向量
targetPos = target; // 目标坐标
distance = Vector3.Distance(target,transform.position); // 初始距离
spriteTrans.position += Vector3.up * 1.5f; // 物品初始位置
}