2

我有一个字符控制器,它以恒定的速度沿 z 轴移动。我想知道角色控制器下的楼层名称。角色控制器永远不会与地板发生碰撞。这是一个平行运动。我使用 Raycast 在 C# 中找到地板,使用:

myray = Camera.main.ScreenPointToRay(Input.mousePosition);
if (Physics.Raycast(myray, myhit, 1000)) {
    Debug.DrawLine (ray.origin, hit.point);
    print(myhit.collider.name);
}

这给出了一个错误。有没有更好的解决方案?

4

1 回答 1

2

很难说出您的问题是什么,但是将此行为附加到您的角色控制对象将获得光线投射命中的第一个对象的名称。

我正在使用一个倒置的图层蒙版来忽略我将字符控制对象设置为的“播放器”图层。这样光线投射就不会击中地板之前的物体。

using UnityEngine;
using System.Collections;

public class GetFloorName : MonoBehaviour 
{
    public string NameOfRaycastHitObject;

    void Update () 
    {
        RaycastHit hitInfo;
        int layerMask = ~(1 << LayerMask.NameToLayer("Player"));
        float distance = 100f;

        if (Physics.Raycast(transform.position, Vector3.down, out hitInfo, distance, layerMask))
        {
            NameOfRaycastHitObject = hitInfo.collider.name;
        }
    }
}
于 2013-02-12T06:51:25.843 回答