我用反射创建了玻璃。 这个想法是当玩家靠近窗户时看到玩家在窗户上看时的倒影。
玻璃反射正在起作用,并且在层次结构中已禁用。我稍后将在游戏中启用玻璃反射。
这是玻璃打开时的屏幕截图: 我将玻璃杯放在窗户上:
这是播放器的屏幕截图。播放器的子名称为NAVI。 NAVI位于播放器的前方: 玩家有一个刚体。在左侧NAVI对象的屏幕截图中,以及在播放器检查器设置右侧的屏幕截图中:
此脚本不是固定在玻璃上,而是固定在玻璃上:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class ItemAction : MonoBehaviour
{
public RotateCamera rotatecamera;
public GameObject glass;
public GameObject player;
public void Init()
{
player.transform.localPosition = new Vector3(transform.localPosition.x - 1, transform.localPosition.y, transform.localPosition.z);
glass.SetActive(true);
}
}
这是窗口的屏幕截图,其中附带了脚本:
这个想法是,当在游戏中某个地方调用Init方法时,它将使玩家尽可能靠近窗户,从而看到玩家在玻璃板上的反射。
但是相反,玩家是从地板上掉下来并保持不间断的跌倒。
答案 0 :(得分:4)
您正在使用窗口的本地位置来设置播放器的本地位置。而是使用position
并仅更改播放器的x分量:
float paddingDistance = 1f; // Change this to adjust the padding
player.transform.position = new Vector3(transform.position.x - paddingDistance,
player.transform.position.y,
player.transform.position.z);
问题是它仅适用于以这种方式旋转的玻璃。如果要在任何这样的玻璃方向上进行此操作,都可以使平面与玻璃平行,但间隔一定距离,然后将播放器移到该平面上的最近点。假设玻璃垂直于其transform.left
方向:
float paddingDistance = 1f; // Change this to adjust the padding
Vector3 paddingPoint = transform.position + transform.left * paddingDistance;
float paddingToPlayerAlongLeft = Vector3.Dot(transform.left,
player.transform.position - paddingPoint);
// closest point to player.transform.position on padding plane
player.transform.position = player.transform.position
- paddingToPlayerAlongLeft * transform.left;
但是,即使这仅适用于玻璃的一侧。如果要在玻璃的任一侧进行此操作,则需要确定播放器是否在左侧(我们可以使用Vector3.Dot
进行此操作),然后按照相应的方向制作平面:< / p>
float paddingDistance = 1f;// Change this to adjust the padding
float glassToPlayerAlongLeft = Vector3.Dot(player.transform.position - transform.position,
transform.left);
float paddingLeftMod = glassToPlayerAlongLeft > 0f ? 1f : -1f;
float paddingToPlayerAlongLeft = glassToPlayerAlongLeft - paddingDistance * paddingLeftMod;
// closest point to player.transform.position on padding plane
player.transform.position = player.transform.position
- paddingToPlayerAlongLeft * transform.left;
但是,只有在玻璃完全垂直的情况下,这才有效。如果玻璃不是总是垂直的,那么您可以找到玩家高度处水平面与填充平面的线相交点,然后将玩家位置设置为该线上的最接近点