2025년 4월 26일 토요일

타로카드 무료 운세|하루를 바꾸는 타로 운세

타로카드 운세

타로카드 운세 보기

타로카드를 3장 뽑고, 과거, 현재, 미래 운세를 확인하세요.

#타로카드 #오늘의운세 #무료타로 #타로리딩 #하루운세

2025년 4월 24일 목요일

테트리스로 당신의 성격을 알아보세요!

마인드 피스 테트리스

🧠 마인드 피스 테트리스

당신의 성격을 알아보세요!

점수: 0
0

회전 (W) | 아래로 이동 (S) |왼쪽 (A) |오른쪽 (D)

2025년 4월 18일 금요일

나는 사람일까? NPC일까? 자가진단 심리 테스트

🧠 NPC 자가 진단

🧠 NPC 자가 진단

⚠️ 이 테스트는 100% 재미로 만들어졌어요. 진지하게 받아들이지 마세요! 😊


😎 결과가 재미있었다면 댓글로 공유해주세요!
💬 NPC가 많으면… 우리 세상은 시뮬레이션일지도?
🤯 사람이 많다면, 진짜 현실 맞습니다. 아마도요...

그러니 댓글 달고 통계내어 세상이 시뮬레이션인지 아닌지를 확인해 봐요.

2025년 4월 13일 일요일

웹툰 [ 오늘부터 1일 ] 하연과 서준 : 0123







이미지 클릭 확대됨

2025년 4월 12일 토요일

웹툰 [ 오늘부터 1일 ]

 

오늘부터 1일




서준이 팬클럽: 4 5 6 7 ....작업중


2025년 3월 28일 금요일

[VB6] 폼 종료(X) 버튼 클릭 시 종료 여부 확인하는 방법

 VB6(VB6.0)에서 폼의 종료(X) 버튼을 눌렀을 때, 바로 종료되지 않고 사용자가 종료할지 취소할지 선택할 수 있도록 설정하는 방법을 소개합니다.

종료 버튼(X) 클릭 시 확인 메시지 띄우기

사용자가 X 버튼을 눌렀을 때, "프로그램을 종료하시겠습니까?"와 같은 메시지를 띄워 종료 여부를 선택하도록 만들 수 있습니다.

구현 코드 (Form_QueryUnload 사용)

Private Sub Form_QueryUnload(Cancel As Integer, UnloadMode As Integer)
    ' X 버튼을 눌렀을 때 확인 메시지를 표시
    If UnloadMode = vbFormControlMenu Then
        Dim result As Integer
        result = MsgBox("프로그램을 종료하시겠습니까?",
                 vbYesNo + vbQuestion, "종료 확인")
        
        ' 사용자가 "아니오"를 선택하면 종료 취소
        If result = vbNo Then
            Cancel = True
        End If
    End If
End Sub

코드 설명

  1. QueryUnload 이벤트 활용

    • 폼이 닫히려 할 때 실행되는 이벤트입니다.

    • UnloadModevbFormControlMenu이면 X 버튼을 클릭한 경우입니다.

  2. MsgBox로 종료 확인 메시지 표시

    • vbYesNo + vbQuestion 옵션을 사용하여 "예/아니오" 버튼이 있는 메시지를 띄웁니다.

  3. 종료 여부 결정

    • 사용자가 "예(Yes)"를 선택하면 종료됩니다.

    • 사용자가 "아니오(No)"를 선택하면 Cancel = True로 종료를 취소합니다.

실행 예시

X 버튼을 누르면 다음과 같은 메시지가 표시됩니다.

[종료 확인]
프로그램을 종료하시겠습니까?
[예]  [아니오]
  • [예]를 클릭하면 프로그램이 종료됩니다.

  • [아니오]를 클릭하면 프로그램이 계속 실행됩니다.

응용: 특정 버튼으로만 종료되도록 설정

만약 X 버튼으로는 종료되지 않고, 특정 버튼을 눌러야만 종료되도록 만들고 싶다면 다음과 같이 구현할 수 있습니다.

특정 버튼을 눌러야만 종료되게 만들기

