EasyCastleUNITY

총알반사 본문

유니티 심화

총알반사

EasyCastleT 2023. 8. 21. 13:17

총알 인스펙터

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class TestBullet : MonoBehaviour
{
    private Rigidbody rBody;
    [SerializeField]
    private float moveSpeed = 1f;

    [SerializeField]
    private float rayLength = 1f;
    // Start is called before the first frame update
    void Start()
    {
        this.rBody = GetComponent<Rigidbody>();
        this.StartCoroutine(this.Move());
    }

    // Update is called once per frame
    void Update()
    {
        //총알 앞으로 ray발사
        Ray ray = new Ray(this.transform.position, this.transform.forward);

        RaycastHit hit;
        if(Physics.Raycast(ray, out hit, this.rayLength))
        {
            if (hit.collider.CompareTag("Wall"))
            {
                Vector3 reflect = Vector3.Reflect(-this.transform.forward, hit.normal);
                //회전
                this.transform.rotation = Quaternion.LookRotation(-reflect.normalized);
            }
        }
    }

    private IEnumerator Move()
    {
        while (true)
        {
            this.transform.Translate(Vector3.forward * this.moveSpeed * Time.deltaTime);
            yield return null;
        }
    }
}

OnCollisionEnter를 통해 구현하면, 충돌로 인해, 총알이 날아가는 궤적이 비틀린다.

그래서 Ray를 통해, 충돌처리를 구현한다.