Unity_beginner #20

haechi·2021년 7월 14일
0

unity

목록 보기
20/39

210714
unity_beginner #20


  • 상속
    shooter는 다른 obstacle과 같이 이동하면서 stone을 생성해낸다.
    코드가 obstacle과 stone을 생성하는 부분을 제외하고 같다.
    -이런 경우는 같은 코드를 중복하는건 비효율적이다
    -> 상속(Inheritance)을 이용

부모클래스 -> obstacle
자식클래스 -> shooter

obstacle.cs

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

public class Obstacle : MonoBehaviour
{
    void OnCollisionEnter(Collision collision)
    {
        Vector3 direction = collision.gameObject.transform.position - transform.position;
        direction = direction.normalized * 100;
        collision.gameObject.GetComponent<Rigidbody>().AddForce(direction);

    }

    float delta = 0.03f;
    // Start is called before the first frame update
    void Start()
    {
    
    }

    // Update is called once per frame
    protected void Update() // 자식 클래스에서 호출 가능
    {
        float newXPosition = transform.localPosition.x + delta;
        transform.localPosition = new Vector3(newXPosition, transform.localPosition.y, transform.localPosition.z);
        if(transform.localPosition.x < -3.5)
        {
            delta = 0.03f;
        }
        else if(transform.localPosition.x > 3.5)
        {
            delta = -0.03f;
        }
    }
}

shooter.cs

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

public class Shooter : Obstacle // Obstacle을 상속
{
    public GameObject stone;    // prefab stone을 사용하기 위한 오브젝트

    float timeCount = 0;    // 시간을 카운트하기 위한 변수 선언
    void Update()   // override
    {
        base.Update();  // 부모 클래스의 Update를 사용
        timeCount += Time.deltaTime;    // 지난 update에서 지금 update사이의 시간
        if(timeCount > 3)   // timecount가 3을 넘긴 경우
        {
            Instantiate(stone, transform.position, Quaternion.identity);    // 현재 shooter의 위치에서 생성
            // 새로운 게임 오브젝트 생성
            timeCount = 0;
        }
    }
}

중복되는 부분을 상속을 통해서 구현한다면 중복을 줄일 수 있다.

참고
https://programmers.co.kr/learn/courses/1/lessons/733#note

profile
공부중인 것들 기록

0개의 댓글