如何检测角色是否已经在另一个游戏对象中?

时间:2017-05-16 12:57:16

标签: c# unity3d unity5

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

public class Move : MonoBehaviour {

    enum MoveProperties
    {
        DirectionStart,
        DirectionEnd
    };

    public float spinSpeed = 2.0f;

    private bool rotate = false;
    private bool exited = false;
    private List<GameObject> prefabs;

    private void Start()
    {
        InstantiateObjects gos = GetComponent<InstantiateObjects>();

        prefabs = new List<GameObject>();
        prefabs = gos.PrefabsList();
    }

    void OnTriggerEnter(Collider other)
    {
        if (other.gameObject.tag == "Player")
        {
            Debug.Log("Player entered the hole");
            rotate = true;
        }
    }

    private void OnTriggerExit(Collider other)
    {
        if (other.gameObject.tag == "Player")
        {
            Debug.Log("Player exited the hole");
            rotate = false;
            exited = true;
        }
    }

    void Rotate()
    {
        if (rotate)
        {
            transform.Rotate(Vector3.up, spinSpeed * Time.deltaTime);
            spinSpeed += 1f;
        }
        if (rotate == false && exited == true)
        {
            transform.Rotate(Vector3.up, spinSpeed * Time.deltaTime);
            if (spinSpeed > 0.0f)
                spinSpeed -= 1f;
        }
    }

    private void Update()
    {
            Rotate();
    }
}

这里有两个触发器:

OnTriggerEnter和OnTriggerExit。

但是如果角色先出去然后又进去,这个触发器就会起作用。或者出去了。但我需要检测角色已经在里面。 没有先出去再次进入。

情况是角色首先在一个地方(对象内的洞),然后我将角色位置改为另一个有洞的物体。在改变位置之后我需要以某种方式检测到角色在第二洞内。

1 个答案:

答案 0 :(得分:6)

  

但是如果角色首先出局,那么这个触发器将起作用   又进去了或者出去了。但我需要检测角色   已经在里面了。没有先出去再次进入。

您正在寻找OnTriggerStay功能。只要两个碰撞者都在彼此内部,每个帧都会始终调用OnTriggerStay

void OnTriggerStay(Collider other)
{

}

如果您决定使用碰撞而不是触发器,还有OnCollisionStay

void OnCollisionStay(Collision collisionInfo) 
{

}