본문

최근방문

[질문] 유니티 c언어 오류 [1]





[광고]
글꼴


 

 

언어

using System.Collections;

using System.Collections.Generic;

using UnityEngine;


public class Gunc : MonoBehaviour

{

    [SerializeField]

    private Gun currentGun;

    private float currentFireRate;

    private AudioSource audioSource;

    private bool isReload = false;

    private bool isFineSughtMode = false;

    private Vector3 originPos;



    private RaycastHit hitInfo;

   

    private Camera theCam;


   


    void Start()

    {

        originPos = Vector3.zero;

        audioSource = GetComponent<AudioSource>();

    }




    void Update()

    {

        GunFireRateCalc();

        TryFire();

        TryReload();

        TryFineSight();

    }

    private void GunFireRateCalc()

    {

        if (currentFireRate > 0)

            currentFireRate -= Time.deltaTime;

    }

    private void TryFire()

    {

        if (Input.GetButton("Fire1") && currentFireRate <= 0 && !isReload)

        {

            Fire();

        }

    }

    private void Fire() //발사전

    {

        if (!isReload)

        {

            if (currentGun.currentBulletCount > 0)

                Shoot();

            else

                StartCoroutine(ReloadCoroutine());

            CancelFineSight();

        }

       

    }

    private void Shoot()//발사후 

    {

        currentGun.currentBulletCount--;

        currentFireRate = currentGun.fireRate;

        PlaySE(currentGun.fire_Sound);

        currentGun.muzzleFlash.Play();

        Hit();

        StopAllCoroutines();

        StartCoroutine(RetroActionCoroutine());

    }

    private void Hit()

    {

        if (Physics.Raycast(theCam.transform.position,theCam.transform.forward, out hitInfo, currentGun.range))

        {

            Debug.Log(hitInfo.transform.name);

        }

    }


    private void TryReload()

    {

        if(Input.GetKeyDown(KeyCode.R) && !isReload && currentGun.currentBulletCount < currentGun.reloadBulletCount)

        {

            CancelFineSight();

            StartCoroutine(ReloadCoroutine());

        }

    }

    IEnumerator ReloadCoroutine()

    {

        if(currentGun.carryBulletCount > 0)

        {

            isReload = true;

            currentGun.GunAnim.SetTrigger("Reload");

           

            currentGun.carryBulletCount += currentGun.currentBulletCount;

                currentGun.currentBulletCount = 0;

           

            yield return new WaitForSeconds(currentGun.reloadTime);


            if(currentGun.carryBulletCount >= currentGun.reloadBulletCount)

            {

                currentGun.currentBulletCount = currentGun.reloadBulletCount;

                currentGun.carryBulletCount -= currentGun.reloadBulletCount;

            }

            else

            {

                currentGun.currentBulletCount = currentGun.carryBulletCount;

                currentGun.currentBulletCount = 0;

            }

            isReload = false;

        }

        else

        {

            Debug.Log("총알이 없습니다.");

        }

    }

    private void TryFineSight()

    {

        if (Input.GetButtonDown("Fire2") && !isReload)

        {

            FineSight();

        }

    }

    private void CancelFineSight()

    {

        if (isFineSughtMode)

            FineSight();

    }


    private void FineSight()

    {

        isFineSughtMode = !isFineSughtMode;

        currentGun.GunAnim.SetBool("FineSughtMode", isFineSughtMode);

        if (isFineSughtMode)

        {

            StopAllCoroutines();

            StartCoroutine(FineSightActivateCoroutine());

        }

        else

        {

            StopAllCoroutines();

            StartCoroutine(FineSightDeacctivateCoroutine());

        }

    }

    IEnumerator FineSightActivateCoroutine()

    {

        while (currentGun.transform.localPosition != currentGun.fineSightOriginPos)

        {

            currentGun.transform.localPosition = Vector3.Lerp(currentGun.transform.localPosition, currentGun.fineSightOriginPos, 0.2f);

            yield return null;


        }

    }

    IEnumerator FineSightDeacctivateCoroutine()

    {

        while (currentGun.transform.localPosition != originPos)

        {

            currentGun.transform.localPosition = Vector3.Lerp(currentGun.transform.localPosition,originPos, 0.2f);

            yield return null;


        }

    }

    private void PlaySE (AudioClip _clip)

    {

        audioSource.clip = _clip;

        audioSource.Play();

    }

    IEnumerator RetroActionCoroutine() //반돟ㅇ

