隐藏播放器时隐藏树木

时间:2018-11-19 18:28:07

标签: c# unity3d tree raycasting unity3d-terrain

我已经创建了一个3D游戏,该游戏结合地形和某些模型,使玩家可以走到他想要的任何地方,并且摄像机跟随他。

我的问题是,当用户在树后面时,如何使树透明?

我已经使用Ray投射对其他模型进行了处理,但是树木是地形的一部分,因此我得到的是地形材质,而不是特定的树木。

有什么想法吗?

预先感谢

2 个答案:

答案 0 :(得分:0)

最好的解决方案是从摄影机开始向前发出光线,然后将摄影机比碰撞点放得更远,以至于看不到树。

Ray ray = new Ray(oldCam.position, oldCam.forward);
RaycastHit hit;

if (Physics.Raycast(ray, out hit, 5)){
cam.position = hit.point + oldCam.forward;
} else
cam.position = oldCam.position;

请记住将旧相机放置在应该放置的位置,以便相机不会离开并停留在那里,并且在此之前,相机和旧相机具有相同的位置和旋转代码,然后您只需改变他们的位置。我的意思是我不知道是否可以,但是您可以从中得出结论。

对不起,我来自西班牙。

答案 1 :(得分:0)

确定问题

树木是地形的一部分,如果您需要制作树木,则可以轻松完成。这些树将具有一类预制物,只要游戏对象与任何树发生碰撞,碰撞任务或说事件都会执行

解决方案

很容易在地形的随机位置上创建数千棵树,然后可以通过标记轻松地完成碰撞,而在对撞机代码中将用于生成树木的代码。树木将被禁用。 Ienumerator可以应用在update方法中。 waitForSeconds(30)将等待30秒,然后输入代码

gameobject.setactive(true)

将树木恢复到各自的位置

用于在启动方法中的随机位置创建树的代码

 public GameObject trees;
     for (int i = 0; i < 300; i++)
        {
            Vector3 localPosition = new Vector3(Random.Range(-200, 100), 0 , Random.Range(-200, 100));
            Instantiate(trees, localPosition, Quaternion.identity);
        }