728x90

 

 

두번째 사람부터 방을 못들어가면서 이런 에러가 나왔다.

보면 SQL logic error no such column: XXX 라고 되어 있다는 건, 컬럼 XXX가 없단다.

// 실제 방 생성  
void CreateRoom()  
{  
RoomOptions roomOptions = new RoomOptions();  
roomOptions.MaxPlayers = (byte)desiredMaxPeople; // 방 최대 인원 설정

    // 방의 사용자 정의 속성 설정
    Hashtable customProperties = new Hashtable
    {
        { "AA", "A값" },
        { "BB", "B값" },
        { "CC", "C값" }
    };

    roomOptions.CustomRoomProperties = customProperties;
    roomOptions.CustomRoomPropertiesForLobby = new string[] { "AA", "BB", "CC" };

    // 방 생성 시 올바른 로비 타입과 설정 사용
    PhotonNetwork.CreateRoom(null, roomOptions, selectLobby); // SQL 로비에서 방 생성
    Debug.Log("새로운 방을 생성했습니다.");
}

 

대강 이런식으로 방을 생성한다고 쳤을때, 내가 임의로 적어 넣은 컬럼명 AA, BB, CC가 문제였던 것이다.
C0, C1, C2이런식으로 해야 한단다.
문서에 써있다.

그럼 빠이

728x90
반응형
728x90



 

원하는 거: 그냥 단순히.. 슬라이더를 원형으로 하고 싶었고 핸들을 잡고 직접 돌리고 싶다.

아래 사진 참고.

 

검은 점을 잡고 돌리는 슬라이더

 

내가 원하는 건 위 사진의 검은 점을 잡고 원형으로 돌렸을때, 그 위치를 따라오면서 원의 값이 바뀌었으면 했다.

원리를 쉽게 말하자면 아래 사진을 보면 된다.

내 마우스의 위치가 A에 있을때 B에 해당하는 위치에 슬라이더 값이 있어야 한다는 뜻이다.

 

슬라이더 핸들이 드래그 중인 마우스의 위치와 직선상에 있어야 한다는게 포인트.

 

 

 

소스를 바로 봐 보자.

Canvas의 Render Mode가 Camera인 경우

using UnityEngine;
using UnityEngine.EventSystems;
using UnityEngine.UI;

public class CircularSlider : MonoBehaviour, IDragHandler, IPointerDownHandler
{
    public RectTransform handle; // 핸들 오브젝트
    public RectTransform centerPoint; // 중심점 오브젝트(따로 깡통 오브젝트 만들기)
    public Canvas canvas; // 현재 사용 중인 캔버스
    public Text valueText; // 값을 표시할 텍스트
    public Image fillImage; // 모드가 Radial 360 fill인 이미지

    public int maxChips = 280; // 최대 값 (100%에 해당)
    private float radius; // 중심점과 핸들 사이의 고정된 거리 (반지름)
    private float maxAngle = 260f; // 최대 각도 (260도)
    private float currentAngle = 0f; // 현재 핸들의 각도

    void Start()
    {
        // 중심점과 핸들 사이의 초기 거리(반지름)를 계산
        radius = Vector2.Distance(handle.anchoredPosition, centerPoint.anchoredPosition);
        UpdateHandlePosition(maxAngle); // 초기 위치를 0%로 설정
    }

    public void OnPointerDown(PointerEventData eventData)
    {
        UpdateHandlePosition(eventData);
    }

    public void OnDrag(PointerEventData eventData)
    {
        UpdateHandlePosition(eventData);
    }

    private void UpdateHandlePosition(PointerEventData eventData)
    {
        // 마우스의 화면 좌표를 캔버스의 로컬 좌표로 변환
        Vector2 localMousePosition;
        RectTransformUtility.ScreenPointToLocalPointInRectangle(centerPoint, eventData.position, canvas.worldCamera, out localMousePosition);

        // 중심점에서 마우스 위치 사이의 벡터를 계산
        Vector2 direction = (localMousePosition - (Vector2)centerPoint.anchoredPosition).normalized;

        // 마우스 위치로부터 각도 계산 (0~360도)
        float angle = Mathf.Atan2(direction.y, direction.x) * Mathf.Rad2Deg;
        if (angle < 0) angle += 360; // 각도를 0~360도로 조정

        // 시계방향으로 돌 때 각도 제한
        if (angle > maxAngle)
        {
            currentAngle = maxAngle; // 시계방향으로 최대값을 넘어가면 멈춤
        }
        else
        {
            currentAngle = Mathf.Clamp(angle, 0, maxAngle);
            // 핸들의 새로운 위치 계산: 중심점에서 방향 벡터에 반지름을 곱한 거리만큼 이동
            Vector2 newPosition = (Vector2)centerPoint.anchoredPosition + new Vector2(Mathf.Cos(currentAngle * Mathf.Deg2Rad), Mathf.Sin(currentAngle * Mathf.Deg2Rad)) * radius;

            // 핸들의 위치를 업데이트
            handle.anchoredPosition = newPosition;

            // 현재 값 및 이미지 업데이트
            UpdateValueText();
            UpdateFillImage();
        }

    }

