Unity

    ํ™•์žฅ๋ฉ”์†Œ๋“œ

    using System; using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.EventSystems; //ํ™•์žฅ ๋ฉ”์†Œ๋“œ : ๊ธฐ์กด ํด๋ž˜์Šค ๋ฐ ๋‹ค๋ฅธ ํด๋ž˜์Šค์— ์ธ์Šคํ„ด์Šค ๋ฉ”์†Œ๋“œ๋ฅผ ์ถ”๊ฐ€ํ•  ์ˆ˜ ์žˆ์–ด, ๊ธฐ๋Šฅ์„ ํ™•์žฅํ•˜๋Š” ๊ธฐ๋ฒ• //์กฐ๊ฑด 1 : static ํด๋ž˜์Šค์—ฌ์•ผ ํ•  ๊ฒƒ(MonoBehaviour๋Š” ํ•„์š”์—†์œผ๋ฏ€๋กœ ์ƒ์† ์ œ๊ฑฐ) public static class Extension { //์ฒซ๋ฒˆ์งธ ๋งค๊ฐœ ๋ณ€์ˆ˜ : ํ™•์žฅํ•˜๋ ค๊ณ  ํ•˜๋Š” ๋Œ€์ƒ //this ํ™•์žฅํ•  ํด๋ž˜์Šค ๋˜๋Š” ํ˜•์‹ public static void AddUIEvent(this GameObject go, Action action, Define.UIEvent..

    ๋‹ค์–‘ํ•˜๊ฒŒ ์ž‘์„ฑํ•  ์ˆ˜ ์žˆ๋Š” ๋žŒ๋‹ค์‹

    //๋ฌด๋ช…๋ฉ”์†Œ๋“œ//uIEvent.OnDragHandler += delegate (PointerEventData data){uIEvent.gameObject.transform.position = data.position; }; //๋žŒ๋‹ค์‹//uIEvent.OnDragHandler += (PointerEventData data) => { uIEvent.gameObject.transform.position = data.position; }; //๋žŒ๋‹ค์‹//uIEvent.OnDragHandler += (PointerEventData data) => uIEvent.gameObject.transform.position = data.position; //๋žŒ๋‹ค์‹//uIEvent.OnDragHandler += ((Pointe..

    ํฌํ†ค ๋ฌด๋ฃŒ๋ฒ„์ „ ์‚ฌ์šฉํ•˜๊ธฐ(4) RPC

    ์œ ์ €๋“ค์ด ํ•จ์ˆ˜๋ฅผ ์‹คํ–‰ํ•˜๋ฉด ๋‹ค๋ฅธ ์œ ์ €๋“ค๋„ ๊ทธ ์ƒํƒœ๋ฅผ ๋ณผ ์ˆ˜ ์žˆ๊ฒŒ RPCํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•ด์•ผํ•œ๋‹ค. ๊ฐ€๋ น, ์ด์•Œ ํ”„๋ฆฌํŽฉ์„ ์ƒ์„ฑ์‹œํ‚ค๋Š” FireBullet()์„ ํ”Œ๋ ˆ์ด์–ด๊ฐ€ ์‹คํ–‰ํ•˜์˜€๊ณ , ์ด ๋™์ž‘ ์ƒํƒœ๋ฅผ ๋‹ค๋ฅธ ํ”Œ๋ ˆ์ด์–ด๋“ค๋„ ๋ณด๊ฒŒ ํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” ์•„๋ž˜์™€ ๊ฐ™์€ ์ž‘์—…์ด ํ•„์š”ํ•˜๋‹ค. [PunRPC] public void FireBullet() { Instantiate(Resources.Load("bullet"),transform.position,transform.rotation); } if(Input.GetKeyDown(KeyCode.Space)) { //FireBullet(); //ํ•จ์ˆ˜๋ฅผ ์‹คํ–‰ํ•˜๊ณ , ๊ทธ ํ•จ์ˆ˜๋ฅผ ์‹คํ–‰ํ–ˆ๋‹ค๋Š” ๊ฒƒ์„ ๋‹ค๋ฅธ ํ”Œ๋ ˆ์ด์–ด์—๊ฒŒ ์ „๋‹ฌ photonView.RPC("FireBullet",RpcTarget.AllViaSer..

    ํฌํ†ค ๋ฌด๋ฃŒ๋ฒ„์ „ ์‚ฌ์šฉํ•˜๊ธฐ(3) ์ด๋™์‹œ ๋ถ€๋“œ๋Ÿฝ๊ฒŒ ๋ณด์ด๊ธฐ ์œ„ํ•œ Lerp ์ถ”๊ฐ€

    ์•ž์„  ๊ธ€๊ณผ ์ด์–ด์„œ ์ž‘์„ฑํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. Transform View ์ปดํฌ๋„ŒํŠธ๋ฅผ ๋นผ๋„ ์ž˜ ์ž‘๋™ํ•˜๋Š” ์ฝ”๋“œ + ์ฃผ์„ using System.Collections; using System.Collections.Generic; using UnityEngine; using Photon.Pun; using Photon.Realtime; //๊ด€์ธก ์ปจํŠธ๋กค๋Ÿฌ //์ƒํƒœ๋ณ€ํ™” ๊ด€์ธก(๋ฐ์ดํ„ฐ์˜ ์ฃผ๊ณ ๋ฐ›์Œ) public class playerController : MonoBehaviourPunCallbacks, IPunObservable { private Vector3 curPos; private Quaternion curRot; void Start() { } void Update() { if(photonView.IsMine)//๋‚ด๊ฐ€ ํด..

    ํฌํ†ค ๋ฌด๋ฃŒ๋ฒ„์ „ ์‚ฌ์šฉํ•˜๊ธฐ(2) ํ”Œ๋ ˆ์ด์–ด ๋‹ค์ˆ˜ ์ƒ์„ฑ๊ณผ ์ƒํ˜ธ ์ƒํƒœ ๋™๊ธฐํ™”๋ฅผ ์œ„ํ•œ ๊ธฐ์ดˆ์ž‘์—…

    ํฌํ†ค ๋ฌด๋ฃŒ๋ฒ„์ „ ์‚ฌ์šฉํ•˜๊ธฐ(2) ํ”Œ๋ ˆ์ด์–ด ๋‹ค์ˆ˜ ์ƒ์„ฑ๊ณผ ์ƒํ˜ธ ์ƒํƒœ ๋™๊ธฐํ™”๋ฅผ ์œ„ํ•œ ๊ธฐ์ดˆ์ž‘์—…

    ์•ž์„  ๊ธ€๊ณผ ์ด์–ด์„œ ์ž‘์„ฑํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์ ๋‹นํžˆ ์บก์Š ํ•˜๋‚˜ ๋งŒ๋“ค๊ณ  ์ด๋ฆ„์€ player. rigidbody์ปดํฌ๋„ŒํŠธ์™€ PlayerController ํ•˜๋‚˜ ๋‹ฌ์•„์ฃผ๊ณ (์ถ”ํ›„ ์ž‘์„ฑ), Photon View ์ปดํฌ๋„ŒํŠธ์™€ Photon Transform View ์ปดํฌ๋„ŒํŠธ๋„ ๋‹ฌ์•„์ค€๋‹ค. player๊ฐ€ ์›€์ง์ผ ์ง€๋ฉด์ด ๋  ํ๋ธŒ ํ•˜๋‚˜ ์ƒ์„ฑํ•˜์—ฌ x์™€ z์˜ Scale ๊ฐ’์„ ์ž์œ ๋กญ๊ฒŒ ์กฐ์ •. ์ด ์บก์Š์€ ํ”Œ๋ ˆ์ด์–ด๋กœ ํ™œ๋™ํ•  ๊ฒƒ์ด๋‹ค. ์ด ์บก์Š์„ Resources ํด๋”๋ฅผ ์ƒˆ๋กœ๋งŒ๋“ค์–ด์„œ ๊ทธ ์•ˆ์— ํ”„๋ฆฌํŽฉ์œผ๋กœ ๋งŒ๋“ค๊ณ  ํ•˜์ด์–ด๋ผํ‚ค ์ฐฝ ์œ„์— ์žˆ๋Š” player๋Š” ์ง€์šด๋‹ค. ๋„คํŠธ์›Œํฌ๋งค๋‹ˆ์ €.cs๋ฅผ ์•„๋ž˜์™€ ๊ฐ™์ด ์ˆ˜์ •ํ•ด์ค€๋‹ค. public GameObject playerprefab; public Transform spawnspot; void SpawnPlayer() { /..

    ํฌํ†ค ๋ฌด๋ฃŒ๋ฒ„์ „ ์‚ฌ์šฉํ•˜๊ธฐ(1) ํฌํ†ค ID๋ฐ›์•„์„œ ์ž„ํฌํŠธ, ๋ฐฉ์ƒ์„ฑ

    2022๋…„ ๊ธฐ์ค€์œผ๋กœ ๊ณผ๊ฑฐ์˜ ๋ฌธ์„œ๋Œ€๋กœ ๋”ฐ๋ผํ•˜๋ฉด ํฌํ†ค์ด ์•ˆ๋  ์ˆ˜ ์žˆ๋‹ค. ํ•ด๋‹น ๊ธ€์€ 2022๋…„ 1์›” 4์ผ ๊ธฐ์ค€์œผ๋กœ ํฌํ†คPUN2๊ฐ€ ๋Œ์•„๊ฐ€๋Š” ๊ฒƒ์„ ํ™•์ธํ•˜๊ณ  ์ž‘์„ฑํ•˜๋Š” ๊ธ€์ด๋‹ค. ์†Œ์ˆ˜์˜ ๋ฉ€ํ‹ฐํ”Œ๋ ˆ์ด์–ด ๊ฒŒ์ž„์˜ ์œ ์ €๋Š” ๋ฌด๋ฃŒ ํฌํ†ค์œผ๋กœ ์ˆ˜์šฉ๊ฐ€๋Šฅํ•˜๋‹ค. ์•„๋ž˜ ํฌํ†ค ์‚ฌ์ดํŠธ์— ๊ฐ€์„œ ํšŒ์›๊ฐ€์ž…์„ ํ•œ ๋‹ค์Œ์— ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜ ์ƒ์„ฑ์„ ๋ˆ„๋ฅด๊ณ  ์ ๋‹นํžˆ ํ”„๋กœ์ ํŠธ ์ด๋ฆ„์„ ์จ์ฃผ๋ฉด ID๊ฐ€ ๋œฌ๋‹ค. https://www.photonengine.com/ko-KR/Photon ๊ธ€๋กœ๋ฒŒ ํฌ๋กœ์Šค ํ”Œ๋žซํผ ์‹ค์‹œ๊ฐ„ ๊ฒŒ์ž„ ๊ฐœ๋ฐœ | Photon Engine Cookie Settings Photon uses cookies to identify you as logged-in user, to improve your experience and for marketing. Review a..

    Raycast ์ด์šฉํ•˜์—ฌ ํด๋ฆญํ•œ ์ง€์ ์œผ๋กœ ์ด๋™ํ•˜๊ธฐ

    VR๊ฐœ๋ฐœ์„ ํ•˜๋˜ ๋„์ค‘ ์ปจํŠธ๋กค๋Ÿฌ๋ฅผ ์›€์ง์ด์ง€ ์•Š๊ณ ๋„ ํด๋ฆญํ•œ ์ง€์ ์œผ๋กœ ์ž์—ฐ์Šค๋Ÿฝ๊ฒŒ ์ด๋™ํ•ด์ฃผ๊ธฐ ์œ„ํ•œ ๋ฐœ์ƒ์„ ์—ฐ๊ตฌํ•˜๋‹ค๊ฐ€ ์ง  ์ฝ”๋“œ์˜€์ง€๋งŒ ์‹ค์ œ๋กœ ์‚ฌ์šฉํ•˜์ง€๋Š” ์•Š์•˜๋‹ค. (1) ํ…Œ์ด๋ธ”, ๊ฒŒ์‹œํŒ ๋“ฑ์˜ ์ด๋™ ์œ„์น˜๊ฐ€ ์ถ”๊ฐ€๋  ๊ฒฝ์šฐ๋ฅผ ์ƒ๊ฐํ•˜์—ฌ ๋ฐฐ์—ด๋กœ ๋งŒ๋“ค์–ด์ฃผ๋ฉด ํ™•์žฅ์„ฑ ์ธก๋ฉด์—์„œ ๋”์šฑ ์ข‹์„ ๊ฒƒ ๊ฐ™๋‹ค. (2) ์—…๋ฐ์ดํŠธ๋ฌธ ์•ˆ์˜ if๋ฌธ ์•ˆ์— ์žˆ๋Š” ๋กœ์ง์„ ๋‹ค๋ฅธ ํ•จ์ˆ˜๋กœ ๋ถ„๋ฆฌ(๋…๋ฆฝ)์‹œํ‚ค๋Š” ๊ฒƒ์ด ์žฅ๊ธฐ์ ์ธ ์œ ์ง€๋ณด์ˆ˜์— ๋”์šฑ ์ข‹์„ ๊ฒƒ ๊ฐ™๋‹ค. using System.Collections; using System.Collections.Generic; using UnityEngine; public class tempPlayer : MonoBehaviour { public GameObject head;//ํ”Œ๋ ˆ์ด์–ด public GameObject tablePos..

    ์ด๋ฒคํŠธ

    ์ด๋ฒคํŠธ๋Š” ํ”Œ๋ ˆ์ด์–ด๊ฐ€ '์˜ˆ์ƒ๋œ ์•Œ๋ฆผ'์œผ๋กœ ์ธ์ง€ํ•œ๋‹ค. ์ฑ…์ƒ์— ํŠน์ •์ธ ์ „์šฉ ์งํ†ต์ „ํ™”๊ฐ€ ๋†“์—ฌ์žˆ์„ ๋•Œ ๋ฒจ์ด ์šธ๋ฆฌ๋ฉด ๋ฐ›๊ธฐ๋„ ์ „์— ํŠน์ •์ธ์ด ์ „ํ™”ํ–ˆ๋‹ค๋Š” ๊ฑธ ์•Œ ์ˆ˜ ์žˆ๊ณ  ํŠน์ •์ธ์—๊ฒŒ ๋ฌด์–ธ๊ฐ€๊ฐ€ ๋ฐœ์ƒํ–ˆ์Œ์„ ์ง์ž‘ํ•  ์ˆ˜ ์žˆ๋‹ค. ์ด๋ฒคํŠธ๋„ ์ด์™€ ์œ ์‚ฌํ•œ ์›๋ฆฌ๋กœ ๋™์ž‘ํ•œ๋‹ค. ์ด๋ฒคํŠธ ๋ฐœ์ƒ์— ๋Œ€ํ•ด ์ค€๋น„๋ฅผ ๋Š˜ ํ•˜๊ณ  ์žˆ๊ณ  ์ด๋ฒคํŠธ๊ฐ€ ๋ฐœ์ƒํ•˜๋ฉด ๊ทธ์— ๋”ฐ๋ผ ์˜ˆ์ •๋œ ๋™์ž‘์„ ์ˆ˜ํ–‰ํ•œ๋‹ค. ๋˜ํ•œ ์ด๋ฒคํŠธ์™€ ํ•จ๊ป˜ ๊ด€๋ จ ์ •๋ณด๋ฅผ ์ „๋‹ฌํ•ด ์–ด๋–ค ์ƒํ™ฉ์ด ๋ฐœ์ƒํ–ˆ๋Š”์ง€๋ฅผ ์•Œ๋ ค์ค„ ์ˆ˜๋„ ์žˆ๋‹ค. using System.Collections; using System.Collections.Generic; using UnityEngine; public class Eventsc : MonoBehaviour { //์ด๋ฒคํŠธ๋Š” ์œ„์ž„์„ ์‚ฌ์šฉํ•ด ํ†ต์‹ ์˜ ํ˜•ํƒœ์™€ ์ด๋ฒคํŠธ๊ฐ€ ๋ฐœ์ƒํ–ˆ์„ ๋•Œ ์ „๋‹ฌํ•  ์ •๋ณด์˜ ์ข…๋ฅ˜..

    Delegate

    Delegate ์œ„์ž„์ด๋ž€ ์ „์ฒด ์ž‘์—… ์ค‘ ์ผ๋ถ€๋ฅผ ๋ˆ„๊ตฐ๊ฐ€๋ฅผ ๋Œ€์‹ ํ•ด ํšจ์œจ์ ์œผ๋กœ ์ฒ˜๋ฆฌํ•˜๋Š” ํ˜•ํƒœ๋ฅผ ๋งํ•œ๋‹ค. ๋˜ ๋‹ค๋ฅธ ํ˜•ํƒœ์˜ ์œ„์ž„์œผ๋กœ C# ์ œ๋„ˆ๋ฆญ๊ณผ Action ๋˜๋Š” Action๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๋ฐฉ์‹์ด ์žˆ๋‹ค. ์œ„์ž„์„ ์‚ฌ์šฉํ•˜๋Š” ์ฃผ์š”ํ•œ ๋‘ ๊ฐœ์˜ ํŒจํ„ด์€ ์„ค์ •๊ฐ€๋Šฅ๋ฉ”์†Œ๋“œ(Configurable method)ํŒจํ„ด๊ณผ ์œ„์ž„(delegation) ํŒจํ„ด์ด๋‹ค. 1. ์„ค์ • ๊ฐ€๋Šฅ ๋ฉ”์†Œ๋“œ ํŒจํ„ด ์ผ์ด๋‚˜ ํ•จ์ˆ˜์˜ ์ผ๋ถ€๋ฅผ ๋‹ค๋ฅธ ๋ฉ”์†Œ๋“œ๋กœ ์ „๋‹ฌํ•ด ์ž‘์—…์„ ์™„๋ฃŒํ•˜๋Š”๋ฐ ์‚ฌ์šฉํ•˜๋Š” ํŒจํ„ด์ด๋‹ค. ์ด ํŒจํ„ด์€ ๊ณ ์œ ํ•œ ๋ฐฉ์‹์„ ๊ฐ€์ง„ ๊ฐœ๋ณ„ ์ฝ”๋“œ๊ฐ€ ๊ณตํ†ต๋œ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•  ๋•Œ ์‚ฌ์šฉํ•œ๋‹ค. ์˜ˆ๋ฅผ ๋“ค๋ฉด ๊ฑท๊ธฐ, ๋›ฐ๊ธฐ, ํƒ์ƒ‰ ๋“ฑ์ด ์ด์— ํ•ด๋‹นํ•œ๋‹ค. ์ด ๋ชจ๋“  ์ž‘์—…์€ ์บ๋ฆญํ„ฐ์˜ ๊ธฐ๋ณธ ํ–‰์œ„๊ฐ€ ๋  ์ˆ˜ ์žˆ๋‹ค. using System.Collections; using System.Collections.G..

    ์œ ๋‹ˆํ‹ฐ Reflection ์‚ฌ์šฉํ•˜์—ฌ ํƒ€ ํด๋ž˜์Šค๋ฅผ ์ปดํฌ๋„ŒํŠธ๋กœ ๊ฐ€์ ธ์˜ค๊ธฐ, ํƒ€ ํด๋ž˜์Šค ์ธ์Šคํ„ด์Šค์— ์ ‘๊ทผํ•˜๊ธฐ

    Reflection์€ ์‘์šฉ ๊ฐ€๋Šฅํ•œ ๋ถ€๋ถ„์ด ๊ต‰์žฅํžˆ ๋งŽ๋‹ค. ๋งŽ์€ ๋กœ์ง์— ํ™œ์šฉํ•  ์ˆ˜ ์žˆ์„ ๊ฒƒ ๊ฐ™์•„์„œ ๊ธฐ๋Œ€๋œ๋‹ค. using System; using System.Reflection; ์ด๋ ‡๊ฒŒ ๋‘์ค„์„ ์จ์ฃผ์–ด์•ผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค. ํƒ€ ํด๋ž˜์Šค๋ฅผ ์ปดํฌ๋„ŒํŠธ๋กœ ๊ฐ€์ ธ์˜ค๊ธฐ - quantity๋ผ๋Š” ๋ณ€์ˆ˜๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ๋Š” ์†กํŽธ์ด๋ผ๋Š” ํด๋ž˜์Šค๋ฅผ ๋งŒ๋“ค๊ณ  ์•„๋ž˜์™€ ๊ฐ™์ด ์ž‘์„ฑ public class Songpyeon : MonoBehaviour { public int quantity; } using System.Collections; using System.Collections.Generic; using UnityEngine; using System; using System.Reflection; public class Reflection : Mo..