개발일기
유니티#4 스크립트 정리 본문

//PlayerSkill.cs
using UnityEngine;
public class PlayerSkill : MonoBehaviour //Player 오브젝트 연결
{
public KeyCode skillKey = KeyCode.F;
public float coolDownTime=3f;
public Vector3 skillPositionOffset=new Vector3 (0f,0f,0f);
public Vector3 skillScaleOffset=new Vector3 (1f,1f,1f);
public RuntimeAnimatorController skillAnimatorController;
public string skillTriggerParameter="Trigger";
// public Vector2 size; // 반경
// public float forceMagnitude = 10f; // 가할 힘의 크기
private PlayerMove playerMove;
private float currentTime;
private float lastTime;
private bool canUseSkill=true;
// private Animator slashAnimator;
// Start is called once before the first execution of Update after the MonoBehaviour is created
void Start()
{
lastTime=Time.time;
playerMove = GetComponent<PlayerMove>();
// size=new Vector2 (2,1);
// Transform slash1Transform=transform.Find("Slash1");
// if (slash1Transform != null) {
// slash1 = slash1Transform.gameObject;
// slashAnimator = slash1.GetComponent<Animator>();
// if (slashAnimator == null) Debug.LogError("Animator not found on Slash1!");
// } else {Debug.LogError("Slash1 object not found!");}
// 무결성 검사
if (skillAnimatorController == null)
{
Debug.LogError("Skill Animator Controller is not assigned!");
canUseSkill=false;
return;
}
if (playerMove == null) {
Debug.LogError("PlayerMove Script is null!");
canUseSkill=false;
return;
}
}
// Update is called once per frame
void Update()
{
// 키다운 감지
if (!Input.GetKeyDown(skillKey)) return;
// 시간 계산
currentTime=Time.time;
if (currentTime - lastTime <= coolDownTime) {
Debug.Log("Skill is on cooldown!");
return;
}
if (!canUseSkill) {return;}
UseSkill();
lastTime=Time.time;
}
void UseSkill() {
// 스킬 사용
// Debug.Log("Skill triggered!");
// skillObject 생성
bool direction = playerMove.direction;
Vector3 adjustedPositionOffset=skillPositionOffset;
adjustedPositionOffset.x*=(direction?1:-1);
Vector3 spawnPosition = transform.position + adjustedPositionOffset;
GameObject skillObject = new GameObject("Skill");
skillObject.transform.position = spawnPosition;
// 방향에 따라 X축 반전
Vector3 scale = skillScaleOffset;
scale.x *= direction ? 1 : -1;
skillObject.transform.localScale = scale;
// 스킬 시전 시간 업데이트
lastTime = Time.time;
//SpriteRenderer, Animator, OnAnimationEnd 설정
SpriteRenderer spriteRenderer = skillObject.AddComponent<SpriteRenderer>();
Animator skillAnimator = skillObject.AddComponent<Animator>();
skillAnimator.runtimeAnimatorController = skillAnimatorController;
skillAnimator.SetTrigger(skillTriggerParameter);
OnAnimationEndS animationEndScript = skillObject.AddComponent<OnAnimationEndS>();
// 스킬 자동 삭제 (선택 사항)
Destroy(skillObject, 1f); // 1초 뒤 삭제
}
// private void OnDrawGizmos()
// {
// // 감지 범위를 시각적으로 표시
// Gizmos.color = Color.green;
// Gizmos.DrawWireCube(transform.position, size);
// }
}
더러운 코드들 다 정리했다
무결성 검사 전부 void Start로 옮겼고 무엇보다 Prefap 들고 오던거를 그냥 Animator 받아오는 거로 바꿨다
근데 얘가 Animator에서 Parameter를 못 받아옴 왜이러지;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
그 밖에 짜잘한 거는 Scale 추가하고 스킬 사용 옮기고 에....... 머시기머시기.
이제 playerSkill에서해야할 거
- Animator Parameter 받아오는 거 수정
- skillController.cs 만들어서 적용시키기
- 충돌 잘 되는지 확인하기
- Gizmos 설정하기
다른 거
- Enemy HP 만들기
- UI와 설정창 만들기
- 스킬 봉인, 해금 아이템 만들기
근데 이거 보다보니까 스킬 설정 리스트같은 거로 따로 보관해두고 가져와도 괜찮을 듯? 컴포넌트를 계속 추가할 수는 없으니까
//PlayerMove.cs void Update()
if (Input.GetKeyDown(KeyCode.Space) && !(Input.GetKey(KeyCode.S) || v<0) && jumpNum < maxJumpNum)
{
if ((rigid.linearVelocity.x>0&&!direction)||(rigid.linearVelocity.x<0&&direction)) {
rigid.linearVelocity=new Vector3 (-rigid.linearVelocity.x, rigid.linearVelocity.y,0);
}
Vector2 jumpVec = new Vector2 (0f, 0f);
if (jumpNum==0) {jumpVec=new Vector3 (rigid.linearVelocity.x, jumpPower);}
if (jumpNum==1) {
if (v>0f) {jumpVec=new Vector3 (rigid.linearVelocity.x*0.8f, jumpPower*2f);}
else {jumpVec=new Vector3 (jumpPower*(direction?1:-1)*2f, rigid.linearVelocity.y+jumpPower*0.3f);}
}
rigid.linearVelocity=jumpVec;
jumpNum++;
}
// ...
if (onGround && h==0) {
rigid.linearVelocity*=0.9f;
}
+조작감이 조금 이상해서 그냥 점프할 땐 addForce 안쓰고 linearVelocity 쓰게 설정해줬다
'Unity' 카테고리의 다른 글
| 유니티#6 ScriptableObject (0) | 2024.12.26 |
|---|---|
| 유니티#5 private 변수 참조 (0) | 2024.12.26 |
| 유니티#3 early return, 모듈화 초입 (4) | 2024.12.25 |
| 유니티#2 prefap (0) | 2024.12.23 |
| 유니티#1 animator (2) | 2024.12.23 |