[Unity]벡터의 외적을 활용한 게임요소 구현하기

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