[英]Moving platform in Unity 3D
我需要制作一个平台,当玩家进入时它会向上移动。
移动平台.cs
public class MovingPlatform : MonoBehaviour
{
[SerializeField]
private Vector3 newPosition;
void Start()
{
newPosition = new Vector3(transform.position.x, transform.position.y + 5, transform.position.z);
}
void OnTriggerEnter(Collider other)
{
if (other.gameObject.CompareTag("Player"))
{
transform.position = Vector3.MoveTowards(transform.position, newPosition, 4 * Time.deltaTime);
}
}
}
我的问题是平台只向上移动了一点并且没有玩家。
原因,平台只移动一次是由于OnTriggerEnter
在进入触发器时被调用,而不是停留在其中。 如果您希望在其中不断调用它,请改用OnTriggerStay
或在OnTriggerEnter
和OnTriggerExit
方法中分配 boolean 值,并在Update
/ FixedUpdate
。
关于没有播放器移动的平台,我假设播放器是物理 object 并且您希望它们被它推动。 发生这种情况的潜在原因:
它使用OnCollisionEnter
而不是OnTriggerEnter
,因为在这种情况下它似乎更合适(如果要使用它,请确保有一个非触发对撞机)。
using UnityEngine;
public class MovingPlatform : MonoBehaviour
{
[SerializeField]
private Vector3 targetPosition = default;
private bool touchingPlayer = false;
private void Start()
{
targetPosition = new Vector3(
transform.position.x,
transform.position.y + 5f,
transform.position.z);
}
private void FixedUpdate()
{
if (touchingPlayer)
{
transform.position = Vector3.MoveTowards(
transform.position,
targetPosition,
4f * Time.fixedDeltaTime);
}
}
private void OnCollisionEnter(Collision collision)
{
if (collision.gameObject.CompareTag("Player"))
touchingPlayer = true;
}
private void OnCollisionExit(Collision collision)
{
if (collision.gameObject.CompareTag("Player"))
touchingPlayer = false;
}
}
代替使用 Vector3s 移动平台,创建一个 animation,当玩家进入触发区域时播放。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.