유니티 공부.. 물리 충돌 이벤트
unity 유니티 공부 2024. 11. 17. 13:51 |물리 충돌 이벤트 [골드메탈님 유니티 입문 강좌 B11]
+
스크롤 바는 끄기
tab 은 top 으로
이래야 비쥬얼 스크립트 작게 켜도 보기 좋게 됨
+
스크립트 쓸 때 On 만써도
On어쩌구 저쩌구 리스트가 쫙 뜬다
특정 상황일 때 발동하는 조건문이다
여기선 void OnCollisionEnter 를 쓰겠다
물리적인 충돌이 시작되었을때. 를 의미
+
void OnCollisionEnter(Collision collision)
{
if (collision.gameObject.name
== "MyCapsule")
mat.color = new Color(0,0,0);
}
void OnCollisionExit(Collision collision)
{
if (collision.gameObject.name
== "MyCapsule")
mat.color = new Color(1, 1, 1);
mat color 0 0 0 은 검은색이다
mat color 1 1 1 은 흰색이다
mat color 255 255 255 는 흰색이 아니다. 엄청 밝은 눈뽕 빛이 되버리니 주의할것
0 0 0 | 1 1 1 | 255 255 255 |
+
~~~~~~~~~~~~~~~~~~~~~ 갑자기 문제 생김 ~~~~~~~~~~~~~~~
문제1. 특정 스크립트 부분이 싹 다 회색으로 변하는 문제
->모노비헤비어 스크립트 하나만 남겨두고 나머지 싹 다 지우니 해결된건가?
비쥬얼 스튜디오 툴 옵션 - 툴 포 유니티 이것저것 다 false 로 하니 해결된건가?
-> 또 회색으로 보임; 해결 안됨
문제2. 플레이 모드시 키보드 인풋, 마우스 인풋이 안되는 문제 발생
->
플레이어 오브젝트에 할당된 스크립트 컴포넌트를 다 지우고.
다시 스크립트를 드래그해서 지정하니 점프만 해결됨
상하좌우 인풋입력은 해결안됨..
다음 스크립트를 다시 제대로 입력하니 해결 됨
using UnityEngine;
public class moving : MonoBehaviour
{
Rigidbody rigid;
void Start()
{
rigid = GetComponent<Rigidbody>();
}
void FixedUpdate()
{
if (Input.GetButtonDown("Jump"))
{
rigid.AddForce(Vector3.up * 3, ForceMode.Impulse);
}
Vector3 vec = new Vector3
(
Input.GetAxisRaw("Horizontal"), //x 축
0,//y 축
Input.GetAxisRaw("Vertical") //z 축
);
rigid.AddForce(vec / 2, ForceMode.Impulse);
}
void OnTriggerStay(Collider other)
{
if (other.name == "Sphereother")
rigid.AddForce(Vector3.up * 1, ForceMode.Impulse);
}
}
~~~~~~~~~~~~~~~~~~~~~ 갑자기 문제 생김 ~~~~~~~~~~~~~~~
암튼 1년 이상된 이상한 에셋 다 쓰지 말것
+
using UnityEngine;
public class sphereother : MonoBehaviour
{
MeshRenderer mesh;
Material mat;
void Start()
{
mesh = GetComponent<MeshRenderer>();
mat = mesh.material;
}
private void OnCollisionEnter(Collision collision)
{
if (collision.gameObject.name == "Myball")
mat.color = new Color(0, 0, 0);
}
private void OnCollisionExit(Collision collision)
{
if (collision.gameObject.name == "Myball")
mat.color = new Color(1, 1, 1);
}
}
npc 오브젝트에 삽입할 스크립트
Myball 이라는 오브젝트에 충돌시 색이 변하는 코드블럭
+
using UnityEngine;
public class moving : MonoBehaviour
{
Rigidbody rigid;
void Start()
{
rigid = GetComponent<Rigidbody>();
}
void FixedUpdate()
{
if (Input.GetButtonDown("Jump"))
{
rigid.AddForce(Vector3.up * 3, ForceMode.Impulse);
}
Vector3 vec = new Vector3
(
Input.GetAxisRaw("Horizontal"), //x 축
0,//y 축
Input.GetAxisRaw("Vertical") //z 축
);
rigid.AddForce(vec / 2, ForceMode.Impulse);
}
void OnTriggerStay(Collider other)
{
if (other.name == "Cubeup")
rigid.AddForce
(Vector3.up * 0.2f, ForceMode.Impulse);
}
}
플레이어 될 오브젝트에 삽입할 스크립트
wasd 또는 화살표 키를 누르면 이동
스페이스바 누르면 점프 함
Cubeup 에 닿으면 위로 상승함
(Cubeup 오브젝트의 콜리젼 콤포넌트엔 이스 트리거 활성화 해야함)
+