    private void UpdateHandlePosition(float angle)
    {
        // 초기 위치 설정 함수
        currentAngle = angle;
        Vector2 newPosition = (Vector2)centerPoint.anchoredPosition + new Vector2(Mathf.Cos(currentAngle * Mathf.Deg2Rad), Mathf.Sin(currentAngle * Mathf.Deg2Rad)) * radius;
        handle.anchoredPosition = newPosition;
        UpdateValueText();
        UpdateFillImage();
    }

    private void UpdateValueText()
    {
        // 각도를 최대 칩 수로 변환하여 텍스트 업데이트
        // currentAngle이 최대일 때 0이 표시되도록 반대로 계산
int currentValue = Mathf.RoundToInt((1 - (currentAngle / maxAngle)) * maxChips);

        valueText.text = currentValue.ToString();
    }

    private void UpdateFillImage()
    {
        // 각도를 0에서 1 사이의 값으로 변환하여 Radial Fill에 적용
        // FillAmount는 핸들이 움직인 비율로 설정해야 합니다.
        fillImage.fillAmount = currentAngle / 360;
    }
}

 

 

 

주석을 친절히 써놨으니, 대강 알것이다...

 

 

 

결과물:

근데 지금 보니 내가 색상을 반대로 해놨네;; 숫자가 올라갈때 색상이 채워져야 하는데ㅇㅅㅇ ㅋㄷㅋㄷ

뭐 아무튼..

 

UI는 정말 딱 참고만 하시고...

내가 한 방법은.

두 개의 원 이미지를 만들고 레이어상 뒤에 원을 크게 만들어서 지금처럼 초록색을 넣고 모드를 radial 360 fill로 넣었다. 

핸들은 0이어야 하는 지점에 미리 가져다 놓았다.

728x90
반응형
728x90

 

 

 

 

 

 

 

안녕하세요.

 

추리게임 초동수사에 대해 의문점을 풀어드리는 글입니다.

이 부분은 좀 궁금했다. 하는 점을 남겨주시면 성심성의껏 이 게시글에 계속해서 추가하겠습니다.

 

 


 

 

스포주의!!

 

먼저 플레이 후 글을 읽어주세요~~

 

 

 

----

질문 출처: 구글플레이 리뷰

의아한 점:

미녀는 상당히 치밀하고 영악한 면이 있습니다. 목적을 달성하는 데에 필요한 것을 알아내고, 그것을 얻기 위해 무언가를 계획하고 또 그 계획을 실행하는 일을 지금까지 성공적으로 마쳐왔죠. 그런데 그런 미녀가 >자신이 김청소에게 약을 던지면 그 약이 결과적으로 담금주에 들어갈 것이다< 라는 다소 빈약한 필연성을 기반으로 사건을 계획한 것이 조금 납득하기 어려웠습니다. 어쩌면 제가 스토리를 오독한 것일지도 모르지만, 제 해석에 한해 느낀 아쉬운 점입니다. 너무 마음에 드는 게임이라 되려 아쉬운 점이 크게 느껴지는 것 같아요. 재미있었습니다!

 

 

답변:

오독은 아니고 아주 합리적인 생각입니다. 정말 꼼꼼히 플레이 해주셨군요.

"자신이 김청소에게 약을 던지면 그 약이 결과적으로 담금주에 들어갈 것이다"에서 나 미녀는 약 배달의 매개체가 "담금주"가 될지는 몰랐어도, 결국 약은 어딘가에 들어가 자신에게 되돌아 올 것이라는 것에 대해 확신했습니다.

왜냐하면, 나 미녀는 나 언니의 "인성"을 알고 있었기 때문입니다. 이 부분은 다소 추상적인 이유가 될 수 있는데요.