Private Sub Form_QueryUnload(Cancel As Integer, UnloadMode As Integer)
    ' X 버튼으로 종료 방지
    If UnloadMode = vbFormControlMenu Then
        Cancel = True
        MsgBox "이 프로그램은 X 버튼으로 종료할 수 없습니다.", vbInformation, "알림"
    End If
End Sub

' 종료 버튼 (CommandButton) 클릭 시 종료
Private Sub cmdExit_Click()
    Unload Me
End Sub

마무리

이 방법을 활용하면 VB6 프로그램에서 실수로 X 버튼을 눌러 종료되는 것을 방지하고, 사용자에게 종료 여부를 확인할 수 있도록 할 수 있습니다. 필요에 따라 X 버튼을 아예 비활성화하거나, 특정 버튼으로만 종료되도록 변경하는 것도 가능합니다.

2025년 3월 23일 일요일

Blender Bsurface 애드온 사용법

 Blender에서 Bsurface 애드온을 활용하면 Grease Pencil이나 엣지를 이용하여 빠르게 메쉬를 생성할 수 있습니다. 특히 리토폴로지(Retopology) 작업에 유용합니다. 이 글에서는 Bsurface 애드온의 활성화 방법과 구체적인 사용법을 소개합니다.


🔹 Annotation을 활용한 리토폴로지 과정


1️⃣ Bsurface 애드온 활성화

  1. Blender 상단 메뉴에서 Edit > Preferences 를 클릭합니다.

  2. Add-ons 탭으로 이동한 후, 검색창에 Bsurface 입력합니다.

  3. "Mesh: Bsurface GPL Edition" 체크박스를 활성화합니다.

  4. 설정을 저장하려면 "Save Preferences" 버튼을 클릭합니다.

이제 Edit Mode에서 Bsurface 기능을 사용할 수 있습니다.


2️⃣ 리토폴로지할 오브젝트 준비

  1. 리토폴로지를 할 모델(예: 조각된 얼굴)을 선택

  2. Tab 키를 눌러 Edit Mode로 전환


3️⃣ Annotation을 사용하여 가이드라인 그리기

  1. "Placement" 옵션을 Surface로 설정

    • 이렇게 하면 Annotation 선이 모델 표면에 붙음

  2. 리토폴로지를 원하는 부분에 메쉬 가이드라인을 그리기


4️⃣ Bsurface로 면 생성

  1. 우측 Bsurface 패널에서 "Add Surface" 클릭

    • 그러면 Annotation 선을 따라 메쉬가 생성됨

  2. 필요에 따라 Subdivision 값을 조정하여 세부 디테일 수정



2025년 3월 22일 토요일

Blender Curve Extrude & Bevel 사용법 (Taper 적용 예제 포함)

 

1. 개요

Blender에서 Curve를 활용하면 간단한 선을 3D 형태로 변환할 수 있습니다. 특히 Extrude(압출), Bevel(베벨), Taper(테이퍼) 기능을 이용하면 곡선을 더욱 다양하게 변형할 수 있습니다. 이번 포스팅에서는 Taper Curve를 활용하여 유기적인 형태를 만드는 방법을 소개합니다.



2. Taper와 Bevel을 이용한 곡선 변형

2.1 Taper란?

Taper는 한쪽 끝은 가늘고, 다른 쪽 끝은 두껍게 만들 수 있는 기능입니다. 이를 활용하면 점진적으로 변형되는 곡선을 만들 수 있습니다.

2.2 Bevel과 Taper 적용 방법

  1. Shift + A → Curve → Bezier Curve 추가 (메인 곡선)

  2. Shift + A → Curve → Bezier Curve 추가 (Taper 곡선)

  3. 메인 곡선을 선택한 상태에서 Properties Editor → Object Data Properties → Geometry → Taper Object에 만든 Taper Curve를 지정

  4. 곡선의 두께가 Taper 곡선의 형태에 따라 점진적으로 변형됨

3. 실전 예제: 유기적인 튜브 형상 만들기

