侏罗纪世界:进化 2
单机游戏
在游戏开发中,NPC上船是一个非常重要的环节,涉及到船的移动、NPC的位置等多个方面。本文将介绍如何实现奥德赛中NPC上船的功能。
1. 船的移动
在奥德赛中,船的移动是由玩家控制的,因此需要在玩家控制船移动的同时,将NPC也随之移动。这可以通过在船上添加一个空物体,并将NPC作为其子物体,然后在船移动时,通过代码将NPC的位置与该空物体保持一致。
public class ShipMovement : MonoBehaviour
{
public float speed = 10f;
public Tranorm emptyObj;
public Tranorm npc;
private void Update()
{
float x = Input.GetAxis(\Horizontal\ float z = Input.GetAxis(\Vertical\ // ship movement
tranorm.position = new Vector3(x, 0, z) * speed * Time.deltaTime;
// npc movement
npc.position = emptyObj.position;
}
}
2. NPC上下船
在奥德赛中,NPC需要上下船,这可以通过将NPC的位置限制在船上实现。当玩家控制船停靠在码头时,可以让NPC下船,反之则可以让NPC上船。
public class ShipDocking : MonoBehaviour
{
public Tranorm dockingPos;
public Tranorm npc;
private bool isDocked = false;
private void Update()
{
if (Input.GetKeyDown(KeyCode.Space))
{
if (isDocked) // npc上船
{
npc.SetParent(tranorm);
npc.position = Vector3.zero;
isDocked = false;
}
else // npc下船
{
npc.SetParent(null);
npc.position = dockingPos.position;
isDocked = true;
}
}
}
}
3. NPC对话交互
在奥德赛中,NPC需要和玩家进行对话交互,这可以通过在NPC身上添加一个对话框并在玩家与NPC距离一定范围内时,让对话框出现实现。
public class NPCInteraction : MonoBehaviour
{
public float interactDistance = 5f;
public GameObject dialogBox;
public Tranorm player;
private void Update()
{
float distance = Vector3.Distance(tranorm.position, player.position);
if (distance