Unity_beginner #19

haechi·2021년 7월 14일
0

unity

목록 보기
19/39

210714
unity_beginner #19


  • 돌 던지기
    1.공을 향해 날아가도록 구현

Stone.cs

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

public class Stone : MonoBehaviour
{
    Vector3 target;
    // Start is called before the first frame update
    void Start()
    {
        target = GameObject.Find("Ball").transform.position;    // 초기 타겟 위치 -> Ball의 위치
    }

    // Update is called once per frame
    void Update()
    {
        transform.position = Vector3.MoveTowards(transform.position, target, 0.1f); // 해당 방향으로 날아가게 한다.
    }
}

2.돌이 회전하도록 기능 추가

transform.Rotate(new Vector3(0, 0, 5)); // z축의 방향으로 5도만큼 회전

3.일정 시간 간격으로 생성

-하나의 obstacle을 shooter로 변경 (obstacle script삭제)

shooter.cs

timeCount += Time.deltaTime;    // 지난 update에서 지금 update사이의 시간
        if(timeCount > 3)   // timecount가 3을 넘긴 경우
        {
            // Debug.Log("돌을 던져라");
            timeCount = 0;

        }

일정 시간마다 실행되도록 하였다.
-stone 오브젝트를 projector view로 드래그하여 prefab 생성

public GameObject stone;

prefab의 stone을 사용하기 위한 게임 오브젝트 선언

shooter의 stone란에 stone 오브젝트를 넣어준다.

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

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


    // Start is called before the first frame update
    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()
    {

    }

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

        }
        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;
        }
    }
}


계속해서 공을 향해 생성되는 stone을 볼 수 있다.

참고
https://programmers.co.kr/learn/courses/1/lessons/731

profile
공부중인 것들 기록

0개의 댓글