3.1 기본 세팅

  1. Shift + A → Curve → Bezier Curve 추가 (메인 곡선)

  2. Shift + A → Curve → Bezier Circle 추가 (단면 형상)

  3. 메인 곡선을 선택하고 Bevel Object로 Bezier Circle 지정

3.2 Taper 적용

  1. Shift + A → Curve → Bezier Curve 추가 (Taper 곡선)

  2. 메인 곡선 선택 후 Taper Object에 해당 곡선을 지정

  3. 필요하면 **Edit Mode (탭 키)**에서 Taper 곡선을 변형하여 원하는 형태로 조정

4. 단축키 및 추가 팁

  • H / Alt + H: 곡선 제어점을 숨기거나 다시 표시

  • G / R / S: 곡선 제어점을 이동, 회전, 크기 조절

  • Properties Editor → Geometry → Fill Mode: Full을 선택하면 단면이 채워진 튜브 형태가 됨

5. 마무리

Blender에서 Bevel과 Taper 기능을 활용하면 단순한 곡선도 다채로운 3D 모델로 변형할 수 있습니다. 위의 내용을 참고하여 창의적인 모델링을 시도해 보세요!

2025년 1월 8일 수요일

유니티 김치런 게임 제작: 초간단 Ctrl+C, Ctrl+V로 끝내는 게임 개발 도전!

 

저처럼 코드 입력하기 싫고 실행을 해보고 싶은 분들,

Ctrl+C, Ctrl+V 복사 붙여넣기 해서 사용하세요.

한 번 실행해 보면 유니티 구조적 이해에 많은 도움됩니다.


8. 김치런 튜토리얼 영상 링크

7. 김치런 게임 Heart .cs 소스코드 

6. 김치런 게임 Destroyer .cs 소스코드 

5. 김치런 게임 Spawner .cs 소스코드 

4. 김치런 게임 BackgroundScroll .cs 소스코드 

3. 김치런 게임 Mover .cs 소스코드 

2. 김치런 게임 GameManager .cs 소스코드 

1. 김치런 게임 Player .cs 소스코드 


#Unity #유니티 #kimchirun #김치런 #게임개발 #유니티초보자

2025년 1월 6일 월요일

7. 김치런 게임 Heart .cs 소스코드

저처럼 코드 입력하기 싫고 실행을 해보고 싶은 분들,
Ctrl+C, Ctrl+V 복사 붙여넣기 해서 사용하세요.
한 번 실행해 보면 유니티 구조적 이해에 많은 도움됩니다.

김치런 튜토리얼 영상 링크
https://www.youtube.com/watch?v=A58_FWqiekI


using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class Heart : MonoBehaviour
{
    // 활성화된 하트(체력이 있을 때) Sprite
    public Sprite OnHeart;

    // 비활성화된 하트(체력이 없을 때) Sprite
    public Sprite OffHeart;

    // Sprite를 렌더링하는 SpriteRenderer
    public SpriteRenderer SpriteRenderer;

    // 이 하트 오브젝트가 담당하는 체력 순서 (1번 하트, 2번 하트 등)
    public int LiveNumber;

    // Start 메서드: 시작 시 호출 (현재는 비어 있음)
    void Start()
    {
        // 필요하면 초기화 작업을 여기에 작성
    }

    // Update 메서드: 매 프레임 호출
    void Update()
    {
        // 현재 플레이어의 남은 체력(lives)이 이 하트의 순서(LiveNumber) 이상인지 확인
        if (GameManager.Instance.lives >= LiveNumber)
        {
            // 체력이 있다면 활성화된 하트 Sprite를 표시
            SpriteRenderer.sprite = OnHeart;
        }
        else
        {
            // 체력이 없으면 비활성화된 하트 Sprite를 표시
            SpriteRenderer.sprite = OffHeart;
        }
    }
}

코드 분석

  1. 하트 Sprite 전환:

    • GameManager.Instance.lives 값을 기준으로 LiveNumber와 비교.
    • 현재 체력 값이 LiveNumber 이상이면 OnHeart Sprite를, 그렇지 않으면 OffHeart Sprite를 적용.
  2. 하트의 역할:

    • Heart 오브젝트는 특정 체력 단계(LiveNumber)를 나타냄.
    • 예를 들어, LiveNumber가 1인 하트는 체력이 1 이상일 때 활성화 상태, 그렇지 않으면 비활성화 상태.
  3. SpriteRenderer:

    • 하트 Sprite를 화면에 렌더링하는 컴포넌트.
    • Sprite를 동적으로 변경하여 체력 상태를 반영.

