커뮤니티
포인트
쿠폰
내 강의실
국비 신청 내역
증명서
계정
로그아웃
학습 질문
개발 일지
나의 활동
답변 완료
플레이시 카메라 안움직임
[왕초보] Unity로 메타버스 3D 게임 만들기 v0
5주차
북마크
김*준
댓글
1
추천
0
조회수
13
조회수
13
답변 완료

* 겪고 있는 문제 상황을 최대한 자세하게 작성해주세요.

* 문제 해결을 위해 어떤 시도를 해보았는지 구체적으로 함께 알려주세요.


코드스니펫 활용하여 전부 에러없이 작성한거 같은데 , 게임 플레이하면 게임매니저가 플레이어를 인식 못하고 고정되어 있습니다. 생성된 클론을 player transform에 드래그앤드랍 하면 되긴 하지만 자동으로 안되서 뭐가 문제인지 모르겠습니다. 어디서부터 잘못된건지 못찾겠어요.....;;;



스파르타 즉문즉답




작성한 코드 및 에러 메세지

오류 발생 시, 작성한 코드 전체와 에러 메시지를 첨부해 주세요.

using UnityEngine;
using System.Collections;
using TMPro;
using System.Runtime.CompilerServices;


public class GameManager : MonoBehaviour
{
    public static GameManager Instance;
    public bool IsGameEnd;
    public Vector3 currentSavePoint;


    public Transform playerTransform;


    [SerializeField] private TextMeshProUGUI timeTxt;
    [SerializeField] private TextMeshProUGUI bestScoreTxt;
    [SerializeField] private GameObject[] CharacterPrefabs;


    private PlayerAnimatorController animatorController;
    private float elaspedTime = 0f;
    private float bestScore = 0f;


    void Start()
    {
        Instance = this;


        animatorController = Instantiate(CharacterPrefabs[PlayerPrefs.GetInt("SelectedCharacter", 0)], currentSavePoint, Quaternion.identity).GetComponent<PlayerAnimatorController>();


        IsGameEnd = false;


        timeTxt.text = $"{elaspedTime:0.00}";
        bestScore = PlayerPrefs.GetFloat("BestScore", 99.99f);
        bestScoreTxt.text = $"BEST : {bestScore:0.00}";
    }


    void Update()
    {
        if (IsGameEnd) return;
        elaspedTime += Time.deltaTime;
        timeTxt.text = $"{elaspedTime:0.00}";
    }


    public void EndGame(bool isWin)
    {
        StartCoroutine(StopGameGradually());
        IsGameEnd = true;
        if (isWin)
        {
            if (elaspedTime < bestScore) PlayerPrefs.SetFloat("BestScore", elaspedTime);
        }
    }


    IEnumerator StopGameGradually()
    {
        float time = 0f;
        while (time < .5f)
        {
            time += Time.deltaTime;
            Time.timeScale = Mathf.Lerp(1f, 0f, time * 2f);
            yield return null;
        }
    }
}

Tip 2) Ctrl+A(맥의 경우 Command+A) 단축키로 코드를 한 번에 선택할 수 있어요!


using UnityEngine;


public class PlayerCameraController : MonoBehaviour
{
   
    [SerializeField] private Vector3 cameraOffset;


    private Camera cam;


    void Start()
    {
        cam = Camera.main;
              
    }


    void LateUpdate()
    {
        if (GameManager.Instance.playerTransform == null) return;
        HandleCamera();
    }


    private void HandleCamera()
    {
        Quaternion playerRotation = GameManager.Instance.playerTransform.rotation;
        Vector3 rotatedOffset = playerRotation * cameraOffset;
        cam.transform.position = GameManager.Instance.playerTransform.position + rotatedOffset;
        cam.transform.LookAt(GameManager.Instance.playerTransform);
    }
}


취소
 공유
취소
댓글 0
댓글 알림
나의얼굴