繁体   English   中英

Unity 3D 中的移动平台

[英]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或在OnTriggerEnterOnTriggerExit方法中分配 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;
    }
}

https://streamable.com/mbevlw

代替使用 Vector3s 移动平台,创建一个 animation,当玩家进入触发区域时播放。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM