프로젝트 제목에 작은 게임 만들기 - 애니메이션 판정
13543 단어 ProjectTinydotsUnity
입문
Project Tiny에서 미니 게임을 제작할 때 사용하는 기능과 고장에 대해 설명합니다.
이번에는 게임의 당첨 판정·애니메이션 설치에 관한 것이다.
저장소는 여기 입니다.
적중 판정
사용할 구성 요소는 RectHitBox 2D입니다.
수첩
https://docs.unity3d.com/Packages/[email protected]/manual/module-hitbox2d.html
판정 방법
Sprite2DRnederer, RectHitBox2D의 솔리드가 서로 접촉하도록 설정된 경우
HitBoxOverlap 구성 요소가 추가되어 비접촉 상태에서 삭제됩니다.
이 HitBoxOverlap 구성 요소가 있는지 확인합니다.
이번 게임에서 캐릭터가 장애물을 접하면 바로 게임이 끝납니다.
HitBoxOverlap이 있으면 게임 종료 플래그를 설정합니다.
GameMain.csEntities.ForEach((Entity entity, ref Character character, ref RectHitBox2D rectHitBox2d) => {
if (EntityManager.HasComponent<HitBoxOverlap>(entity)) {
isGameOver = true;
}
});
불편한 점
Collider의 경우 Scene 뷰에서 설정된 치수를 볼 수 있습니다.
RectHitBox2D에는 이러한 미리보기가 없기 때문에 치수 조정이 어렵습니다.
그래서 이 달리기 게임에서 상당히 흐리멍덩하게 판정되었다.
애니메이션
두 가지 구성 요소 사용: Sprite2DSequence 및 Sprite2DSequencePlayer.
인용하다
Sprite2DSequence
Sprite2DSequencePlayer
단계 설정
Entities.ForEach((Entity entity, ref Character character, ref RectHitBox2D rectHitBox2d) => {
if (EntityManager.HasComponent<HitBoxOverlap>(entity)) {
isGameOver = true;
}
});
Sprite2DSequencePlayer 필드 설명
sequence
Sprite2DSequence가 있는 엔티티
speed
재생 속도
1은 정상 속도입니다.
1 이하 저속 재생, 1 이상 배속 재생
time
현재 시간
설정 값을 통해 중도 재현 가능
paused
일시 중지
순환 유형
Name
Description
ClampFoever
재생 후 마지막 프레임 유지
Loop
정상 순환
Once
한 번만 틀어주세요.
PingPong
반복 재생
PingPongOnce
PingPong을 한 번만 진행하도록 하겠습니다.
애니메이션 전환
애니메이션 구성 요소를 만들고 각 애니메이션에 대해 Sprite2DSequence의 엔티티를 설정할 수 있습니다.
Animations.cs
public struct Animations : IComponentData {
public Entity SequenceIdleEntity;
public Entity SequenceRunEntity;
public Entity SequenceJumpEntity;
public Entity SequenceDeathEntity;
}
그리고 Character Animation System에서 입력과 상태를 보고 Sprite2DSequencePlayer의 sequence 실체를 변경하여 애니메이션을 전환합니다.CharacterAnimationSystem.cs
public class CharacterAnimationSystem : ComponentSystem {
protected override void OnUpdate() {
Entities.ForEach((ref Animations anims) => {
var sequenceIdleEntity = anims.SequenceIdleEntity;
var sequenceRunEntity = anims.SequenceRunEntity;
var sequenceJumpEntity = anims.SequenceJumpEntity;
var sequenceDeathEntity = anims.SequenceDeathEntity;
var isGameOver = false;
var isPlaying = false;
var begun = false;
var retry = false;
Entities.ForEach((ref GameState game) => {
isGameOver = (!game.GameOverPrev && game.GameOver);
isPlaying = game.Playing;
begun = game.Begun;
retry = game.Retry;
});
Entities.ForEach((ref Character character, ref Sprite2DSequencePlayer sequencePlayer) => {
if (true) {
if (isGameOver) {
// ゲームオーバー
sequencePlayer.time = 0.0f;
sequencePlayer.loop = LoopMode.ClampForever;
sequencePlayer.sequence = sequenceDeathEntity;
}
else if (begun) {
// ジャンプ
sequencePlayer.time = 0.0f;
sequencePlayer.loop = LoopMode.ClampForever;
sequencePlayer.sequence = sequenceJumpEntity;
}
else if (retry) {
// 走り
sequencePlayer.time = 0.0f;
sequencePlayer.loop = LoopMode.Loop;
sequencePlayer.sequence = sequenceRunEntity;
}
else {
if (!character.jumpingPrev && character.jumping) {
// ジャンプ
sequencePlayer.time = 0.0f;
sequencePlayer.loop = LoopMode.ClampForever;
sequencePlayer.sequence = sequenceJumpEntity;
}
else if (character.jumpingPrev && !character.jumping) {
// 着地
sequencePlayer.time = 0.0f;
sequencePlayer.loop = LoopMode.Loop;
sequencePlayer.sequence = sequenceRunEntity;
}
}
}
});
});
}
}
Reference
이 문제에 관하여(프로젝트 제목에 작은 게임 만들기 - 애니메이션 판정), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/chocolate-ice-cream/items/fb328a4913ef3ad6161e텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)