728x90
반응형

GradleTemplates.zip
0.00MB

반응형
728x90
반응형

GradleTemplates.zip
0.00MB

실수로 건드렸다가 큰일 날뻔 ㅜㅠ

반응형
728x90
반응형

아래 처럼 Animation Controller 를 선택하여 Animator 창을 열고
지연이 발생되는 Transition 을 선택한다.

선택하면 Inspector 창에 Settings 부분이 접혀있는데 펼쳐서 Transition Duration(s) 값을 줄인다

위 값은 Animation 이 시작할때 지연시간 값이다.

반응형
728x90
반응형
using UnityEngine;

public class GameManager : MonoBehaviour
{
    private static GameManager instance = null;

    public static GameManager Instance
    {
        get
        {
            if (instance == null)
            {
                instance = new GameManager();
            }
            return instance;
        }
    }

    private void Awake()
    {
        instance = this;
    }
}
반응형
728x90
반응형

Awake 와 Start 는 신에서 최초 한번 실행되는 함수다

하지만 그 사용성이 완전 다르다

스크립트가 비활성화 상태인 경우 변수를 초기화 하거나 할때는 Awake 에서 작업을 한다

즉, GetComponent 등의 작업들은 Awake 에서 이루어 진다고 보면 된다.

Start 는 첫 Update 직전에 호출되는 함수로 Awake 에서 정의된 스크립트 요소들을 사용할 때 사용된다.

즉, 사물의 좌표값등을 가져오거나 액션을 취할때 사용된다고 보면 된다.

반응형
728x90
반응형

호출 순서 FixedUpdate -> Update -> LateUpdate

Update 함수는 매프레임에 따라 호출이 되는 함수로
물리 효과가 적용되지 않은 오브젝트의 움직임이나 단순한 타이머, 키 입력을 받을 때 사용된다.

FixedUpdate 는 프레임을 고정하는것으로 
물리 효과가 적용된(Rigidbody) 오브젝트를 조정할 때 사용된다.
예를 들어, 2명이상이서 하는 온라인 게임을 할 때|
한 사람은 컴퓨터가 좋고, 다른 한 사람은 컴퓨터가 좋지 않은 경우
즉, 컴퓨터가 좋은 사람은 초당 프레임 수가 높고,
컴퓨터가 안 좋은 사람은 초당 프레임수가 낮게 나오게 된다.
그러면 게임 밸런스가 무너지기 때문에
고정적인 프레임수를 뽑아내는 FixedUpdate() 기능을 사용하게된다.

간단하게 말해서,
Update()의 경우는 컴퓨터 성능에 따라 다르게 나오고
FixedUpdate()는 고정된 성능으로 나오는 함수이다.

LateUpdate 가장 마지막에 호출되는것으로 주로 오브젝트를 따가가게 설정한 카메라에 사용된다.

아래는 전체적인 이벤트 순서

https://docs.unity3d.com/kr/530/Manual/ExecutionOrder.html

반응형
728x90
반응형

이부분은 해결하느라 며칠의 시간을 보낸건지 모르겠다

Galaxy S8 에서는 아무문제없이 AR 이 동작했는데

Galaxy S21 에서 AR Camera 가 동작하는 순간 앱이 죽어버렸다.

해결방법은

Player Setting 에서

Other Setting 섹션의 아래 그림에서 노란 박스 부분을 아래 처럼 수정하면 된다.

(Scripeing Backend 를 IL2CPP 로 변경하면 ARM64 가 활성화 되고 이를 체크한다.)

위처럼 하고 빌드하니 AR Camera 가 죽지 않고 실행되었다.

'위 방법을 알려주신 유니티 단톡방에 있는 '뽀로' 님께 다시 한번 감사의 말을 전한다.^^'

반응형
728x90
반응형

예전 폰이 고장나 새폰을 구매해서 연결했는데 위 에러가 발생되면서 디버깅이 되지않았다
최신폰으로 구매를했는데 쩝;;

개발자 모드 켜고 디버깅 허용 했는데 이상하게 컴퓨터를 신뢰하겠는지 여부를 묻는 알림창이 뜨지 않았다

