我正在为一个学校项目开发 3D 游戏,其中有三个可选择的角色,大小各不相同,我编写了一些代码来制作它,以便相机连接到所选角色。我遇到的一个问题是,无论选择哪个角色,相机都保持在相同的位置,这使得选择较小的角色并且视角太高或选择更大的角色并且视角太低有点尴尬。我要提到的是,我的角色选择的工作方式是,一旦选择了一个,它就会在游戏场景中创建一个预制件的“克隆”,这让我的实验有点复杂,因为我只能看到变化,而游戏正在运行,因此很难保存更改。我已经在主摄像头上附加了 CameraFollow 脚本 3 次,每次都是独立的组件,认为它可能会产生效果,但无论如何它仍然固定在同一个地方。我将附上屏幕截图和相关脚本。
角色选择脚本:
using UnityEngine;
using UnityEngine.SceneManagement;
public class CharacterSelection : MonoBehaviour
{
public GameObject[] characters;
public int selectedCharacter = 0;
public void NextCharacter()
{
characters[selectedCharacter].SetActive(false);
selectedCharacter = (selectedCharacter + 1) % characters.Length;
characters[selectedCharacter].SetActive(true);
}
public void PreviousCharacter()
{
characters[selectedCharacter].SetActive(false);
selectedCharacter--;
if (selectedCharacter < 0)
{
selectedCharacter += characters.Length;
}
characters[selectedCharacter].SetActive(true);
}
public void StartGame()
{
PlayerPrefs.SetInt("selectedCharacter", selectedCharacter);
SceneManager.LoadScene(2, LoadSceneMode.Single);
}
}
角色加载脚本:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using TMPro;
public class LoadCharacter : MonoBehaviour
{
public GameObject[] characterPrefabs;
public Transform spawnPoint;
public TMP_Text label;
void Start()
{
int selectedCharacter = PlayerPrefs.GetInt("selectedCharacter");
GameObject prefab = characterPrefabs[selectedCharacter];
GameObject clone = Instantiate(prefab, spawnPoint.position, Quaternion.identity);
label.text = prefab.name;
}
}
相机跟随脚本:
using System.Collections;
using System.Collections.Generic;
using Mono.CompilerServices.SymbolWriter;
using Unity.VisualScripting;
using UnityEngine;
public class CameraFollow : MonoBehaviour
{
[SerializeField] Transform player;
[SerializeField] Vector3 offSet;
void Update()
{
transform.position = player.position + offSet;
}
}
在主摄像头下使用3个组件中的脚本不起作用,我还尝试将“克隆”复制到游戏场景中,这样我就可以在不运行游戏的情况下访问它们,但没有成功。我觉得最令人沮丧的是,一旦从角色选择菜单中选择预制件,它们就会作为克隆加载,除非游戏正在运行,否则我无法访问它们,这意味着我将无法保存任何编辑。恐怕在加载角色后尝试向角色添加动作脚本时可能会出现同样的问题。我对 Unity 不是很有经验,现在只使用它大约 2 周,我的问题对我来说太具体了找到有关它的教程。如果有人可以提供帮助并给出初学者可以理解的答案,特别是关于整个克隆情况以及如何处理它,那将不胜感激。