일단, 제가 생각한 나 미녀의 생각 흐름은.

 

1. 어떤 경로로든 나 언니에게 치욕스러움을 준다 - 나 언니가 무릎꿇고 반성문을 읽게하는 영상을 찍음

2. 나 언니라면 나 미녀에게 앙갚음을 할 것이다 - 나 언니의 인성 박살은 곳곳에서 나옵니다.

3. 나 언니에게 트리거를 준다 - "이걸 먹으면 나 미녀가 아프다"

 

나 미녀의 이런 생각으로 분명 자신에게 약이 돌아 올 것이라고 확신했습니다. 나 미녀나 우리 입장에서 그건 독약이지만, 나 언니에게 그 약은 그냥 먹으면 배가 좀 아픈 진통제였거든요. 여태까지의 인성을 보자면 약을 안타는게 더 이상하게 끔 설계를 해놨습니다만.. 설득이 안된다면 그건 캐릭터 설정 실패겠죠...ㅠ...큽...

-> 또한, 바닥에 떨어진 약을 나 언니가 안가져갔다면, 나 미녀가 회수 했을것 같네요.

 

하지만, 나 미녀도 언제? 라는 것 까지는 100%조절할 수는 없었는데요. 나 미녀는 확률을 높일 수 있는 방법을 선택해야 했습니다.

3월5일 새벽에 치욕을 안겨주고, 당일 저녁 친구들과 술파티를 한다. 무방비한 상태에서 나 언니의 복수를 기다린다.

 

아마 이 부분에서 너무 안일한 장치가 아닌가? 하는 의문이 들었을 것 같아요. 제가 봐도 그러니까요.

하지만, 나 미녀에게 '필연'은 필요가 없었습니다.

그 날이 아니면, 다음에 또 하면 되거든요. 다만, 아쉬웠을 뿐일 거에요. 사실 그게 끝이었답니다.

-> 이게 성립하려면 약이 되돌아 올 것이라는 걸 확신을 줘야 하는데, 위에서 말했듯 아마 그부분을 좀 더 보강을 못했던 것은 아닐까 생각이 듭니다.

아무튼, 만약 그 날이 3월 5일이 아닌 다른 날이 되었다면, 그 날이 추리게임에 등장을 했을거에요.

-> 이 부분을 지금 작성하면서 생각해 보자면, 그 전에 실패를 한 전적을 보여줬더라면, 더 설득력이 있었을 것같네요! 참고해야겠어요.

 

조금은 설득이 되었을까요? 아무래도 말씀하신 부분은 구체적인 증거를 기반한 추리라기 보다는 심리추리를 해야 했던 부분이라... 누군가는 납득을 할 수 있어도 누군가는 납득 할 수 없는 이유로 보일 것 같아요. 현생을 살아갈때도 똑같은 말을해도, 모두가 다르게 받아들이니까요. 그건 어쩔 수 없는 일이라고 생각하고, 감수하고 만든거랍니다.

그러니 그 부분에 의문을 가진 것은 너무나도 합리적인 생각이고, 꼼꼼히 플레이했다는 증거지요.

 

제가 질문을 잘못 이해하고 다른 답변 단거라면 댓글 부탁드립니다.

-> 리뷰를 읽으니 수다의 욕구가 치밀어 올라서 이야기가 샜을 것같아서요 ㅠ

그리고 애정어린 리뷰 정말 감사드립니다.

(이 글을 읽으실지는 몰겠지만... ps. 근데 글을 왤케 잘쓰세요.)

 

 

----------------------------------------

 

 

 

 

 

 

 

 

 

 

 

 

728x90
반응형
728x90

 

Assets/Plugins/Android/gradleTemplate.properties

에다가

android.enableR8 = true

를 넣어준다.

 

만약 gradleTemplate.properties파일이 없다면.

 

project setting > Player > Publishing Settings > Build > Custom Gradle Properties Template에 체크한다.

그럼 로딩되다가 파일이 생긴다.

 

 

여기 빨간 상자에 체크

 

 

 

아래는 내 gradleTemplate.properties파일 코드.

org.gradle.jvmargs=-Xmx4096m
org.gradle.parallel=true

unityStreamingAssets=your_streaming_assets_path_here
# Android Resolver Properties Start
android.useAndroidX=true
android.enableJetifier=true
# Android Resolver Properties End