코드 동작

  • 이 스크립트는 각 하트 오브젝트에 부착되어, 플레이어의 체력 상태를 시각적으로 나타냅니다.
  • GameManager에서 관리하는 lives 값이 변경되면, 하트의 활성화 상태가 동적으로 업데이트됩니다.

6. 김치런 게임 Destroyer .cs 소스코드

저처럼 코드 입력하기 싫고 실행을 해보고 싶은 분들,
Ctrl+C, Ctrl+V 복사 붙여넣기 해서 사용하세요.
한 번 실행해 보면 유니티 구조적 이해에 많은 도움됩니다.

김치런 튜토리얼 영상 링크
https://www.youtube.com/watch?v=A58_FWqiekI


using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class Destroyer : MonoBehaviour
{
    // Start 메서드: 시작 시 호출 (현재는 비어 있음)
    void Start()
    {
        // 이 메서드는 비워두었으나, 초기화가 필요하면 여기에 작성
    }

    // Update 메서드: 매 프레임 호출
    void Update()
    {
        // 오브젝트의 x 좌표가 -13보다 작아지면
        if (transform.position.x < -13)
        {
            // 현재 게임 오브젝트를 삭제
            Destroy(gameObject);
        }
    }
}

코드 분석

  1. 오브젝트 위치 검사:

    • Update 메서드는 매 프레임마다 실행되며, 현재 게임 오브젝트의 x 좌표를 검사.
    • x 좌표가 -13보다 작으면 Destroy(gameObject)로 해당 오브젝트를 삭제.
  2. 오브젝트 삭제:

    • Destroy(gameObject)는 현재 스크립트가 붙어있는 게임 오브젝트를 메모리에서 제거.
    • 보통 화면 밖으로 나간 오브젝트나 사용되지 않는 오브젝트를 제거할 때 사용.
  3. Start 메서드:

    • Start 메서드는 게임 오브젝트가 생성될 때 한 번 호출되지만, 이 스크립트에서는 사용하지 않음.

5. 김치런 게임 Spawner .cs 소스코드

저처럼 코드 입력하기 싫고 실행을 해보고 싶은 분들,
Ctrl+C, Ctrl+V 복사 붙여넣기 해서 사용하세요.
한 번 실행해 보면 유니티 구조적 이해에 많은 도움됩니다.

김치런 튜토리얼 영상 링크
https://www.youtube.com/watch?v=A58_FWqiekI

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class Spawner : MonoBehaviour
{
    [Header("Setting")]
    public float minSpawnDelay; // 최소 스폰 지연 시간
    public float maxSpawnDelay; // 최대 스폰 지연 시간

    [Header("References")]
    public GameObject[] gameObjects; // 스폰할 게임 오브젝트의 배열

    // 스크립트가 활성화될 때 호출
    void OnEnable()
    {
        // 최소 및 최대 지연 시간 내에서 랜덤한 시간 후에 Spawn() 호출
        Invoke("Spawn", Random.Range(minSpawnDelay, maxSpawnDelay));
    }

    // 스크립트가 비활성화될 때 호출
    void OnDisable()
    {
        // 모든 예약된 호출 취소
        CancelInvoke();
    }

    // 새로운 오브젝트를 스폰하는 함수
    void Spawn()
    {
        // gameObjects 배열에서 무작위로 하나의 오브젝트를 선택
        GameObject randomObject = gameObjects[Random.Range(0, gameObjects.Length)];

        // 선택된 오브젝트를 현재 Spawner 위치에 생성
        Instantiate(randomObject, transform.position, Quaternion.identity);

        // 다음 Spawn 호출을 랜덤한 시간 후에 예약
        Invoke("Spawn", Random.Range(minSpawnDelay, maxSpawnDelay));
    }
}

