타로카드 운세 보기
타로카드를 3장 뽑고, 과거, 현재, 미래 운세를 확인하세요.
#타로카드 #오늘의운세 #무료타로 #타로리딩 #하루운세
VB6(VB6.0)에서 폼의 종료(X) 버튼을 눌렀을 때, 바로 종료되지 않고 사용자가 종료할지 취소할지 선택할 수 있도록 설정하는 방법을 소개합니다.
사용자가 X 버튼을 눌렀을 때, "프로그램을 종료하시겠습니까?"와 같은 메시지를 띄워 종료 여부를 선택하도록 만들 수 있습니다.
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
QueryUnload
이벤트 활용
폼이 닫히려 할 때 실행되는 이벤트입니다.
UnloadMode
가 vbFormControlMenu
이면 X 버튼을 클릭한 경우입니다.
MsgBox
로 종료 확인 메시지 표시
vbYesNo + vbQuestion
옵션을 사용하여 "예/아니오" 버튼이 있는 메시지를 띄웁니다.
종료 여부 결정
사용자가 "예(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 버튼을 아예 비활성화하거나, 특정 버튼으로만 종료되도록 변경하는 것도 가능합니다.
Blender에서 Bsurface 애드온을 활용하면 Grease Pencil이나 엣지를 이용하여 빠르게 메쉬를 생성할 수 있습니다. 특히 리토폴로지(Retopology) 작업에 유용합니다. 이 글에서는 Bsurface 애드온의 활성화 방법과 구체적인 사용법을 소개합니다.
Blender 상단 메뉴에서 Edit > Preferences
를 클릭합니다.
Add-ons 탭으로 이동한 후, 검색창에 Bsurface
입력합니다.
"Mesh: Bsurface GPL Edition" 체크박스를 활성화합니다.
설정을 저장하려면 "Save Preferences" 버튼을 클릭합니다.
이제 Edit Mode에서 Bsurface 기능을 사용할 수 있습니다.
리토폴로지를 할 모델(예: 조각된 얼굴)을 선택
Tab
키를 눌러 Edit Mode로 전환
"Placement" 옵션을 Surface
로 설정
이렇게 하면 Annotation 선이 모델 표면에 붙음
리토폴로지를 원하는 부분에 메쉬 가이드라인을 그리기
우측 Bsurface 패널에서 "Add Surface" 클릭
그러면 Annotation 선을 따라 메쉬가 생성됨
필요에 따라 Subdivision 값을 조정하여 세부 디테일 수정
Blender에서 Curve를 활용하면 간단한 선을 3D 형태로 변환할 수 있습니다. 특히 Extrude(압출), Bevel(베벨), Taper(테이퍼) 기능을 이용하면 곡선을 더욱 다양하게 변형할 수 있습니다. 이번 포스팅에서는 Taper Curve를 활용하여 유기적인 형태를 만드는 방법을 소개합니다.
Taper는 한쪽 끝은 가늘고, 다른 쪽 끝은 두껍게 만들 수 있는 기능입니다. 이를 활용하면 점진적으로 변형되는 곡선을 만들 수 있습니다.
Shift + A → Curve → Bezier Curve 추가 (메인 곡선)
Shift + A → Curve → Bezier Curve 추가 (Taper 곡선)
메인 곡선을 선택한 상태에서 Properties Editor → Object Data Properties → Geometry → Taper Object에 만든 Taper Curve를 지정
곡선의 두께가 Taper 곡선의 형태에 따라 점진적으로 변형됨
Shift + A → Curve → Bezier Curve 추가 (메인 곡선)
Shift + A → Curve → Bezier Circle 추가 (단면 형상)
메인 곡선을 선택하고 Bevel Object로 Bezier Circle 지정
Shift + A → Curve → Bezier Curve 추가 (Taper 곡선)
메인 곡선 선택 후 Taper Object에 해당 곡선을 지정
필요하면 **Edit Mode (탭 키)**에서 Taper 곡선을 변형하여 원하는 형태로 조정
H / Alt + H: 곡선 제어점을 숨기거나 다시 표시
G / R / S: 곡선 제어점을 이동, 회전, 크기 조절
Properties Editor → Geometry → Fill Mode: Full을 선택하면 단면이 채워진 튜브 형태가 됨
Blender에서 Bevel과 Taper 기능을 활용하면 단순한 곡선도 다채로운 3D 모델로 변형할 수 있습니다. 위의 내용을 참고하여 창의적인 모델링을 시도해 보세요!
저처럼 코드 입력하기 싫고 실행을 해보고 싶은 분들,
Ctrl+C, Ctrl+V 복사 붙여넣기 해서 사용하세요.
한 번 실행해 보면 유니티 구조적 이해에 많은 도움됩니다.
4. 김치런 게임 BackgroundScroll .cs 소스코드
2. 김치런 게임 GameManager .cs 소스코드
#Unity #유니티 #kimchirun #김치런 #게임개발 #유니티초보자
저처럼 코드 입력하기 싫고 실행을 해보고 싶은 분들,
Ctrl+C, Ctrl+V 복사 붙여넣기 해서 사용하세요.
한 번 실행해 보면 유니티 구조적 이해에 많은 도움됩니다.
김치런 튜토리얼 영상 링크
https://www.youtube.com/watch?v=A58_FWqiekI
하트 Sprite 전환:
GameManager.Instance.lives
값을 기준으로 LiveNumber
와 비교.LiveNumber
이상이면 OnHeart
Sprite를, 그렇지 않으면 OffHeart
Sprite를 적용.하트의 역할:
Heart
오브젝트는 특정 체력 단계(LiveNumber)를 나타냄.LiveNumber
가 1인 하트는 체력이 1 이상일 때 활성화 상태, 그렇지 않으면 비활성화 상태.SpriteRenderer
:
GameManager
에서 관리하는 lives
값이 변경되면, 하트의 활성화 상태가 동적으로 업데이트됩니다.저처럼 코드 입력하기 싫고 실행을 해보고 싶은 분들,
Ctrl+C, Ctrl+V 복사 붙여넣기 해서 사용하세요.
한 번 실행해 보면 유니티 구조적 이해에 많은 도움됩니다.
김치런 튜토리얼 영상 링크
https://www.youtube.com/watch?v=A58_FWqiekI
오브젝트 위치 검사:
Update
메서드는 매 프레임마다 실행되며, 현재 게임 오브젝트의 x 좌표를 검사.Destroy(gameObject)
로 해당 오브젝트를 삭제.오브젝트 삭제:
Destroy(gameObject)
는 현재 스크립트가 붙어있는 게임 오브젝트를 메모리에서 제거.Start
메서드:
Start
메서드는 게임 오브젝트가 생성될 때 한 번 호출되지만, 이 스크립트에서는 사용하지 않음.저처럼 코드 입력하기 싫고 실행을 해보고 싶은 분들,
Ctrl+C, Ctrl+V 복사 붙여넣기 해서 사용하세요.
한 번 실행해 보면 유니티 구조적 이해에 많은 도움됩니다.
김치런 튜토리얼 영상 링크
https://www.youtube.com/watch?v=A58_FWqiekI
스폰 딜레이 설정:
minSpawnDelay
와 maxSpawnDelay
를 이용해 스폰 간격을 랜덤하게 조절.Random.Range(minSpawnDelay, maxSpawnDelay)
를 사용해 지정된 범위 내에서 지연 시간을 선택.게임 오브젝트 배열:
gameObjects
배열에 스폰할 수 있는 오브젝트를 등록.Random.Range(0, gameObjects.Length)
로 배열에서 무작위로 하나의 오브젝트를 선택.OnEnable
과 OnDisable
:
OnEnable
)되면 Spawn
호출을 예약.OnDisable
)되면 예약된 모든 호출을 취소(CancelInvoke
).Spawn
메서드:
Instantiate
를 통해 현재 위치(transform.position
)에 생성.Quaternion.identity
)을 가짐.Invoke
를 재귀적으로 호출.Spawn
메서드가 호출되어 오브젝트가 생성됨.Spawn
이 호출되며, 반복적으로 동작.저처럼 코드 입력하기 싫고 실행을 해보고 싶은 분들,
Ctrl+C, Ctrl+V 복사 붙여넣기 해서 사용하세요.
한 번 실행해 보면 유니티 구조적 이해에 많은 도움됩니다.
김치런 튜토리얼 영상 링크
https://www.youtube.com/watch?v=A58_FWqiekI
속도 조절 (scrollSpeed
):
scrollSpeed
는 기본 스크롤 속도를 조절하는 변수입니다.GameManager.Instance.CalculateGameSpeed()
와 결합하여 게임의 진행 상황에 따라 스크롤 속도를 동적으로 조절합니다.MeshRenderer 사용:
meshRenderer.material.mainTextureOffset
을 이용하여 텍스처의 오프셋을 변경합니다.GameManager와 연동:
GameManager.Instance.CalculateGameSpeed()
를 사용해 게임 진행 속도에 따라 배경 스크롤이 빨라지거나 느려지도록 설정./20
은 스크롤 속도를 조정하기 위한 비율로, 스크롤 속도가 지나치게 빨라지는 것을 방지.프레임 독립성:
Time.deltaTime
을 곱해 프레임 속도에 관계없이 일정한 스크롤 속도를 유지하도록 구현.저처럼 코드 입력하기 싫고 실행을 해보고 싶은 분들,
Ctrl+C, Ctrl+V 복사 붙여넣기 해서 사용하세요.
한 번 실행해 보면 유니티 구조적 이해에 많은 도움됩니다.
김치런 튜토리얼 영상 링크
https://www.youtube.com/watch?v=A58_FWqiekI
플레이어 점프 처리:
Update()
에서 스페이스바 입력 감지 후, Rigidbody2D
에 위쪽으로 힘을 가해 점프.isGrounded
를 이용해 플레이어가 땅에 닿아있을 때만 점프 가능.Settings
섹션:
moveSpeed
: 게임 오브젝트의 기본 이동 속도를 설정하기 위한 변수이지만, 현재 코드에서는 사용되지 않고 있음.Update()
메서드:
transform.position
을 변경하여 오브젝트를 왼쪽으로 이동시킴.GameManager.Instance.CalculateGameSpeed()
메서드에 의해 동적으로 계산됨.Time.deltaTime
을 곱해 프레임 속도에 관계없이 일정한 속도로 이동하도록 설정.GameManager
와 연동:
GameManager
의 CalculateGameSpeed()
메서드를 호출해 게임의 현재 속도에 따라 오브젝트의 이동 속도를 조정.GameManager
의 게임 상태에 따라 이동 속도가 동적으로 변경되며, 게임 난이도가 조절됨.moveSpeed
변수 활용:
moveSpeed
를 기본 이동 속도로 사용하고, 이를 GameManager.Instance.CalculateGameSpeed()
와 결합하여 속도를 조절할 수 있음.transform.position += Vector3.left * moveSpeed * GameManager.Instance.CalculateGameSpeed() * Time.deltaTime;
게임 상태 확인 추가:
GameManager
의 상태에 따라 움직임을 멈추거나 다르게 처리할 수 있음. 예를 들어, 게임이 GameState.Dead
상태일 때 오브젝트를 멈추도록 설정:if (GameManager.Instance.State == GameState.Playing) {
transform.position += Vector3.left * GameManager.Instance.CalculateGameSpeed() * Time.deltaTime;
}
이동 방향 변경:
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
와 게임 속도를 결합하여 더 유연한 이동 속도 조정이 가능합니다.