additional_properties_here
android.enableR8=true

 

 

 

 

 

 

 

 

728x90
반응형
728x90

 

 

빌드시 이런 에러가 나오면 중복된 Class가 있다는 것이다.

 

 

 

해결방법:

 

1. 프로젝트 영역에서 " 2"를 검색해보자. 그냥 2가 아니고 "띄어쓰기2"

 

2. 그럼 파일이름 끝에 " 2"가 있는게 있을 것이다.

예) AndroidManifest 2.xml
이런식으로.

 

3. 그걸 지운다. 

 

4. 그럼 다시 빌드를 하여, 또 다른 빌드에러를 맛보러 간다.

 

728x90
반응형
728x90

 

 

"탐독: 문장 추리게임 & 워드퍼즐" 게임을 출시했다.

 

문장 추리게임이라고 써놓긴했지만, 추리라기 보단... 문맥 파악..?

 

유명 고전 소설을 읽으면서 문장 빈칸을 맞추는 게임이다.

 

 

 

이건 보통 난이도 일때!. 

빈칸은 랜덤으로 나오긴하지만, 연속적이면 조금 더 어려워진다.

하지만, 문맥과 글자 길이를 보면 왠지... 알 것 같기도!?

 

그리고 글을 읽을 수 밖에 없는 구조라서 책을 읽고 싶어하는 사람들에게 짬짬이 글도 읽게 해주는 게임이 되는 것이다~~~~~!!!

난 재밌는데...! 정말 재밌는데!!!

 

많관부~~

 

 

 

 

 

 

 

https://apps.apple.com/kr/app/%ED%83%90%EB%8F%85-%EB%AC%B8%EC%9E%A5-%EC%B6%94%EB%A6%AC%EA%B2%8C%EC%9E%84-%EC%9B%8C%EB%93%9C%ED%8D%BC%EC%A6%90/id6581486012

 

‎탐독: 문장 추리게임 & 워드퍼즐

‎耽(즐길 탐), 讀(읽을 독) - 책 좀 읽어야 하는데...라는 마음속 부채감이 있진 않았나요? - 긴 소설을 짧은 문단으로 짬짬이 읽어가며 즐길 수 있는 게임입니다. -------------------------------------------

apps.apple.com

 

728x90
반응형
728x90

 

 

문제 : 자식 아래에 클릭이벤트가 있는 부모가 있는 상태에서 자식을 눌렀을 경우에 부모가 클릭된다.

회색이 부모고, 흰박스가 자식이라 했을때.

 

목표 : Raycast Target 기능을 사용하지 않고, 자식을 눌렀을 때 반응이 없어야 한다

해결 : Raycast Target의 값을 수정하지 않아야 하는 경우. 꼼수지만... 흰박스에 버튼 공갈 컴포넌트를 넣으면된다. Transition은 None으로 주고.

걍 이렇게.

 

 

나야 뭐 정석적으로 하는 사람도 아니고... 나느 이런 경우는 많지 않아서 그냥 이렇게 쓴다.!

728x90
반응형
728x90

 

 

문제: 유니티 에디터에서 드래그로 크기 조정을 하면서 Alt를 누르게 되면 Rect Transform의 값이 NaN가 되는 경우가 있다.

해결: Pivot의 X 또는 Y 값이 0또는 1로 되어 있는게 있는지 확인해봐야 한다.

 

이유:

Alt를 누르고 크기 조정을 하겠다는 뜻은 양쪽으로 같이 크기를 조정하겠다는 것이다.

근데 0 또는 1로 하게 되면 유니티 내의 계산이 이상해진다.

 

예를 들어서.

Pivot Y를 0.9로 하고 Alt와 함께 크기 조정을 해보면, 이상한 비율로 양쪽으로 늘어날 것이다.

비율로 생각했을때 10%는 위로, 90%는 아래로 양쪽으로 늘어나기 때문이다.

 

그러니까... 만약 0 또는 1로 하게 되면 이상한 계산식이 되어 버리는거다.

위쪽은 0%만큼 위로 늘어나고 아래로는 100%만큼 아래로 늘어나야 하는데, 이게 그냥 생각해도 이상하다.

 

 

전부터 가끔 이 에러가 나왔을 때는 무시했는데, 짱나게 굴어서 원인이 뭔지 좀 찾아봤다...

끄읏~

 

728x90
반응형

+ Recent posts