https://marketplace.visualstudio.com/items?itemName=drewnoakes.SideScroller
설치하시오.
2022 버전도 가능
설치후에 좌측 Shift 누르고 휠 위아래 하면 가로 스크롤됩니답
'기타' 카테고리의 다른 글
무료 3d 모델링,에니메이션 다운할수 있는곳 (0) | 2022.03.27 |
---|
https://marketplace.visualstudio.com/items?itemName=drewnoakes.SideScroller
설치하시오.
2022 버전도 가능
설치후에 좌측 Shift 누르고 휠 위아래 하면 가로 스크롤됩니답
무료 3d 모델링,에니메이션 다운할수 있는곳 (0) | 2022.03.27 |
---|
public static void BundleSoundMoveToAddressableFolder(bool isRefreshWhenEnd)
{
FileInfo curF = null;
try
{
DirectoryInfo dir = new DirectoryInfo("Assets/Editor/FMOD/BundleSound");
FileInfo[] info = dir.GetFiles("*.*");
foreach (FileInfo f in info)
{
curF = f;
int idx = f.Name.IndexOf('.');
string name = f.Name;
string nameWithOutExtention = name.Substring(0, idx);
string[] nameSplit = nameWithOutExtention.Split('_');
int packNumber = 0;
for (int i = 0; i < nameSplit.Length; i++)
{
string nameSplitWithOutExtention = Path.GetFileNameWithoutExtension(nameSplit[i]);
int.TryParse(nameSplitWithOutExtention, out packNumber);
}
bool isMoveToCommon = false;
//팩에 해당한는 리소스
if (packNumber > 0)
{
string packNumberFolderName = string.Format("Pack_{0:D2}", packNumber);
string destPackFolderPath = string.Format(destinationPackFolderPath, packNumber);
if (f.Name.Contains("Character_Pack"))
{
//(임시)Character_Pack이름 적힌 리소스는 Addressable폴더에 Common 폴더로
isMoveToCommon = true;
}
else if (Directory.Exists(destPackFolderPath) == false)
{
//pack폴더 없다면 옮기지않음
continue;
//pack폴더 없다면 Addressable폴더에 Common 폴더로
//isMoveToCommon = true;
}
else if (f.Name.Contains(packNumberFolderName))
{
//팩에 해당하는 파일이면 Addressable폴더의 Pack 폴더로
FileUtil.ReplaceFile($"{sourceFolderPath}/{name}", $"{string.Format(destinationPackFolderPath, packNumber)}/{name}");
}
else // 해당되지 않은 것들은 Addressable폴더에 Common 폴더로
{
isMoveToCommon = true;
}
}
else //팩이아닌 리소스
{
if (soundListBelongToResourcesFolder.Contains(nameWithOutExtention))
{
//Resouces 파일에 해당하는 것은 Resources 폴더로
FileUtil.ReplaceFile($"{sourceFolderPath}/{name}", $"{destinationSoundMasterFolderPath}/{name}");
}
else // 해당되지 않은 것들은 Addressable폴더에 Common 폴더로
isMoveToCommon = true;
}
if (isMoveToCommon)
{
FileUtil.ReplaceFile($"{sourceFolderPath}/{name}", $"{destinationCommonFolderPath}/{name}");
}
}
}
catch(System.Exception e)
{
Debug.LogError($"ex : {curF.Name} / {curF.FullName} / {curF.DirectoryName} ");
}
if (isRefreshWhenEnd)
{
AssetDatabase.SaveAssets();
AssetDatabase.Refresh();
}
}
[Unity] 오브젝트반투명 처리하기 (0) | 2020.04.09 |
---|---|
[Unity] LayoutUtility.GetPreferredWidth 사용시 주의! (1) | 2020.02.20 |
[Unity] 시야내에 있는지 확인 (0) | 2020.02.14 |
[Unity] Physics.SyncRigidbodyTransfom 부하시 해결 (0) | 2019.12.06 |
[Unity] 3D 공 계속튕기게 하기 (0) | 2019.10.17 |
어도비에서 제공하는 사이트
https://www.mixamo.com/#/
회원가입해야하고 회원가입후
모델링및 에니메이션 선택해서 다운로드가능,
모델링선택후 선택한 모델링상태에서 맞는 에니메이션 찾으면 리깅가능한 에니메이션 가져와서 다운로드해가면됨.
우선 무료라 좋음
VisualStudio 가로 스크롤 가능한 방법 (0) | 2022.09.28 |
---|
[MenuItem("GameObject/FieldObject/CopyComponet (Ctrl+Alt+Shift+C) %#&c")]
static void CopyComponent()
{
_copyObject = Selection.activeObject as GameObject;
}
[MenuItem("GameObject/FieldObject/PasteComponet (Ctrl+Alt+Shift+V) %#&v")]
static void PasteComponet()
{
if (_copyObject == null)
{
Debug.LogError("복사된 오브젝트가 없습니다.");
return;
}
Component[] componentList = _copyObject.GetComponents<Component>();
GameObject obj = Selection.activeObject as GameObject;
obj.name = _copyObject.name;
for (int i = 0, count = componentList.Length; i < count; ++i)
{
Component targetObjectComponent = obj.GetComponent(componentList[i].GetType());
UnityEditorInternal.ComponentUtility.CopyComponent(componentList[i]);
if (targetObjectComponent != null)
{
UnityEditorInternal.ComponentUtility.PasteComponentValues(targetObjectComponent);
}
else
{
UnityEditorInternal.ComponentUtility.PasteComponentAsNew(obj);
}
}
}
[Unity] 프리팹 에디터 환경의 Scene 변경하기 (Prefab Editing Environments) (0) | 2020.04.14 |
---|---|
[Unity] Rendertexure로 UI에 캐릭터 보이게하기 (0) | 2019.11.27 |
[Unity] CustomEditor 인스펙터에 버튼만들기 (0) | 2019.05.10 |
[Unity] Android 모바일로 Unity Profiler 사용하기 (0) | 2019.02.08 |
[Unity] Camera 생성시 기본적으로 붙어있는 GUI Layer / Flare Layer / Audio Listener (0) | 2018.10.31 |
Unity 과 VisualStudio2019 같이 사용하는데,
어느 순간부터 VisualStudio2019에서 코드 작성시 구문에러 부분에 에러 표시가 안되는경우가 발생되었다.
코드 끝에 ; 나 변수이름 잘못된거 등등 에러 표시해야할 부분에 표시가 안된다 (밑줄 표시 , 세로스크롤영역에 빨간점 표시)
그리고 컴파일돌려도 오류목록에 뜨지도 않는다.... 개답답
검색해보니
Unity 프로젝트에 .vs 폴더가 있는데 이거 삭제하고 다시 비쥬얼스튜디어 켜면 정상적으로 작동된다.
Visual Studio 2019 C# 에서 #region 에 접기 아이콘 안뜰때 해결 (0) | 2021.10.15 |
---|---|
[C#] 나머지계산기 (0) | 2020.02.25 |
[C#]문자열중 숫자만 가져오기 (0) | 2019.11.28 |
C# 문자열 계산식(수식) (0) | 2019.06.07 |
[C#] string.format 표현형식 활용하기 (0) | 2019.04.10 |
아래 사진처럼
언제 부턴가 #region 으로 영역 잡으면 접기 아이콘이 없어서 접기를 할수가 없었다.
예전까지만해도 됬는데 왜이럴까.......
찾아보니 옵션에 해당 기능이 꺼져 있엇다.
옵션 > 텍스트 편집기 > C# > 고급 > 설명및 전처리기 영역에대한 개요표시 , 정으로 축소할떄 #regions 축소 를 ON 하고 확인
그럼 아래처럼 다시 등장!!!!!!!!!!
아후 이거찾느라 설정까지 리셋해가면서 햇네...........ㅠㅠ
VisualStudio2019 c# Intelligece 가 구문에러 표시 발생안되는 경우 (1) | 2021.11.19 |
---|---|
[C#] 나머지계산기 (0) | 2020.02.25 |
[C#]문자열중 숫자만 가져오기 (0) | 2019.11.28 |
C# 문자열 계산식(수식) (0) | 2019.06.07 |
[C#] string.format 표현형식 활용하기 (0) | 2019.04.10 |
- Client Socket 코드
using System;
using System.Collections;
using System.Collections.Generic;
using System.Net;
using System.Net.Sockets;
using UnityEngine;
public enum NetKind { Connect, Disconnect, Move, }
public delegate void DelSocketReceive(byte[] packet);
public class ClientSocket
{
private Socket NetSocket;
EndPoint severEndPoint;
private DelSocketReceive CallbackReceiveData;
public ClientSocket(DelSocketReceive _CallbackReceiveData)
{
CallbackReceiveData = _CallbackReceiveData;
}
public void ConnectSocket()
{
NetSocket = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp);
severEndPoint = new IPEndPoint(IPAddress.Parse("127.0.0.1"), 1000);
byte[] msg = new byte[4];
NetKind netknd = NetKind.Connect;
msg[0] = (byte)netknd;
NetSocket.SendTo(msg, severEndPoint);
byte[] buffer = new byte[1024];
NetSocket.BeginReceiveFrom(buffer, 0, buffer.Length, SocketFlags.None, ref severEndPoint, CallbackRecieveFrom, buffer);
}
private void CallbackRecieveFrom(IAsyncResult result)
{
byte[] receiveData = new byte[1024];
receiveData = (byte[])result.AsyncState;
if (CallbackReceiveData != null)
CallbackReceiveData(receiveData);
byte[] byteData = new byte[1024];
NetSocket.BeginReceiveFrom(byteData, 0, byteData.Length, SocketFlags.None, ref severEndPoint, CallbackRecieveFrom, byteData);
}
public void SendPacketData(byte[] data)
{
NetSocket.SendTo(data, severEndPoint);
}
}
- SocketManager 코드
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class NetSocketManager : MonoBehaviour
{
#region sigleton
private static NetSocketManager _instance;
public static NetSocketManager Getsingleton
{
get
{
if (_instance == null)
{
_instance = FindObjectOfType(typeof(NetSocketManager)) as NetSocketManager;
if (_instance == null)
{
_instance = new GameObject("NetSocketManager").AddComponent<NetSocketManager>();
DontDestroyOnLoad(_instance.gameObject);
}
}
return _instance;
}
}
#endregion
private ClientSocket NetSocket;
public void Init()
{
NetSocket = new ClientSocket(RecievedPacketData);
NetSocket.ConnectSocket();
}
Queue<ByteData> Que_Packet = new Queue<ByteData>();
void RecievedPacketData(byte[] packet)
{
ByteData data = new ByteData(packet);
Que_Packet.Enqueue(data);
}
void ProcessReceivedPacket()
{
if(Que_Packet.Count > 0)
{
ByteData receivedData = Que_Packet.Dequeue();
NetKind knd = (NetKind)receivedData.Getbyte();
Debug.Log("ReceivedPacket : " + knd);
switch (knd)
{
case NetKind.Connect:
break;
case NetKind.Disconnect:
break;
case NetKind.Move:
Main.Getsingleton.NetReceived_MovePosPlayer(receivedData);
break;
}
}
}
// Update is called once per frame
void Update()
{
ProcessReceivedPacket();
}
public void SendData(ByteData packet)
{
if (NetSocket == null) return;
NetSocket.SendPacketData(packet.data);
}
public void Disconnect()
{
ByteData data = new ByteData(2, 0);
data.InPutByte((byte)NetKind.Disconnect);
SendData(data);
}
}
- Player Behaviour 코드
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public enum PlayerKind { Player,Network, }
public class Player : MonoBehaviour
{
private int DirectionX;
private int DirectionZ;
private float speed = 5f;
private Transform Tr;
public PlayerKind PlayerKnd = PlayerKind.Player;
public uint UserId;
void Start()
{
UserId = (uint)Random.Range(1, 50000);
}
public void InitPlayer(PlayerKind pknd)
{
Tr = this.transform;
PlayerKnd = pknd;
if(PlayerKnd == PlayerKind.Player)
{
CoSendPosPlayer = StartCoroutine(Co_SendPosPlayer());
}
}
// Update is called once per frame
void Update()
{
InputProcess();
}
int count = 0;
void InputProcess()
{
if (PlayerKnd == PlayerKind.Network) return;
if (Input.GetKey(KeyCode.A))
{
DirectionX = -1;
}
else if (Input.GetKeyUp(KeyCode.A))
{
DirectionX = 0;
}
if (Input.GetKey(KeyCode.D))
{
DirectionX = 1;
}
else if (Input.GetKeyUp(KeyCode.D))
{
DirectionX = 0;
}
if (Input.GetKey(KeyCode.S))
{
DirectionZ = -1;
}
else if (Input.GetKeyUp(KeyCode.S))
{
DirectionZ = 0;
}
if (Input.GetKey(KeyCode.W))
{
DirectionZ = 1;
}
else if (Input.GetKeyUp(KeyCode.W))
{
DirectionZ = 0;
}
}
private void FixedUpdate()
{
MovePlayerProcess();
NetworkMovePlayerProcess();
}
void MovePlayerProcess()
{
if (PlayerKnd == PlayerKind.Network) return;
Tr.Translate(new Vector3(DirectionX, 0f, DirectionZ) * speed * Time.deltaTime);
}
Coroutine CoSendPosPlayer = null;
IEnumerator Co_SendPosPlayer()
{
yield return new WaitForSeconds(0.1f);
SendPosPlayerData();
CoSendPosPlayer = StartCoroutine(Co_SendPosPlayer());
}
void SendPosPlayerData()
{
ByteData sendData = new ByteData(64,0);
sendData.InPutByte((byte)NetKind.Move);
sendData.InPutByte(UserId);
//현재위치
sendData.InPutByte(Tr.position);
//가는방향
sendData.InPutByte(DirectionX);
sendData.InPutByte(DirectionZ);
//속도?
NetSocketManager.Getsingleton.SendData(sendData);
}
Vector3 NetPlayerPos = new Vector3();
Vector3 NetPlayerDir = new Vector3();
public void ReceivedMovePlayerData(ByteData data)
{
NetPlayerPos = data.GetVector3();
int dirX = data.Getint();
int dirZ = data.Getint();
NetPlayerDir = new Vector3(dirX, 0, dirZ);
Debug.Log("NetPlayerDir : " + NetPlayerDir + " / " +NetPlayerDir.magnitude);
}
public void ForceNetPlayerPos(ByteData data)
{
NetPlayerPos = data.GetVector3();
int dirX = data.Getint();
int dirZ = data.Getint();
NetPlayerDir = new Vector3(dirX, 0, dirZ);
Tr.position = NetPlayerPos;
}
void NetworkMovePlayerProcess()
{
if (PlayerKnd == PlayerKind.Player) return;
if (NetPlayerDir.magnitude > 0)
Tr.position = Tr.position + (NetPlayerDir * speed * Time.deltaTime);
else
Tr.position = Vector3.Lerp(Tr.position, NetPlayerPos, Time.deltaTime * 10f);
}
}
Unity Iap 사용 하여 IOS 인앱 구매를 하려고하는데
IOS 에서 초기화실패로 "NoProductsAvailable" 에러를 받앗다.
이리저리 찾다가 NoProductsAvailable 가 발생되는 이유를 찾았다
* NoProductsAvailable 발생시 아래 체크리스트를 확인
필자는 맨아래 "최신 iTunes Connect 개발자 약관에 동의하고 유효한 계좌 정보를 등록해야 합니다." 가 되지않아
NoProductsAvailable 에러가 발생하였다.
iTunes Connect 에서 계좌정보, 연락처정보, 세금정보 기입하고 나니 초기화가 되었고 인앱상품정보도 잘들어왔다!
*Unity 매뉴얼에서 해당정보 찾을수 있습니다
[IOS] ipa를 dropbox로 이용해 앱 배포하기 (2) | 2020.09.24 |
---|