Unity에서 3D 사격 동작을 만드는 강좌 ②

15593 단어 Unity

총알을 쏘다








Player 스크립트에 추가합니다.그에 상응하는 곳에 보충하겠습니다.


코르크가 나오기 때문에 추서할 위치를 주의하세요.
※ 마지막에는 모든 내용이 추가되니 안심하세요.

변수 부분의 보충 내용을 성명하다


public GameObject bullet;
public Transform muzzle;
public float speed = 1000;

성명 변수 부분의 설명


public GameObject bullet;날아오르는 총알이 무엇인지 정의했다.
public GameObject로서 앞으로 D&D로
직접 지정할 수 있습니다.
public Transform muzzle;
비탄의 발사 위치를 정의했다.
여기도 퍼블릭으로 D&D를 미리 진행하도록 하겠습니다.
발사 위치의 좌표를 지정할 수 있다.
방금 유저 앞에 설치된 큐브가 바로 그거예요.
public float speed = 1000;
비탄의 속도를 정의했다.
이번에는 1000으로 설정했다.

void FixedUpdate 추기 내용


if (Input.GetMouseButtonDown(0))
        {
         StartCoroutine("shot");
        }

void FixedUpdate 설명


if (Input.GetMouseButtonDown(0))
마우스 왼쪽 버튼 클릭
마우스에 대한 버튼 입력여기.이 정리되었으니 참고하세요♪
StartCoroutine("shot");
시작
시작 후 정의된 Shot coltin.
코르크는 일단 시작하면 끝까지 집행한다.
실행하는 방법은요.
Start Coroutine("코린틴의 이름");
네.

shot 코르크 내용


IEnumerator shot()
    {
        animator.SetBool("Attack", true);
        yield return new WaitForSeconds(0.5f);
        Vector3 force;
        GameObject bullets = GameObject.Instantiate(bullet) as GameObject;
        bullets.transform.position = muzzle.position;
        force = this.gameObject.transform.forward * speed;
        bullets.GetComponent<Rigidbody>().AddForce(force);
        animator.SetBool("Attack", false);
        Destroy(bullets.gameObject,2); 
    }

Shot 코린의 설명


IEnumerator shot()
코르크 정의
정의하는 방법은요.
IEnumerator 콜친의 이름()
시도를 시작합니다.
animator.SetBool("Attack", true);
Animator Controller의 Attack 변수를 True로 설정합니다.
yield return new WaitForSeconds(0.5f);
0.5초를 기다리다.
공격의 애니메이션과 총알이 나올 시기를 맞추기 위해서는 대기 시간이 필요하다.
Vector3 force;
비탄을 넣는 힘을 정의했다.
왜 여기서 변수를 정의하는지 말하자면 코르크에서 사용하는 변수는 코르크에서
선언하지 않으면 움직이지 않기 때문이다.
GameObject bullets = GameObject.Instantiate(bullet) as GameObject;총알은 bullet이 지정한 대상을 복제하여 날렸지만, 그 bullet을 복제했다
bulleets로 정의합니다.
이렇게 재지정하지 않으면 복사된 bullet에 Shot Coltin 명령이 반영되지 않습니다.
bullets.transform.position = muzzle.position;지정한 muzle 위치에 bullets가 나타납니다.
force = this.gameObject.transform.forward * speed;
플레이어가 전방을 향한 힘× speed의 값을 대입합니다.
이렇게 하면 총알이 앞으로 날아갈 것이다.
bullets.GetComponent().AddForce(force);bullets를 가져올 RighidBody를 지정하고 힘을 줍니다.
RidBody는 중력이나 충돌 판정과 관련된 구성 요소로 인해 충돌 판정이 발생하는 경우를 가리킨다
중력 처리를 원하는 상태에서 설치합니다.
탄환이 날아가는 경우 탄의 중력에 힘을 실어 날아가는 동작을 해야 하기 때문에 사전에 얻어야 한다.
animator.SetBool("Attack", false);Attack을 거짓으로 설정합니다.
Destroy(bullets.gameObject,2);2초 후에 bulleets를 꺼라.
Destroy는 객체를 삭제하는 명령입니다.
Destroy(삭제할 대상의 이름.gameObject, 삭제할 초 수);
구문을 사용합니다.

스크립트 완료


추가 내용은 ※ 3.
Player.cs
using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class Player : MonoBehaviour
{

    private CharacterController characterController;//※1
    private Vector3 velocity;//※1
    public float walkSpeed;//※1
    private Animator animator;//※2
    public GameObject bullet;//※3
    public Transform muzzle;//※3
    public float speed = 1000;//※3


void Start()//ゲーム開始時に一度だけ実行する内容
    {
        characterController = GetComponent<CharacterController>();//※1
        animator = GetComponent<Animator>();//※2
    }

void FixedUpdate()//ゲーム開始時に何度も実行する内容
    {
        if (characterController.isGrounded)//※1
        {
            velocity = new Vector3(Input.GetAxis("Horizontal"), 0f, Input.GetAxis("Vertical"));//※1
            if (velocity.magnitude > 0.1f)//※1
            {
                animator.SetBool("isRunning", true);//※2
                transform.LookAt(transform.position + velocity);//※1
            }
            else//※2
            {
                animator.SetBool("isRunning", false);//※2
            }
        }
        velocity.y += Physics.gravity.y * Time.deltaTime;//※1
        characterController.Move(velocity * walkSpeed * Time.deltaTime);//※1

if (Input.GetMouseButtonDown(0))//※3
        {
         StartCoroutine("shot");//※3
        }
}

IEnumerator shot()//※3
    {
        animator.SetBool("Attack", true);//※3
        yield return new WaitForSeconds(0.5f);//※3
        Vector3 force;//※3
        GameObject bullets = GameObject.Instantiate(bullet) as GameObject;//※3
        bullets.transform.position = muzzle.position;//※3
        force = this.gameObject.transform.forward * speed;//※3
        bullets.GetComponent<Rigidbody>().AddForce(force);//※3
        animator.SetBool("Attack", false);//※3
        Destroy(bullets.gameObject,2);//※3
    }
}


한번 해보면...



공격으로 변한 애니메이션 총알이 날고 있다.

다음 강좌는


담배 선생님 홈페이지에 놀러 오세요.

좋은 웹페이지 즐겨찾기