我希望我的物体在玩家靠近时掉下

时间:2019-05-08 17:55:08

标签: c# unity3d game-development

当玩家到达那个场景时,我希望我的物体掉下来。我的游戏地图很长,我希望它们在启动游戏时不会掉落。视图中是否有任何代码可供玩家检测?让物体掉下来?

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class FallDown : MonoBehaviour
{
       public float fallSpeed = 8.0f;

    //Variables for starting position and length until reset
    private Vector3 _startingPos;
    public float FallDistance = 5f;

    void Start()
    {
        transform.Translate(Vector3.down * fallSpeed * Time.deltaTime, Space.World);
        // Save starting position
        _startingPos = transform.position;
    }

    void Update()
    {
        transform.Translate(Vector3.down * fallSpeed * Time.deltaTime, Space.World);

        // If the object has fallen longer than 
        // Starting height + FallDistance from its start position
        if (transform.position.y > _startingPos.y + FallDistance)
        {
            transform.position = _startingPos;
        }
    }
}

2 个答案:

答案 0 :(得分:0)

您是否尝试过使用碰撞器实现此行为?

要做到这一点,您要做的就是向您的播放器和下落的物体中添加一个对撞机组件和一个RigidBody。

一旦添加了它们并配置了它们的参数,就可以使用 OnColissionEnter 方法检查碰撞。每当持有脚本的GameObject检测到碰撞时,都会触发此方法。在您的情况下,坠落的物体应将其固定住。

private void OnCollisionEnter(Collision other)
{
    //MAKE THE OBJECTS FALL
}

答案 1 :(得分:0)

虽然以上答案是正确的,但在这种情况下,碰撞器可能不是您想要实现的。当您希望物体在玩家与物体相距特定距离时掉落时,碰撞器通常会用来检测碰撞。为此,我建议先添加对玩家GameObject的引用:

private GameObject playerRef;

然后在“开始”功能中找到播放器:

playerRef = GameObject.Find("yourPlayerGameObjectNameHere");

通过找到它们(如上)或通过检查器传递对它们的公共引用来获取要掉落的GameObject。之后,您可以在每个GameObject和玩家之间使用Vector3.distance,如下所示:

if( Vector3.Distance(player.transform.position, fallingObject.transform.position) < yourDistanceHere ){
    // Make the object fall
}