    {

        Vector3 recoilBack = new Vector3(currentGun.retroActionForce, originPos.y, originPos.z);


        Vector3 retroActionRecoilBack = new Vector3(currentGun.retroActionFineSightForce, currentGun.fineSightOriginPos.y, currentGun.fineSightOriginPos.z);

       

        if (isFineSughtMode)

        {

            currentGun.transform.localPosition = originPos;

            while(currentGun.transform.localPosition.x <= currentGun.retroActionForce - 0.02f) //반동 시작

            {

                currentGun.transform.localPosition = Vector3.Lerp(currentGun.transform.localPosition,recoilBack, 0.4f);

                yield return null;

            }


            while(currentGun.transform.localPosition != originPos) //원위치

            {

                currentGun.transform.localPosition = Vector3.Lerp(currentGun.transform.localPosition, originPos, 0.1f);

                yield return null;

            }


        }

        else

        {

            currentGun.transform.localPosition = currentGun.fineSightOriginPos;

            while (currentGun.transform.localPosition.x <= currentGun.retroActionFineSightForce - 0.02f) //반동 시작

            {

                currentGun.transform.localPosition = Vector3.Lerp(currentGun.transform.localPosition, retroActionRecoilBack, 0.4f);

                yield return null;

            }


            while (currentGun.transform.localPosition != currentGun.fineSightOriginPos) //원위치

            {

                currentGun.transform.localPosition = Vector3.Lerp(currentGun.transform.localPosition, originPos, 0.1f);

                yield return null;

            }

        }


    }

    public Gun GetGun()

    {

        return currentGun;

    }

}

  

 

언어 쓰는데 오류는 안나옵니다. 하지만 유니티에서 

 
UnassignedReferenceException: the variable theCam of Gunc has not been assigned. you probably need to assign the theCam variable of the Gunc sc__ript in the inspector

이라는 문구가 뜨면서 게임 실행 후 총을 쏘는 행동을 하면 카메라가 이상한 곳으로 이동되면서 게임이 정지 됩니다.

 



댓글 | 1
1


(526250)

112.146.***.***

theCam 변수에 할당된 값이 안보이네요. 선언하는 부분에 SerializeField 같은거 붙여서 인스펙터에 노출할 다음에 메인카메라를 연결해주시든 해야 될 것 같아요.
19.11.08 00:12


1


댓글은 로그인 후 이용 가능합니다.




ID 구분 제목 글쓴이 추천 조회 날짜
777 전체공지 알리익스프레스 연말세일 쿠폰 8[RULIWEB] 2019.12.09
30589676 질문 루리웹-9423708924 277 2019.12.08
30589675 질문 루리웹-9423708924 262 2019.12.08
30589674 질문 루리웹-8051983096 256 2019.12.08
30589673 질문 강블루 330 2019.12.08
30589672 질문 루리웹-4959489945 2 2007 2019.12.08
30589671 질문 알케이데스 439 2019.12.08
30589670 질문 루리웹-2075043880 567 2019.12.08
30589669 질문 포리얌 395 2019.12.07
30589668 질문 lllllll 269 2019.12.07
30589667 질문 chocopenti 301 2019.12.07
30589666 질문 아인스트 알피미 340 2019.12.07
30589665 질문 루리웹-3788805294 367 2019.12.07
30589663 질문 업로드시 즉시적용 211 2019.12.07
30589662 질문 루리웹-0243470763 470 2019.12.07
30589661 질문 루리웹-6602346164 541 2019.12.07
30589660 질문 호에에에에 170 2019.12.07
30589659 질문 루리웹-3009515235 792 2019.12.07
30589656 질문 루리웹-5331871706 410 2019.12.07
30589655 질문 Hazelnut 362 2019.12.07
30589653 질문 Lovewords 156 2019.12.07
30589652 질문 히토미곰 217 2019.12.07
30589651 질문 오이는싫어요 708 2019.12.07
30589650 질문 Avacyn 296 2019.12.07
30589649 질문 jtd1vh0sz 394 2019.12.07
30589648 질문 사랑합니다♡ 556 2019.12.07
30589647 질문 루리웹-7084322811 402 2019.12.07
30589646 질문 루리웹-1608342365 134 2019.12.07
30589644 질문 루리웹-8750223937 800 2019.12.07

글쓰기 39077개의 글이 있습니다.


1 2 3 4 5 6 7 8 9 10



X