반응형

https://marketplace.visualstudio.com/items?itemName=drewnoakes.SideScroller 

 

SideScroller - Visual Studio Marketplace

Extension for Visual Studio - Scroll horizontally with the mouse wheel when holding the shift key.

marketplace.visualstudio.com


설치하시오.
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();
        }
    }

반응형
반응형

어도비에서 제공하는 사이트

https://www.mixamo.com/#/

 

Mixamo

 

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 과 VisualStudio2019 같이 사용하는데,
어느 순간부터 VisualStudio2019에서 코드 작성시 구문에러 부분에 에러 표시가 안되는경우가 발생되었다.

 

코드 끝에 ; 나 변수이름 잘못된거 등등 에러 표시해야할 부분에 표시가 안된다 (밑줄 표시 , 세로스크롤영역에 빨간점 표시)

 

그리고 컴파일돌려도 오류목록에 뜨지도 않는다.... 개답답

 

검색해보니 

 

Unity 프로젝트에 .vs 폴더가 있는데 이거 삭제하고 다시 비쥬얼스튜디어 켜면 정상적으로 작동된다.

 

 

반응형
반응형

 

아래 사진처럼

언제 부턴가 #region 으로 영역 잡으면 접기 아이콘이 없어서 접기를 할수가 없었다.

 

예전까지만해도 됬는데 왜이럴까.......

 

 

 

 

 

찾아보니 옵션에 해당 기능이 꺼져 있엇다.

 

옵션 > 텍스트 편집기 > C# > 고급 > 설명및 전처리기 영역에대한 개요표시 , 정으로 축소할떄 #regions 축소 를 ON 하고 확인

 

 

 

 

 

 

그럼 아래처럼 다시 등장!!!!!!!!!!
아후 이거찾느라 설정까지 리셋해가면서 햇네...........ㅠㅠ

 

 

 

 

반응형
반응형

 

 

 

- 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);
    }

}

 

 

 

Player.cs
0.00MB
ByteData.cs
0.01MB
ClientSocket.cs
0.00MB
Main.cs
0.00MB
NetSocketManager.cs
0.00MB

 

반응형
반응형

Unity Iap 사용 하여 IOS 인앱 구매를 하려고하는데 

 

IOS 에서 초기화실패로 "NoProductsAvailable" 에러를 받앗다.

 

이리저리 찾다가 NoProductsAvailable 가 발생되는 이유를 찾았다

 

 * NoProductsAvailable 발생시 아래 체크리스트를 확인

  • iTunes Connect 제품 식별자가 Unity IAP에 제공된 제품 식별자와 정확하게 일치해야 합니다.
  • iTunes Connect 애플리케이션에 대해 애플리케이션 내 구매가 활성화되어 있어야 합니다.
  • 해당 상품이 iTunes Connect에서 판매 중이어야 합니다.
  • iTunes Connect 제품을 새로 생성한 경우 구매가 가능하려면 몇 시간이 소요될 수 있습니다.
  • 최신 iTunes Connect 개발자 약관에 동의하고 유효한 계좌 정보를 등록해야 합니다.

 

필자는 맨아래 "최신 iTunes Connect 개발자 약관에 동의하고 유효한 계좌 정보를 등록해야 합니다." 가 되지않아 
NoProductsAvailable 에러가 발생하였다. 

iTunes Connect 에서 계좌정보, 연락처정보, 세금정보 기입하고 나니 초기화가 되었고 인앱상품정보도 잘들어왔다!

 

 

 

*Unity 매뉴얼에서 해당정보 찾을수 있습니다

docs.unity3d.com/kr/current/Manual/UnityIAPiOSMAS.html

반응형

'IOS' 카테고리의 다른 글

[IOS] ipa를 dropbox로 이용해 앱 배포하기  (2) 2020.09.24

+ Recent posts