210714
unity_beginner #20
부모클래스 -> 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