코드 분석

  1. 스폰 딜레이 설정:

    • minSpawnDelaymaxSpawnDelay를 이용해 스폰 간격을 랜덤하게 조절.
    • Random.Range(minSpawnDelay, maxSpawnDelay)를 사용해 지정된 범위 내에서 지연 시간을 선택.
  2. 게임 오브젝트 배열:

    • gameObjects 배열에 스폰할 수 있는 오브젝트를 등록.
    • Random.Range(0, gameObjects.Length)로 배열에서 무작위로 하나의 오브젝트를 선택.
  3. OnEnableOnDisable:

    • 스크립트가 활성화(OnEnable)되면 Spawn 호출을 예약.
    • 비활성화(OnDisable)되면 예약된 모든 호출을 취소(CancelInvoke).
  4. Spawn 메서드:

    • 배열에서 무작위로 선택된 오브젝트를 Instantiate를 통해 현재 위치(transform.position)에 생성.
    • 스폰된 오브젝트는 기본 방향(Quaternion.identity)을 가짐.
    • 다음 스폰을 예약하기 위해 Invoke를 재귀적으로 호출.

코드 동작

  • 스크립트가 활성화되면, 무작위 지연 시간 후에 Spawn 메서드가 호출되어 오브젝트가 생성됨.
  • 생성 후에는 또 다른 무작위 지연 시간 후에 다음 Spawn이 호출되며, 반복적으로 동작.
  • 스크립트가 비활성화되면 모든 예약된 호출이 취소되어 스폰이 멈춤.

4. 김치런 게임 BackgroundScroll .cs 소스코드

저처럼 코드 입력하기 싫고 실행을 해보고 싶은 분들,
Ctrl+C, Ctrl+V 복사 붙여넣기 해서 사용하세요.
한 번 실행해 보면 유니티 구조적 이해에 많은 도움됩니다.

김치런 튜토리얼 영상 링크
https://www.youtube.com/watch?v=A58_FWqiekI

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class BackgroundScroll : MonoBehaviour
{
    [Header("Settings")]
    [Tooltip("속도 조절")]
    public float scrollSpeed; // 배경 스크롤 속도 조절 변수

    [Header("랜더러")]
    public MeshRenderer meshRenderer; // 배경에 적용된 Material을 가진 MeshRenderer

    // Start is called before the first frame update
    void Start()
    {
        // 초기화 코드 (현재 비어 있음)
    }

    // Update is called once per frame
    void Update()
    {
        // 배경 텍스처 오프셋 변경을 통해 스크롤 효과 구현
        meshRenderer.material.mainTextureOffset +=
            new Vector2(scrollSpeed * GameManager.Instance.CalculateGameSpeed() / 20 * Time.deltaTime, 0);
    }
}


코드 분석

  1. 속도 조절 (scrollSpeed):

    • scrollSpeed는 기본 스크롤 속도를 조절하는 변수입니다.
    • 이 값을 GameManager.Instance.CalculateGameSpeed()와 결합하여 게임의 진행 상황에 따라 스크롤 속도를 동적으로 조절합니다.
  2. MeshRenderer 사용:

    • meshRenderer.material.mainTextureOffset을 이용하여 텍스처의 오프셋을 변경합니다.
    • 이 변경은 배경이 실제로 이동하는 것처럼 보이는 스크롤 효과를 만들어냅니다.
  3. GameManager와 연동:

    • GameManager.Instance.CalculateGameSpeed()를 사용해 게임 진행 속도에 따라 배경 스크롤이 빨라지거나 느려지도록 설정.
    • /20은 스크롤 속도를 조정하기 위한 비율로, 스크롤 속도가 지나치게 빨라지는 것을 방지.
  4. 프레임 독립성:

    • Time.deltaTime을 곱해 프레임 속도에 관계없이 일정한 스크롤 속도를 유지하도록 구현.

코드 동작

  • 매 프레임마다 배경 텍스처의 X축 오프셋이 증가하여 배경이 왼쪽으로 이동하는 효과를 줍니다.
  • 게임 속도가 빨라질수록 배경 스크롤 속도도 빨라지며, 자연스러운 게임 진행을 제공합니다.

