게임 오브젝트 던지기 질문
729
작성한 질문수 7
using System;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.EventSystems;
public class Test : MonoBehaviour, IBeginDragHandler, IDragHandler, IEndDragHandler
{
Rigidbody rb;
float y;
float startTime, endTime;
Vector3 startPostion, endPostion;
private void Awake()
{
// y축 고정
y = transform.position.y;
rb = GetComponent<Rigidbody>();
}
// 드래그 중일 시 해당 객체가 따라오도록 설정
public void OnDrag(PointerEventData eventData)
{
transform.position = GetPosition(eventData);
}
public void OnBeginDrag(PointerEventData eventData)
{
startTime = Time.time;
startPostion = GetPosition(eventData);
// 드래그 시작 시 속도를 0으로 만듬(작동안함)
rb.velocity = Vector3.zero;
}
// 드래그 종료 시 속도를 구해 해당 방향으로 날려보냄
public void OnEndDrag(PointerEventData eventData)
{
endTime = Time.time;
endPostion = GetPosition(eventData);
// 속도 = 이동거리 / 걸린시간
Vector3 dir = (endPostion - startPostion).normalized;
float dis = (endPostion - startPostion).magnitude;
float speed = dis / (endTime - startTime);
// 해당 방향으로 속도의 10배에 가하는 힘을 가한다.
rb.AddForce(dir * speed * 10f);
}
// 레이캐스트는 해당 객체가 아닌 해당 객체 뒤의 물체에 하며, 그 물체의 좌표를 반환
Vector3 GetPosition(PointerEventData eventData)
{
RaycastHit[] hits;
Ray ray = Camera.main.ScreenPointToRay(eventData.position);
//Debug.DrawRay(Camera.main.transform.position, ray.direction * 100f, Color.red, 1.0f);
hits = Physics.RaycastAll(ray, 1000f);
foreach (RaycastHit hit in hits)
{
if (hit.collider.name != transform.name)
{
return new Vector3(hit.point.x, y, hit.point.z);
}
}
return transform.position;
}
}
답변 1
0
실제 제작과 관련된 질문은 시간 관계상 도움을 드릴수 없습니다.
그리고 실전에선 어떻게 제작하느냐 << 도 정말 의미가 없습니다.
프로젝트가 100개면 100개에서 다 작업 방식이 다르고
지금 질문자처럼 ?의 상황에서 시작해서 이것저것 헤딩하다가
결과물이 나온 방법으로 만드는 것이지,
수학 문제처럼 답이 존재하는 것이 아닙니다.
UI가 아닌 오브젝트들은 굳이 IBegin~~ 시리즈를 사용할 필요가 없는데요.
또한 드래그드롭으로 던질 요령이라면, angry birds 시리즈가 생각납니다.
아주 유명한 게임 모작은 다 튜토리얼이 존재합니다.
https://www.youtube.com/watch?v=QM8M0RainRI
0
답변 감사합니다. 참조하겠습니다. 하지만 제가 보여드린 코드는 앵그리 버드와 같이 새총 형태가 아니라 게임 오브젝트를 클릭 후 드래그 중에는 해당 오브젝트와 동일 시 판단하여 집어 던질 때, 마우스의 드래그 속도에 따라 날라가는 물리 현상을 접목하고 싶었습니다.
IBegin 시에 시작시간을 잡으니 드래그 중일 때 게임 오브젝트를 잡고 있다가 나중에 던질 경우에는 걸린 시간이 길어져 날라가지를 않네요. 마우스의 이동 속도와 Rigidbody의 속도를 연결시킬 수 있는 방법이 있나요?
ResourceManager 클래스 관련 질문
1
18
2
몬스터 HP 게이지바 이동
0
20
1
매니저 관련 질문이 있습니다.
0
68
2
비쥬얼 스튜디오에서 unity연결이 없습니다.
0
74
2
UI 기능 관련 질문이 있습니다!
0
70
2
픽셀 좌표 스크린 좌표
0
48
0
전체적으로 코드 읽는게 굉장히 오래 걸리네요...
0
103
2
카메라 #2 수업 캐릭터 쓰러짐 해결
0
95
1
플레이어 움직임이 끝날때, 기울어짐 현상
0
99
1
Input 적용과 관련하여 질문 있습니다.
0
90
1
디버그 불가.. Unity에 연결 불가
0
98
1
달리기 애니메이션 에러
0
98
2
오랜만에 게임을 만들다가 사운드 관련해서 뭔가 궁금한게 있어서 봤습니다
0
75
1
GetKey 오류
0
128
2
에셋을 어디에 올려두신지 알 수 있나요?
0
114
1
재귀호출? 오류나는데 왜 이래요 ?
0
177
6
Animation blending 파라미터 계산
0
75
1
newPos와 to지점이 겹쳐져야 하는거 아닌가요?
0
112
3
오브젝트 복제하니까 자꾸 이런게 뜨면서 꺼집니다
0
96
2
질문있습니다
0
155
2
아 이거 소스코드 같은거 없나요?
0
152
3
질문 드립니다. string.IsNullOrEmpty(name)
0
94
2
@Managers 가 씬에 배치되어 있어도 문제가 되지 않나요?
0
139
2
유니티6 NavMesh 안되는분들
1
192
1





