아카이브
Hero Shooter 조이스틱 이동, 포탈생성 본문
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();
}
}
'유니티 심화' 카테고리의 다른 글
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 |