unity3d - 平台上下移动时 2D 播放器抖动?
问题描述
由于某种原因,当平台上下移动时,我的玩家角色会上下晃动,这会阻止玩家跳跃,因为玩家没有接地。我尝试了几件事,包括在平台上添加一个运动学刚体,并试图在登陆平台后让玩家成为平台的孩子,但到目前为止没有任何效果。任何帮助,将不胜感激。谢谢!
这是我的代码:
using System.Collections;
使用 System.Collections.Generic;使用 UnityEngine;
公共类 MovingPlatform : MonoBehaviour { private Vector3 posA;
private Vector3 posB;
private Vector3 nexPos;
public GameObject Player;
[SerializeField]
private float speed;
[SerializeField]
private Transform childTransform;
[SerializeField]
private Transform transformB;
void Start()
{
posB = childTransform.localPosition;
posB = transformB.localPosition;
nexPos = posB;
}
// Update is called once per frame
void Update()
{
Move();
}
private void OnCollisionEnter2D(Collision2D collision)
{
if (collision.collider.tag == "Player")
{
collision.collider.transform.SetParent(transform);
}
}
private void OnCollisionExit2D(Collision2D collision)
{
if (collision.collider.tag == "Player")
{
collision.collider.transform.SetParent(null);
}
}
private void Move()
{
childTransform.localPosition = Vector3.MoveTowards(childTransform.localPosition, nexPos, speed * Time.deltaTime);
if (Vector3.Distance(childTransform.localPosition,nexPos) <= 0.1)
{
ChangeDestination();
}
}
private void ChangeDestination()
{
nexPos = nexPos != posA ? posA : posB;
}
}
解决方案
移动(); 应该在lateupdate中执行,否则你会设置玩家的位置,稍后物理系统会更新它,导致卡顿。
另一种解决方案是直接向下投射并将您的游戏对象放在碰撞点上(加上某种偏移)
推荐阅读
- ios - ViewController 总是加载相同的链接
- facebook - 域被 Instagram 和 Facebook 封锁
- javascript - From an array of objects, extract value of two properties into an array
- c++ - Comparing Floats in a vector
- docker - nginx docker撰写重定向延迟
- python - Django rest框架在序列化程序中检索列表
- javascript - 特殊字符未在 html 按钮标题中正确显示
- java - 如何将版本添加到我的 java jar 并从命令行查看它(不使用 MANIFEST.MF)
- javascript - 如何有条件地检查对象值是否设置或等于 smth 并跟踪更改?
- visual-studio-2017 - Visual Studio 2017 Enterprise、IIS 10、Windows Server 2016、Web Deploy 5 错误:“确保已安装 Web Deploy”