我正在玩FPS,我希望我的玩家能够从头开始构建/建造他们自己的建筑物。我一直在寻找现有的解决方案/理论,但到目前为止还没有找到适合我需求的东西。如果我遗漏了任何东西,请指出正确的方向。
我现在的位置是我有三个预制件;地板,墙壁和门打开。首先,我想要实例化地砖,然后我可以将墙壁放在墙上,并希望能够让墙壁与地砖的边缘/角落对齐。
任何人都可以指出我正确的方向如何做到这一点?另外,我想要的“工作流程”是否有意义?那里有任何陷阱吗?
提前致谢!
更新:这是我在实例化预制件方面所拥有的,虽然这有效(除了它就像我正在拍摄墙壁),我希望墙壁能够突然移动到角落/边缘。最近的楼层(已经以同样的方式实例化了。
[RequireComponent (typeof (CharacterController))]
public class PlayerController : MonoBehaviour {
// Declare prefabs here
GameObject wallPrefab;
// Initialise variables before the game starts
void Awake () {
wallPrefab = (GameObject)Resources.Load( "WoodWall" );
}
// This happens every frame
void Update () {
if ( Input.GetButtonDown("Fire1") ) {
// Instantiate new wall
Instantiate( wallPrefab, cc.transform.position + cc.transform.forward + Vector3.up * 1.0f, wallPrefab.transform.rotation );
}
}
}
答案 0 :(得分:0)
void Start()
{
var down = transform.TransformDirection (Vector3.down); //down might not actually be the down direction of your object, check to make sure
RaycastHit hit;
if (Physics.Raycast(transform.position, down, out hit) && hit.collider.gameObject.name == "myFloorName") //Maybe use tags here instead of name
{
Vector3 floorPos = hit.collider.gameObject.transform.position;
Vector3 floorSize = hit.collider.gameObject.transform.localScale;
this.transform.position = new Vector3(floorPos.x - floorSize.x/2, floorPos.y - this.tranform.localScale.y/2, floorPos.z); //These might need fiddling with to get right
}
}
void Update()
{
}
Vector3.down可能与墙的向下方向不对应,因为这也取决于3d模型,因此您可能需要摆弄它。该位置可能还需要摆弄(这假设y对应于高度,可能不是这种情况),但希望这能让您大致了解如何完成。此外,如果您不知道楼层对象的名称是什么,您可以通过标签进行检查,这可能更容易。
如果还有其他需要澄清的话,请留言,我会回复你