3. 김치런 게임 Mover .cs 소스코드

저처럼 코드 입력하기 싫고 실행을 해보고 싶은 분들,
Ctrl+C, Ctrl+V 복사 붙여넣기 해서 사용하세요.
한 번 실행해 보면 유니티 구조적 이해에 많은 도움됩니다.

김치런 튜토리얼 영상 링크
https://www.youtube.com/watch?v=A58_FWqiekI

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class Mover : MonoBehaviour
{
    [Header("Settings")]
    public float moveSpeed; // 이동 속도를 설정하기 위한 변수

    // Update is called once per frame
    void Update()
    {
        // 게임 오브젝트를 왼쪽으로 이동
        transform.position += Vector3.left * GameManager.Instance.CalculateGameSpeed() * Time.deltaTime;
    }
}


코드 구조 및 주요 기능

  1. 플레이어 점프 처리:

    • Update()에서 스페이스바 입력 감지 후, Rigidbody2D에 위쪽으로 힘을 가해 점프.
    • isGrounded를 이용해 플레이어가 땅에 닿아있을 때만 점프 가능.

코드 분석

  1. Settings 섹션:

    • moveSpeed: 게임 오브젝트의 기본 이동 속도를 설정하기 위한 변수이지만, 현재 코드에서는 사용되지 않고 있음.
  2. Update() 메서드:

    • 매 프레임마다 transform.position을 변경하여 오브젝트를 왼쪽으로 이동시킴.
    • 이동 속도는 GameManager.Instance.CalculateGameSpeed() 메서드에 의해 동적으로 계산됨.
    • Time.deltaTime을 곱해 프레임 속도에 관계없이 일정한 속도로 이동하도록 설정.
  3. GameManager와 연동:

    • GameManagerCalculateGameSpeed() 메서드를 호출해 게임의 현재 속도에 따라 오브젝트의 이동 속도를 조정.
    • 이 구조를 통해 게임이 진행될수록 점점 더 빠르게 이동하도록 설정.

코드 동작

  • 게임 내에서 장애물이나 배경 요소와 같은 오브젝트들이 왼쪽으로 이동하는 동작을 구현.
  • GameManager의 게임 상태에 따라 이동 속도가 동적으로 변경되며, 게임 난이도가 조절됨.

개선 사항

  1. moveSpeed 변수 활용:

    • moveSpeed를 기본 이동 속도로 사용하고, 이를 GameManager.Instance.CalculateGameSpeed()와 결합하여 속도를 조절할 수 있음.
      transform.position += Vector3.left * moveSpeed * GameManager.Instance.CalculateGameSpeed() * Time.deltaTime;
  2. 게임 상태 확인 추가:

    • GameManager의 상태에 따라 움직임을 멈추거나 다르게 처리할 수 있음. 예를 들어, 게임이 GameState.Dead 상태일 때 오브젝트를 멈추도록 설정:
      if (GameManager.Instance.State == GameState.Playing) { transform.position += Vector3.left * GameManager.Instance.CalculateGameSpeed() * Time.deltaTime; }
  3. 이동 방향 변경:

    • 현재는 오브젝트가 왼쪽(Vector3.left)으로만 이동하지만, 게임 디자인에 따라 다른 방향으로도 이동할 수 있도록 확장 가능.

최종 구현 예시 (개선 반영):


using System.Collections; using System.Collections.Generic; using UnityEngine; public class Mover : MonoBehaviour { [Header("Settings")] public float moveSpeed = 1f; // 기본 이동 속도 // Update is called once per frame void Update() { if (GameManager.Instance.State == GameState.Playing) { // 이동 방향: 왼쪽으로 기본 속도와 게임 속도를 곱하여 이동 transform.position += Vector3.left * moveSpeed * GameManager.Instance.CalculateGameSpeed() * Time.deltaTime; } } }

이 코드는 GameManager의 상태를 확인하고, moveSpeed와 게임 속도를 결합하여 더 유연한 이동 속도 조정이 가능합니다.

-


Sidewinder


World


FishMusic


LaughingBaby