[Unity] 전방으로 날아가는 마법 공격을 실현한다.
Json에 저장된 정보 읽기
하고 싶은 일
・RPG의 주인공이 하는 마법 공격을 실시하고 싶다.
・주인공 앞에 공을 띄우고 앞으로 발사하고 싶다.
・공 출현 후 1초 후 파괴하거나 적과 충돌하여 파괴한다.
・위의 공격 버튼을 누르면 진행을 희망합니다.
사전 준비
1) Asset의 import
import의 Asset은 좋아하는 물건이라 문제없지만, 저는 다음과 같은 Asset을 준비했습니다.
・Player
• 발사하고 싶은 prefab
<확인사항>
・Project/Assets의 부하들이 DogKnight를 배치했습니다.
• Project/Assets의 부하가 PyroParticles를 구성했습니다.
2) Prefab 구성
· Player 구성
Project>Assets/DogKnight/Prefab/DogPolyart.prefab를Hierarchy에 설정합니다.
공의 배치
a) Project > Assets 아래에 Resources 폴더를 생성합니다.
Assets&Create>Folder&를 마우스 오른쪽 버튼으로 클릭하면 이름이 Resources로 지정됩니다.
b) Project > Assets/Resources 폴더 아래에 "MagicPrefabs"폴더 만들기
c) Project/Assets/PyroParticles/Prefab/Prefab/Meteor.prefab를 "ctrl+D"로 복사합니다.
Meteor 1이 생성된 것 같습니다.
d) Resources/MagicPrefabs 폴더 아래에 "Meteor 1"을 끌어 놓습니다.
e) Meteor 1의 이름을 meteor로 변경합니다.
이 정도면 다음 폴더로 구성될 것 같아요.
3) 애니메이션의 준비
a) Project/Assets 아래에 "Animatior"폴더를 생성합니다.
b) Project/Assets/Animaator 밑에서 Player Animator Controller를 만듭니다.
(Project/Assets/Animaator > Create>Animator Controller 를 마우스 오른쪽 단추로 클릭)
c) PlayerAnimatiorController를 두 번 클릭합니다.
d) Aniamator 화면에서 Assets/DogKnight/Animation 소속 Animation을 드래그합니다.
e) 다음을 구성하십시오.
(이번에 필요한 부분은'Enry','Idle Battle','Attack 01'뿐입니다.
다른 부분은 신경 쓰지 마세요...)
f) "Idle Battle"→"Attack 01"에서 "Attack"triger를 설정합니다.
g) "Idle Battle"← "Attack 01"에 설정된 내용이 없습니다.
이상은 사전 준비의 끝이었다.
그럼 우리 인코딩합시다!!
소스 코드
지금부터 예비 조립의 생성, 발사, 파괴를 인코딩하기 시작합니다.
생성할 세 개의 원본 파일입니다.
PlayerManager.cs
는 Player에 첨부된 원본 파일입니다.
왼쪽 클릭이 감지되면 IdelBattle에서 Attack01로 마이그레이션합니다.
using UnityEngine;
using UnityEngine.Animations;
public class PlayerManager : MonoBehaviour
{
Animator animator; // PlayerのAniamtor
Rigidbody rb; // PlayerのRigidbody
void Start()
{
animator = GetComponent<Animator>(); // PlayerのAnimatorを取得
}
void Update()
{
playerAttack();
}
private void playerAttack()
{
if (Input.GetButtonDown("Fire1")) //左クリックされたら
{
animator.SetTrigger("Attack"); // 「Attack」Triggerをonにする
}
}
PlayerAttBehaviour.cs
Animation Clip에 포함된 Attack01의 소스 파일입니다.
본 원본 파일은 일반 제작 방법과 달리 다음과 같은 방법으로 제작한다.
"Attack01"> Add Bhaviour New Scripts > 를 클릭하여 "Player AttBehaviour"를 입력하십시오.
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class PlayerAttBehaviour : StateMachineBehaviour
{
override public void OnStateEnter(Animator animator, AnimatorStateInfo stateInfo, int layerIndex)
{
// 生成したいプレハブをResources/MagicPrefabs配下のプレハブを指定する。
GameObject shotObject = (GameObject)Resources.Load("MagicPrefabs/Meteor");
// プレハブの生成場所を指定する。(今回はPlayerのポジションを指定)
Vector3 playerPos = animator.GetComponent<Transform>().position;
// プレハブの生成
GameObject shot = Instantiate(shotObject, playerPos, Quaternion.identity);
// キャラクターオブジェクトを取得
GameObject playerGameObj = animator.GetComponent<PlayerManager>().gameObject;
// PlayerMagicAtt.csのSetObject()を呼び出し
shot.GetComponent<PlayerMagicAtt>().SetObject(playerGameObj, shot);
}
PlayerMagicAtt.cs
Resources/MagicPrefabs/Meteor 프리셋 허브에 첨부된 소스 파일입니다.
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class PlayerMagicAtt : MonoBehaviour
{
public float shot_speed = 1000;
protected Vector3 forward;
protected Rigidbody rb;
protected GameObject characterObject;
private GameObject attPrefab;
void Start()
{
rb = this.GetComponent<Rigidbody>(); // プレハブのRigidbodyを取得
forward = characterObject.transform.forward; // Playerの前方を取得
Destroy(this.attPrefab, 1f); // プレハブを1秒後破壊
}
void Update()
{
rb.velocity = forward * shot_speed; // プレハブを移動させる
}
void OnCollisionEnter(Collision collision)
{
// 敵に衝突したら、プレハブを破壊
if (collision.gameObject.CompareTag("Enemy"))
{
Destroy(attPrefab);
}
}
// Playerと生成されたプレハブのGameObjectのセッター
public void SetObject(GameObject characterObject, GameObject attPrefab)
{
this.characterObject = characterObject;
this.attPrefab = attPrefab;
}
Inspector
・각 소스 파일을 첨부합니다.
PlayerManager.cs ⇒ Player
PlayerAttBehaviour.cs → Attack 01 (첨부된 것 같습니다)
PlayerMagicAtt.cs ⇒ Meteor
· 메텔러의'Sphere Collider'의'Is Trigger'를 검사한다.
이상은 Meteor 프리셋 허브의 생성으로 플레이어의 정면으로 발사되며 1초 후 사라집니다.
Reference
이 문제에 관하여([Unity] 전방으로 날아가는 마법 공격을 실현한다.), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://zenn.dev/tech_memorandum/articles/04e826bfd3cdc6텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)