- A02조 이하택 임현진 정재호 함영주
Unity 2022.3.2f
-해상도 : 1980 * 1280
- 기획
- 우리들의 깜찍한 고양이가 적(인간)들을 피해 아기 고양이를 구출 하는 여정의 플랫포머 2D 게임
-
Player 기능 담당
-
1차 시도 : "StateMachine으로 구현하자"
- 본강의를 참고하려 했으나, 3D캐릭터 움직임에 대한 State와 2D 플랫포머 캐릭터의 State의 차이를 메꾸지 못하고 시간을 소비했다.
-
결론 : 플레이어가 필요한 분이 많아 업데이트로 키 입력 확인하도록 프로토타입을 만들어 전해주었는데, 변경할 시간이 없었다....
private void Update()
{
Debug.DrawRay(new Vector3(transform.position.x, transform.position.y, transform.position.z), Vector2.down * 0.8f);
//Jump
if (Input.GetButtonDown("Jump") && !anim.GetBool("IsJump"))
{
rigid.AddForce(Vector2.up * jumpForce, ForceMode2D.Impulse);
anim.SetBool("IsJump", true);
}
//Stop Speed
if (Input.GetButtonUp("Horizontal"))
{
rigid.velocity = new Vector2(rigid.velocity.normalized.x * 0.5f, rigid.velocity.y);
}
//Direction Sprite
if (Input.GetButtonDown("Horizontal"))
{
spriteRenderer.flipX = Input.GetAxisRaw("Horizontal") == -1;
}
//
if (rigid.velocity.normalized.x == 0)
{
anim.SetBool("IsWalk", false);
}
else
{
anim.SetBool("IsWalk", false);
anim.SetBool("IsWalk", true);
}
Respawn();
}
- 아이템 기능 담당
//........
#region Player Speed Up
public void IncreaseSpeed(float currentRunningTime, float runningMultipleValue)
{
float changeSpeed = originSpeed * runningMultipleValue;
print(changeSpeed);
maxSpeed = changeSpeed;
// 증가한 속도를 원래 속도로 되돌리기 위한 코루틴 시작
StartCoroutine(ResetSpeedAfterTime(currentRunningTime, originSpeed));
}
private IEnumerator ResetSpeedAfterTime(float currentRunningTime, float originalSpeed)
{
yield return new WaitForSeconds(currentRunningTime);
print(currentRunningTime);
// currentRunninTime 이후 원래 속도로 돌아감
maxSpeed = originalSpeed;
}
#endregion
#region Player Magnet Effect
public void MagneticEffect()
{
if (!isMagneticActive)
{
StartCoroutine(ApplyMagneticEffectContinuously());
}
}
private IEnumerator ApplyMagneticEffectContinuously()
{
isMagneticActive = true;
float time = 0;
while (isMagneticActive)
{
// 플레이어의 위치
Vector2 playerPosition = transform.position;
// 모든 ItemData 오브젝트를 찾음
ItemData[] itemsInScene = FindObjectsOfType<ItemData>();
foreach (ItemData item in itemsInScene)
{
// 아이템과 플레이어 사이의 거리를 계산
float distanceToPlayer = Vector2.Distance(playerPosition, item.transform.position);
// 만약 아이템이 자석 효과 범위 내에 있다면
if (distanceToPlayer <= magnetRange)
{
// 자석 효과 방향을 계산
Vector2 forceDirection = (playerPosition - (Vector2)item.transform.position).normalized;
// 아이템에 자석 효과를 적용
Rigidbody2D itemRigidbody = item.GetComponent<Rigidbody2D>();
if (itemRigidbody != null)
{
itemRigidbody.AddForce(magnetPower * forceDirection, ForceMode2D.Force);
}
}
}
time += Time.deltaTime;
yield return null;
if (time > magnetTime)
{
isMagneticActive = false;
yield break;
}
}
}
#endregion
- 맵 기능 담당
- 타일맵 : 애니매이티드 타일, 움직이는 플랫폼, 물 플랫폼, 스프링 타일
- 타이머 : 타임어택
- 적 기능 담당