728x90
벡터의 외적을 활용한 게임 요소 구현
using System;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class WarriorController : MonoBehaviour
{
private Rigidbody2D warriorRigidbody2D;
public float jumpPower;
public float speed;
void Start()
{
warriorRigidbody2D = GetComponent<Rigidbody2D>();
}
void Update()
{
PlayerMove();
PlayerJump();
}
void PlayerMove()
{
float x = Input.GetAxis("Horizontal"); //x축 값만 받아서 사용
transform.Translate(Vector3.right * (x * speed * Time.deltaTime));
//Vector3.Right는 월드 축을 기준으로 오른쪽(x축) /
//Transform.Right는 Player를 기준으로 오른쪽(플레이어가 바라보는 방향에 따라 기준이 변함)
}
void PlayerJump()
{
if(Input.GetKeyDown(KeyCode.Space))
warriorRigidbody2D.AddForce(Vector2.up * jumpPower,ForceMode2D.Impulse);
//AddForce(Vector2.up)은 월드좌표를 기준으로 위(y축)로 힘을 가함
//힘을 위쪽방향으로 jumpPower만큼 줄 것인데 타입은 impulse(순간적인 힘)
}
private void OnCollisionEnter2D(Collision2D _col)
{
//벽의 아래쪽 or 위쪽에 부딪혔는지 판별
//부딪힌 충돌체의 태그가 Ground가 아닐때만 발동
if (_col.gameObject.tag != "Ground")
{
UpOrDown(_col);
}
}
void UpOrDown(Collision2D _col)
{
Vector3 distVec = transform.position - _col.transform.position; //Warrior Pos - Wall Pos
//Wall에서 Warrior방향으로 벡터를 만든다
//오른손 법칙을 사용해보면 반시계 방향 >> 엄지의 방향이 양수 : 벽의 위에 부딪힘
//오른손 법칙을 사용해보면 시계 방향 >> 엄지의 방향이 음수 : 벽의 아래에 부딪힘
if (Vector3.Cross(_col.transform.right, distVec).z > 0)
{
//_col.transform.right는 충돌체의 오른쪽 방향벡터
Debug.Log("Up : 벽의 위에 부딪힘");
return;
}
Debug.Log("Down : 벽의 아래에 부딪힘");
}
}
728x90
'게임 프로그래밍 > 유니티 프로젝트' 카테고리의 다른 글
[Unity]힘과 가속도의 관계와 AddForce를 활용한 게임 구현하기 (0) | 2021.12.29 |
---|---|
[Unity]행렬과 Transform 이동 함수 (0) | 2021.12.29 |
[Unity]벡터의 내적을 활용한 게임요소 구현하기 (0) | 2021.12.29 |
[Unity]벡터를 이용한 플레이어 이동 구현하기 (0) | 2021.12.28 |
[Unity]삼각함수를 활용한 미사일 슈팅 구현하기 (0) | 2021.12.28 |