검색을 좀 해보니 컴퓨터와 Android 기기를 재부팅하면 해결되다고 해서 재부팅을 해보았다..
그리고 다시 연결을 하니 이번에는 컴퓨터를 신뢰 하겠냐라는 알림창이 떴고 허용했더니
드디어 디버깅이 가능해 졌다

* 위처럼 device 이름이 시리얼 번호로 나오면 일단 먼가 연결이 완전히 되지 않은것으로 판단하면 된다.

!!결론!!

1. Android 기기 재부팅
2. 컴퓨터 재부팅
3. Android 기기에서 컴퓨터를 신뢰하겠냐는 알람이 뜨고 허용 선택

 

 

반응형
728x90
반응형

 

 

    public Image image;

 

    void Start()

    {

        LoadImage(FilePath);

    }

 

    private void LoadImage(string path)

    {

        byte[] byteTexture = System.IO.File.ReadAllBytes(path);

        Texture2D texture = new Texture2D(0, 0);

        texture.LoadImage(byteTexture);

 

        Rect rect = new Rect(0, 0, texture.width, texture.height);

        image.sprite = Sprite.Create(texture, rect, new Vector2(0.5f, 0.5f));

    }

 

 

image 변수에 Image 를 할당해 주면 그곳에 경로의 이미지가 나타나게된다.

반응형
728x90
반응형

카메라 이동처리 Script

using UnityEngine;

[RequireComponent(typeof(Camera))]
public class FlyCamera : MonoBehaviour
{
    public float initialSpeed = 10f;
    public float increaseSpeed = 1.25f;

    public bool allowMovement = true;
    public bool allowRotation = true;

    public KeyCode forwardButton = KeyCode.W;
    public KeyCode backwardButton = KeyCode.S;
    public KeyCode rightButton = KeyCode.D;
    public KeyCode leftButton = KeyCode.A;

    public float cursorSensitivity = 0.025f;
    public bool cursorToggleAllowed = true;
    public KeyCode cursorToggleButton = KeyCode.Escape;

    private float currentSpeed = 0f;
    private bool moving = false;
    private bool togglePressed = false;

    private void OnEnable()
    {
        if (cursorToggleAllowed)
        {
            Cursor.lockState = CursorLockMode.Locked;
            Cursor.visible = false;
        }
    }

    private void Update()
    {
        if (allowMovement)
        {
            bool lastMoving = moving;
            Vector3 deltaPosition = Vector3.zero;

            if (moving)
                currentSpeed += increaseSpeed * Time.deltaTime;

            moving = false;

            CheckMove(forwardButton, ref deltaPosition, transform.forward);
            CheckMove(backwardButton, ref deltaPosition, -transform.forward);
            CheckMove(rightButton, ref deltaPosition, transform.right);
            CheckMove(leftButton, ref deltaPosition, -transform.right);

            if (moving)
            {
                if (moving != lastMoving)
                    currentSpeed = initialSpeed;

                transform.position += deltaPosition * currentSpeed * Time.deltaTime;
            }
            else currentSpeed = 0f;            
        }

        if (allowRotation)
        {
            Vector3 eulerAngles = transform.eulerAngles;
            eulerAngles.x += -Input.GetAxis("Mouse Y") * 359f * cursorSensitivity;
            eulerAngles.y += Input.GetAxis("Mouse X") * 359f * cursorSensitivity;
            transform.eulerAngles = eulerAngles;
        }

        if (cursorToggleAllowed)
        {
            if (Input.GetKey(cursorToggleButton))
            {
                if (!togglePressed)
                {
                    togglePressed = true;
                    Cursor.lockState = CursorLockMode.None;
                    Cursor.visible = !Cursor.visible;
                }
            }
            else togglePressed = false;
        }
        else
        {
            togglePressed = false;
            Cursor.visible = false;
        }
    }

    private void CheckMove(KeyCode keyCode, ref Vector3 deltaPosition, Vector3 directionVector)
    {
        if (Input.GetKey(keyCode))
        {
            moving = true;
            deltaPosition += directionVector;
        }
    }
}

반응형

+ Recent posts