아카이브

Hero Shooter 조이스틱 이동, 포탈생성 본문

유니티 심화

Hero Shooter 조이스틱 이동, 포탈생성

timbercat 2023. 8. 23. 18:21

1. 조이스틱을 통해 플레이어 캐릭터 이동

2. 포탈 생성 후 플레이어 캐릭터가 포탈위로 이동하면 메세지 생성

 

TutorialMain

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class TutorialMain : MonoBehaviour
{
    [SerializeField]
    private VariableJoystick joystick;

    [SerializeField]
    private Player player;

    [SerializeField]
    private Portal portal;

    private void Start()
    {
        this.portal.onReachPortal = () => {
            Debug.Log("You've reached the portal");
        };
    }
    void Update()
    {
        var h = this.joystick.Horizontal;
        var v = this.joystick.Vertical;
        var dir = new Vector3(h, 0, v);
        if (dir != Vector3.zero)
        {
            this.player.Move(dir);
        }
    }
}

Player

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class Player : MonoBehaviour
{
    [SerializeField]
    private float moveSpeed = 2f;

    private Rigidbody rBody;

    public System.Action onReachPortal;

    private void Start()
    {
        this.rBody = this.GetComponent<Rigidbody>();
    }

    public void Move(Vector3 dir)
    {
        this.rBody.isKinematic = false;
        var angle = Mathf.Atan2(dir.x, dir.z) * Mathf.Rad2Deg;
        var q = Quaternion.AngleAxis(angle, Vector3.up);
        this.transform.rotation = q;
        this.transform.Translate(Vector3.forward * this.moveSpeed * Time.deltaTime);
    }

}

Portal

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class Portal : MonoBehaviour
{
    public System.Action onReachPortal;
    private SphereCollider col;
    // Start is called before the first frame update
    void Start()
    {
        this.col = this.GetComponent<SphereCollider>();
    }

    private void OnTriggerEnter(Collider other)
    {
        if (other.CompareTag("Player"))
        {
            this.col.enabled = false;
            this.onReachPortal();
        }
    }

튜토리얼 메인 오브젝트 스크립트에 조이스틱, 플레이어, 포탈 적용

 

플레이어 오브젝트에 콜라이더와 리지드바디, 스크립트를 적용
포탈에 콜라이더를 적용하고 is Trigger를 체크(is Trigger를 적용하면 다른 오브젝트와 충돌할 때 관통 가능)

'유니티 심화' 카테고리의 다른 글

HeroShooter 적이 플레이어 추적  (0) 2023.08.29
Hero Shooter 문열기, 애니메이션 적용  (0) 2023.08.24
8/20 주말과제 궁수 이동, 공격  (0) 2023.08.21
총알발사  (0) 2023.08.18
캐릭터 이동  (0) 2023.08.17