전체보기
- c++ 기초 알고리즘 강의 2014.12.05
- LPSTR, LPCSTR, LPTSTR, LPCTSTR 2014.12.05
- 좋은 튜토리얼 사이트 2014.12.02
- 채팅 유아이 엔지유아이 2014.11.27
- 터치 관련 2014.11.26
- 잼과 이동관련 2014.11.26
- Hexa 2014.11.25
- 유니티와 c++ 문자 체계 2014.11.19
- 3인칭 시점 2014.11.13
- 채팅 2014.11.13
c++ 기초 알고리즘 강의
LPSTR, LPCSTR, LPTSTR, LPCTSTR
LPSTR: char*와 같이 1바이트를 가리키는 포인터이다.
LPCSTR: const char*와 같음
LPTSTR : UNICODE(Wide Character) types.
-16 bit UNICODE character(WCHAR)를 가리키는 포인터
-유니코드를 지원하기 때문에 2바이트를 가리킨다.
LPCTSTR: const WCHAR* 와 같음.
'Computer Language > 데이터 통신' 카테고리의 다른 글
아이템 설계 (0) | 2014.12.24 |
---|---|
채팅 (0) | 2014.11.13 |
좋은 튜토리얼 사이트
채팅 유아이 엔지유아이
UIInput.cs를 수정하여 임시적으로 해결하였습니다.
나중에는 정식으로 수정되겠죠...
if (string.IsNullOrEmpty(ime) && !string.IsNullOrEmpty(Input.inputString))
=> if (!string.IsNullOrEmpty(Input.inputString))
여길 참고하세요.
http://www.tasharen.com/forum/index.php?topic=8249.msg38990#msg38990
터치 관련
잼과 이동관련
using UnityEngine;
using System.Collections;
using System.Collections.Generic;
public class Gem : MonoBehaviour {
public GameObject sphere;
public GameObject selector;
public List<Gem> Near = new List<Gem>();
public string[] gemMaterials = {"Red", "Blue", "Green", "Orange", "Yellow", "Black", "Purple"} ;
public string color = "";
public bool isSelected = false;
public bool isMatched = false;
public int XCoord{
get
{
return Mathf.RoundToInt(transform.localPosition.x);
}
}
public int YCoord{
get
{
return Mathf.RoundToInt(transform.localPosition.y);
}
}
// Use this for initialization
void Start () {
CreateGem();
}
// Update is called once per frame
void Update () {
}
public void ToggleSeletor(){
isSelected = !isSelected;
selector.SetActive(isSelected);
}
public void CreateGem(){
color = gemMaterials[Random.Range(0, gemMaterials.Length - 1)];
print (gemMaterials.Length);
Material m= Resources.Load("Materials/"+color) as Material;
sphere.renderer.material = m;
print (color);
print (m);
print (sphere.renderer.material);
isMatched = false;
}
public void AddNear(Gem g)
{
if(!Near.Contains(g))
Near.Add(g);
}
public bool IsNearWith(Gem g)
{
if(Near.Contains(g))
{
return true;
}
return false;
}
public void RemoveNear(Gem g)
{
Near.Remove(g);
}
void OnMouseDown()
{
if(!GameObject.Find("Board").GetComponent<Board>().isSwapping)
{
ToggleSeletor();
GameObject.Find("Board").GetComponent<Board>().SwapGem(this);
}
}
}
////////////////////////////////////////////////////////////////////////////////////////////
using UnityEngine;
using System.Collections;
using System.Collections.Generic;
public class Board : MonoBehaviour {
public List<Gem> gems = new List<Gem>();
public int GridWidth;
public int GridHeight;
public GameObject gemPrefabs;
public Gem lastGem;
public Vector3 gem1Start,gem1End,gem2Start,gem2End;
public bool isSwapping = false;
public Gem gem1, gem2;
public float startTimer;
public float swapRate = 3f;
public int AmountToMatch = 3;
public bool isMatched = false;
// Use this for initialization
void Start () {
for(int y = 0; y < GridHeight; y++)
{
for(int x = 0; x < GridWidth; x++)
{
GameObject g = Instantiate(gemPrefabs,new Vector3(x, y, 0), Quaternion.identity) as GameObject;
g.transform.parent = gameObject.transform;
gems.Add(g.GetComponent<Gem>());
}
}
gameObject.transform.position = new Vector3(-2.5f, -2f, 0);
}
public void TogglesPhysics(bool isOn)
{
for(int i = 0; i <gems.Count; i++)
{
gems[i].rigidbody.isKinematic = isOn;
}
}
public void SwapGem(Gem currentGem){
if(lastGem == null){
lastGem = currentGem;
}
else if(lastGem == currentGem){
lastGem = null;
}
else{
if(lastGem.IsNearWith(currentGem))
{
gem1Start = lastGem.transform.position;
gem1End = currentGem.transform.position;
gem2Start = currentGem.transform.position;
gem2End = lastGem.transform.position;
startTimer = Time.time;
TogglesPhysics(true);
gem1 = lastGem;
gem2 = currentGem;
isSwapping = true;
}
else
{
lastGem.ToggleSeletor();
lastGem = currentGem;
}
}
}
// Update is called once per frame
void Update () {
if(isMatched)
{
for(int i = 0; i < gems.Count; i++)
{
if(gems[i].isMatched)
{
gems[i].CreateGem();
gems[i].transform.position= new Vector3(gems[i].transform.position.x, gems[i].transform.position.y + 6, gems[i].transform.position.z);
}
}
}
isMatched = false;
if(isSwapping){
MoveGem(gem1, gem1End, gem1Start);
MoveNegGem(gem2, gem2End, gem2Start);
if(Vector3.Distance(gem1.transform.position, gem1End) <= .1f || Vector3.Distance(gem2.transform.position, gem2End) < .1f){
gem1.transform.position = gem1End;
gem2.transform.position = gem2End;
gem1.ToggleSeletor();
gem2.ToggleSeletor();
lastGem = null;
isSwapping = false;
TogglesPhysics(true);
CheckMatch();
}
}
}
public void CheckMatch(){
List<Gem> gem1List = new List<Gem>();
List<Gem> gem2List = new List<Gem>();
ConstructMatchList(gem1.color, gem1, gem1.XCoord, gem1.YCoord, ref gem1List);
FixedMatchList(gem1, gem1List);
ConstructMatchList(gem2.color, gem2, gem1.XCoord, gem2.YCoord, ref gem2List);
FixedMatchList(gem2, gem2List);
print("gem1" + gem1List.Count);
}
public void ConstructMatchList(string color, Gem gem, int XCoord, int YCoord, ref List<Gem> MatchList){
if(gem == null)
{
return;
}
else if(gem.color != color)
{
return;
}
else if(MatchList.Contains(gem))
{
return;
}
else{
MatchList.Add(gem);
if(XCoord == gem.XCoord || YCoord == gem.YCoord)
{
foreach(Gem g in gem.Near)
{
ConstructMatchList(color, g, XCoord, YCoord, ref MatchList);
}
}
}
}
public void FixedMatchList(Gem gem, List<Gem> ListToFix){
List<Gem> rows = new List<Gem>();
List<Gem> collumns = new List<Gem>();
for(int i = 0; i < ListToFix.Count; i++)
{
if(gem.XCoord == ListToFix[i].XCoord)
{
rows.Add(ListToFix[i]);
}
if(gem.YCoord == ListToFix[i].YCoord)
{
collumns.Add(ListToFix[i]);
}
}
if(rows.Count >= AmountToMatch)
{
isMatched = false;
for(int i = 0; i < rows.Count; i++){
rows[i].isMatched = true;
}
}
if(collumns.Count >= AmountToMatch)
{
isMatched = true;
for(int i = 0; i < collumns.Count; i++){
collumns[i].isMatched = true;
}
}
}
public void MoveGem(Gem gemToMove, Vector3 toPos, Vector3 fromPos)
{
Vector3 center = (fromPos + toPos) * .5f;
center -= new Vector3(0.0f, .1f);
Vector3 riseCenter = fromPos - center;
Vector3 setCenter = toPos - center;
float fracComplete = (Time.time - startTimer)/swapRate;
gemToMove.transform.position = Vector3.Slerp(riseCenter, setCenter, fracComplete);
gemToMove.transform.position += center;
}
public void MoveNegGem(Gem gemToMove, Vector3 toPos, Vector3 fromPos){
}
}
'Computer Language > 유니티' 카테고리의 다른 글
Hexa (0) | 2014.11.25 |
---|---|
3인칭 시점 (0) | 2014.11.13 |
사인과 코사인 응용 방안 (0) | 2014.11.12 |
Dialog() 다이아로그 (0) | 2014.11.10 |
더미와 다이어로그 (0) | 2014.11.10 |
Hexa
using UnityEngine;
using System.Collections;
public class Point{
int X;
int Y;
int Z;
public Point(int x, int y, int z){
X = x;
Y = y;
Z = z;
}
public override string ToString ()
{
return "[ "+ X + " " + Y + " " + Z + "] ";
}
}
public class Hexa : MonoBehaviour {
Point MapPos;
// Use this for initialization
void Start () {
}
// Update is called once per frame
void Update () {
}
public void SetMapPos(Point pos){
MapPos = pos;
}
public void SetMapPos(int x, int y, int z){
MapPos = new Point(x, y, z);
}
public void OnMouseDown(){
PlayerManager pm = PlayerManager.GetInstance();
Debug.Log("A" + MapPos + "OnMouseDown");
pm.MovePlayer(pm.players[pm.CurTurnIndex].CurHexa , this);
}
}
using UnityEngine;
using System.Collections;
public class MapManager : MonoBehaviour {
public static MapManager inst = null;
public GameObject Hexa_prefab;
public float HexW;
public float HexH;
public int MapSizeX;
public int MapSizeY;
public int MapSizeZ;
Hexa[][][] Map;
void Awake(){
inst = this;
SetSizeHexa();
}
public static MapManager GetInstance(){
print ("map manager" + inst);
return inst;
}
// Use this for initialization
void Start () {
}
// Update is called once per frame
void Update () {
}
public void SetSizeHexa(){
HexW = Hexa_prefab.transform.renderer.bounds.size.x;
HexW = Hexa_prefab.transform.renderer.bounds.size.z;
}
public Vector3 GetWorldPos(int x, int y, int z){
float X = 0;
float Z = 0;
X = x * HexW + ( z * HexW * 0.5f);
Z = ( -z ) * HexH * 0.75f;
return new Vector3(X, 0, Z);
}
public void CreateMap(){
Map = new Hexa[MapSizeX * 2 + 1][][];
for(int x = -MapSizeX; x <= MapSizeX; x++){
Map[x + MapSizeX] = new Hexa[MapSizeY * 2 + 1][];
for(int y = -MapSizeY; y <= MapSizeY; y++){
Map[x + MapSizeX][y + MapSizeY] = new Hexa[MapSizeZ * 2 + 1];
for(int z = -MapSizeZ; z <= MapSizeZ; z++){
if(x + y + z == 0){
Map[x + MapSizeX][y + MapSizeY][z + MapSizeZ] = ((GameObject)Instantiate(Hexa_prefab)).GetComponent<Hexa>();
Vector3 pos = GetWorldPos(x, y, z);
//print (pos);
Map[x + MapSizeX][y + MapSizeY][z + MapSizeZ].transform.position = pos;
Map[x + MapSizeX][y + MapSizeY][z + MapSizeZ].SetMapPos(x, y, z);
}
}
}
}
}
public Hexa GetPlayerHexaPosition(int x, int y, int z){
return Map[x + MapSizeX][y + MapSizeY][z + MapSizeZ];
}
}
using UnityEngine;
using System.Collections;
public class PlayerBase : MonoBehaviour {
public Hexa CurHexa;
// Use this for initialization
void Start () {
}
// Update is called once per frame
void Update () {
}
}
'Computer Language > 유니티' 카테고리의 다른 글
잼과 이동관련 (0) | 2014.11.26 |
---|---|
3인칭 시점 (0) | 2014.11.13 |
사인과 코사인 응용 방안 (0) | 2014.11.12 |
Dialog() 다이아로그 (0) | 2014.11.10 |
더미와 다이어로그 (0) | 2014.11.10 |
유니티와 c++ 문자 체계
유니티 DB UTF8
Unity3d Ansi
게임서버 Ansi => Unicode => UTF8
3인칭 시점
//
//
// 2013/06/07 N.Kobyasahi
//
using UnityEngine;
using System.Collections;
public class ThirdPersonCamera : MonoBehaviour
{
public float smooth = 3f;
public Transform standardPos; // the usual position for the camera, specified by a transform in the game
Transform frontPos; // Front Camera locater
Transform jumpPos; // Jump Camera locater
bool bQuickSwitch = false; //Change Camera Position Quickly
void Start()
{
//standardPos = GameObject.Find ("CamPos").transform;
if(GameObject.Find ("FrontPos"))
frontPos = GameObject.Find ("FrontPos").transform;
if(GameObject.Find ("JumpPos"))
jumpPos = GameObject.Find ("JumpPos").transform;
//繧ォ繝。繝ゥ繧偵せ繧ソ繝シ繝医☆繧
transform.position = standardPos.position;
transform.forward = standardPos.forward;
}
void FixedUpdate ()
{
if(Input.GetButton("Fire1")) // left Ctlr
{
// Change Front Camera
setCameraPositionFrontView();
}
else if(Input.GetButton("Fire2")) //Alt
{
// Change Jump Camera
setCameraPositionJumpView();
}
else
{
// return the camera to standard position and direction
setCameraPositionNormalView();
}
}
void setCameraPositionNormalView()
{
if(bQuickSwitch == false){
// the camera to standard position and direction
transform.position = Vector3.Lerp(transform.position, standardPos.position, Time.fixedDeltaTime * smooth);
transform.forward = Vector3.Lerp(transform.forward, standardPos.forward, Time.fixedDeltaTime * smooth);
}
else{
// the camera to standard position and direction / Quick Change
transform.position = standardPos.position;
transform.forward = standardPos.forward;
bQuickSwitch = false;
}
}
void setCameraPositionFrontView()
{
// Change Front Camera
bQuickSwitch = true;
transform.position = frontPos.position;
transform.forward = frontPos.forward;
}
void setCameraPositionJumpView()
{
// Change Jump Camera
bQuickSwitch = false;
transform.position = Vector3.Lerp(transform.position, jumpPos.position, Time.fixedDeltaTime * smooth);
transform.forward = Vector3.Lerp(transform.forward, jumpPos.forward, Time.fixedDeltaTime * smooth);
}
}
'Computer Language > 유니티' 카테고리의 다른 글
잼과 이동관련 (0) | 2014.11.26 |
---|---|
Hexa (0) | 2014.11.25 |
사인과 코사인 응용 방안 (0) | 2014.11.12 |
Dialog() 다이아로그 (0) | 2014.11.10 |
더미와 다이어로그 (0) | 2014.11.10 |
채팅
서버
1. 소켓 생성
2. Connect()
3. worker Thread
4. Main Thread
채팅 송신부 while Scanf_c
5. beginThreadEx(workerThread)
클라 로그인
게임
채팅
'Computer Language > 데이터 통신' 카테고리의 다른 글
아이템 설계 (0) | 2014.12.24 |
---|---|
LPSTR, LPCSTR, LPTSTR, LPCTSTR (0) | 2014.12.05 |