2020/08/31 - [내 공부/Unity_Shader] - 유니티 2D 플레이어 좌우로 이동하기
1. 화살표위치 변경했다.
postion = (0, 6, 0)
2. 일단 책에 쓰여진대로 스크립트 적용하기
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class ArrowController : MonoBehaviour
{
// Start is called before the first frame update
void Start()
{
}
void Update()
{
transform.Translate(0,-0.1f,0);
if(transform.position.y<-5.0f)
{
Destroy(gameObject);
}
}
}
난 이렇게 넣으면 화살표가 뚝뚝 끊기면서 떨어질줄알고 전에 포스팅했던데로 axis를 넣어봤더니
움직이지도않았음
;
근데 저 코드만 넣어도 내가 생각한대로 잘 움직임 ^^;
머지?
아무튼 화살이 떨어진다. 내가 생각한대로 아주이쁘게
화살떨어지는건 밑에 설명있음
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class ArrowController : MonoBehaviour
{
GameObject player;
void Start()
{
this.player = GameObject.Find("player");
}
void Update()
{
transform.Translate(0,-0.1f,0);
if (transform.position.y < -5.0f)
{
Destroy(gameObject);
}
Vector2 p1 = transform.position;
Vector2 p2 = this.player.transform.position;
Vector2 dir = p1 - p2;
float d = dir.magnitude;
float r1 = 0.5f;
float r2 = 1.0f;
if (d < r1 + r2)
{
Destroy(gameObject);
}
}
}
책에 나오는 내용은 이러했다.
고냥이와 화살표반경을 계산한건데...아무튼
p1 = 화살 중심좌표 / p2 = 플레이어 중심좌표
r1 = 화살 반경 / r2 = 플레이어 반경
플레이어의 좌표를 알기위해 Start 메서드에서 플레이어를 찾는다.
dir의 길이는 magnitude를 사용해 계산한다.
아무튼 두 오브젝트가 충돌하면 Destroy 메서드로 화살 오브젝트를 소멸시킨다.
이제 화살이 여러개 떨어지게 만들어야한다
빈 오브젝트에 화살이 생겨나는 스크립트를 넣어야한다.
스크립트 이름은 ArrowGenerator
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class ArrowGenerator : MonoBehaviour
{
public GameObject arrowPrefab;
private float span = 0.5f;
private float delta = 0;
void Update()
{
this.delta += Time.deltaTime;
if (this.delta > this.span)
{
this.delta = 0;
GameObject go = Instantiate(arrowPrefab) as GameObject;
int px = Random.Range(-11, 11);
go.transform.position = new Vector3(px, 7, 0);
;
}
}
}
화살 인스턴스를 1초마다 한개씩 생성
화살 인스턴스는 Instantiate 메소드를 사용해 생성한다.
Instantiate 메소드는 매개변수로 프리팹을 전달하면 반환값으로 프리팹 인스턴스를 돌려준다.
화살의 x좌표는 -11 부터 11 사이에 불규칙하게 위치하도록 Random 클래스의 Range 메소드를 사용한다.
변수 span은 화살의 생성 간격을 뜻한다.
설정된 간격시간보다 델타 타임이 더 큰 경우 델타 타임은 0으로 설정되고
화살표 프리팹이 랜덤한위치 (-11,11) 에서 생성된다.
이거는 내가 코드를 잘못입력해서 거의 화살비가 쏟아져내렸음 ㅋㅋㅋㅋㅋㅋ
if 문안에 delta를 0으로 초기화시키는 걸 빼먹고
this.delta += Time.deltaTime; 한줄을 더 써붙였더니 화살폭우가 생겨났다.
ㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋ
아무튼
이건줄 모르고 계속 span 값만 조절했으니 답답할 노릇이였음
저 오른쪽 상단에 달린 UI는 다음번에 ㅎ
'내 공부 > Unity_' 카테고리의 다른 글
Post processing Stack 영화같은 필터 적용하기 (0) | 2020.12.07 |
---|---|
유니티 2D 플레이어 좌우로 이동하기 (1) | 2020.08.31 |
Unity 텍스쳐 입력과 출력 (0) | 2020.07.09 |