728x90
2. Bamsongi
1) 밤송이 던져서 과녁(타겟)에 맞춰서 붙게하기
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class BamsongiController : MonoBehaviour
{
public Rigidbody rBody;
[SerializeField]
private float forwardForce = 2000;
private void Awake()
{
this.rBody = this.GetComponent<Rigidbody>();
}
// Start is called before the first frame update
void Start()
{
Debug.Log("Start");
this.Shoot();
}
public void Shoot()
{
Debug.Log("Shoot");
//앞으로 힘을 줘서 이동시킴
//앞 : (0,0,1)
//Vector3.forward : 월드좌표
//밤송이가 바라보는 앞쪽 : 로컬좌표
this.rBody.AddForce(0,200,this.forwardForce); //200: 밤송이 지면낙하 방지
}
public void OnCollisionEnter(Collision collision)
{
//충돌한 대상의 게임오브젝트 이름
if(collision.gameObject.tag == "Target")
{
Debug.Log("과녁에 충돌!");
this.rBody.isKinematic = true; //과녁에 붙이기
}
}
}
2) 파티클 재생 및 밤송이 공장 만들기
BamsongiController
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class BamsongiController : MonoBehaviour
{
public Rigidbody rBody;
[SerializeField]
private float forwardForce = 2000;
private ParticleSystem effect;
private void Awake()
{
this.rBody = this.GetComponent<Rigidbody>();
this.effect = this.GetComponent<ParticleSystem>();
Debug.Log("Awake");
}
void Start()
{
Debug.Log("Start");
//this.Shoot();
}
public void Shoot(Vector3 force)
{
Debug.Log("Shoot");
//앞으로 힘을 줘서 이동시킴
//앞 : (0,0,1)
//Vector3.forward : 월드좌표
//밤송이가 바라보는 앞쪽 : 로컬좌표
this.rBody.AddForce(force); //200: 밤송이 지면낙하 방지
}
public void OnCollisionEnter(Collision collision)
{
//충돌한 대상의 게임오브젝트 이름
if(collision.gameObject.tag == "Target")
{
Debug.Log("과녁에 충돌!");
this.rBody.isKinematic = true; //과녁에 붙이기
this.effect.Play(); //파티클 효과 실행
}
}
}
BamsongiGenerator
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class BamsongiGenerator : MonoBehaviour
{
//밤송이 프리팹
public GameObject bamsongiPrefab;
// Start is called before the first frame update
void Start()
{
}
// Update is called once per frame
void Update()
{
if (Input.GetMouseButtonDown(0))
{
//마우스를 클릭하면 월드공간에서 Ray를 생성
Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition);
//생성된 레이를 에디터에서 출력
Debug.DrawRay(ray.origin, ray.direction * 1000f, Color.red, 1f);
//ray.direction.normalized (단위 벡터로 변경)
//길이가 1인 벡터 : 방향
Vector3 force = ray.direction.normalized * 2000f;
this.CreateBamsongi(force);
}
}
//마우스 클릭하여 새로운 밤송이 생성
public void CreateBamsongi(Vector3 force)
{
//게임오브젝트 복제(생성)
GameObject go = Instantiate(this.bamsongiPrefab);
BamsongiController controller = go.GetComponent<BamsongiController>();
controller.Shoot(force); //밤송이 생성후 밤송이 던지기
}
}
'KDT > 유니티 기초' 카테고리의 다른 글
23/08/07 AppleCatch (0) | 2023.08.07 |
---|---|
23/08/06 [주말과제] 캐릭터 위치 이동 및 몬스터 공격(수정) (1) | 2023.08.06 |
23/08/05 유니티 기초 복습(Roulette, CarSwipe) (0) | 2023.08.05 |
23/08/04 유니티짱 대각선으로 이동 (0) | 2023.08.04 |
23/08/04 유니티짱 직선으로 움직이기 (0) | 2023.08.04 |