전체 글 (93)
-
2021.01.07 [visual studio error] '마이그레이션 필요' 프로젝트를 로드하고 다시 시작하세요
unity로 작업 중에 모든 스트립트가 열리지 않는 상황이 발생했다. 전부 동일하게error code : 0x0000139F라고 뜨면서 모든 스크립트가 오픈되지 않는 현상 http://koolwin1.tistory.com/267 해당 링크 내용을 보고 해결됐다.. 정리는 추후에!
-
2020.10.20 c# Color 와 Color32 색상 범위 차이
https://chopchops.tistory.com/m/15https://forum.unity.com/threads/what-is-the-difference-between-color-and-color32.824196/ color 는 0~1 값으로 표현한다 > 부동소수그래서 1보다 큰 값을 넣으면 하얀색으로 나옴 color32 는 8비트 > 0~255 값으로 표현한다 > 상수
-
2020.10.08 [C#] const, readonly 차이
용도 차이 : 초기화 시점을 바꾸고 싶을 때 필요한 걸 사용 const : 상수. 생성 시 바로 초기화해야한다. 이후에 변경 불가 readonly : 상수처럼 사용. 생성자에서 초기화 가능하다. 생성자 외의 함수에서는 변경 불가
-
2019.01.07 [Unity] 회전 정리
Vector3.Lerp(from 벡터 , to 벡터 , 시간 t)transform.position = Vector3.Lerp(start.position, end.position, Time.time); 보통 이런식으로 많이 사용. start지점에서 end지점으로 이동한다. Quaternion : 회전을 위한 함수 라고 간단하게 생각하자. Quaternion.identity : 초기화 시 사용. Quaternion.LookRotation(벡터값) : 쉽게 얘기해서 target을 기준으로 회전한다. similar to the LookAt() method, the object is always watching objects. public class LookAtScript : MonoBehaviour {..
-
2018.10.25 [퍼온 자료] Lua와 C 바인딩
스택 이해하기C와 lua간 연동에 중요한 요소는 가상 스택이다.lua의 스택 액세스 방법은 절대/상대 접근이 있다. 양수 값 - 절대 접근음수 값 - 상대 접근 절대 접근 방법은 스택 base에서 시작해 양수 1,2,3으로 순서를 부여하는 방법이다.상대 접근 방법은 스택 top에서 시작해 음수 -1,-2,-3으로 순서를 부여하는 방법이다. *스택의 마지막 값을 접근 시 -1, 바닥부터 접근 시 1 lua_checkstack : 스택 사이즈를 확인하기 위한 lua C API LUA_MINSTACK 20 으로 정의 허용 가능한 스택 인덱스 범위는1(index
[visual studio error] '마이그레이션 필요' 프로젝트를 로드하고 다시 시작하세요2021. 1. 7. 20:48
unity로 작업 중에 모든 스트립트가 열리지 않는 상황이 발생했다.
전부 동일하게
error code : 0x0000139F
라고 뜨면서 모든 스크립트가 오픈되지 않는 현상
http://koolwin1.tistory.com/267
해당 링크 내용을 보고 해결됐다.. 정리는 추후에!
'[에러정리]' 카테고리의 다른 글
c# Color 와 Color32 색상 범위 차이2020. 10. 20. 15:50
https://chopchops.tistory.com/m/15
https://forum.unity.com/threads/what-is-the-difference-between-color-and-color32.824196/
color 는 0~1 값으로 표현한다 > 부동소수
그래서 1보다 큰 값을 넣으면 하얀색으로 나옴
color32 는 8비트 > 0~255 값으로 표현한다 > 상수
'Language > C#' 카테고리의 다른 글
C# 데이터 구조와 Object 타입 (0) | 2024.09.21 |
---|---|
구조체 메모리 할당 위치, 범위 고정시키기 (1) | 2021.05.11 |
[C#] const, readonly 차이 (0) | 2020.10.08 |
List<T>.RemoveAll(Predicate<T>) 함수 개념 (0) | 2017.12.14 |
[C#] const, readonly 차이2020. 10. 8. 11:03
용도 차이 : 초기화 시점을 바꾸고 싶을 때 필요한 걸 사용
const : 상수. 생성 시 바로 초기화해야한다. 이후에 변경 불가
readonly : 상수처럼 사용. 생성자에서 초기화 가능하다. 생성자 외의 함수에서는 변경 불가
'Language > C#' 카테고리의 다른 글
C# 데이터 구조와 Object 타입 (0) | 2024.09.21 |
---|---|
구조체 메모리 할당 위치, 범위 고정시키기 (1) | 2021.05.11 |
c# Color 와 Color32 색상 범위 차이 (0) | 2020.10.20 |
List<T>.RemoveAll(Predicate<T>) 함수 개념 (0) | 2017.12.14 |
[Unity] 회전 정리2019. 1. 7. 16:26
Vector3.Lerp(from 벡터 , to 벡터 , 시간 t)
transform.position = Vector3.Lerp(start.position, end.position, Time.time); 보통 이런식으로 많이 사용.
start지점에서 end지점으로 이동한다.
Quaternion : 회전을 위한 함수 라고 간단하게 생각하자.
Quaternion.identity : 초기화 시 사용.
Quaternion.LookRotation(벡터값) : 쉽게 얘기해서 target을 기준으로 회전한다. similar to the LookAt() method, the object is always watching objects.
public class LookAtScript : MonoBehaviour
{
public Transform target;
void Update ()
{
Vector3 relativePos = target.position - transform.position;
transform.rotation = Quaternion.LookRotation(relativePos);
}
}
Quaternion.Euler(x,y,z) : 각 축을 기준으로 기울이기.
public float tilt;//기울기
float HorizontalMove = Input.GetAxis("Horizontal");
HorizontalMove = HorizontalMove * Speed * Time.deltaTime;
GetComponent<Rigidbody>().rotation = Quaternion.Euler(0.0f, 0.0f, HorizontalMove*-tilt);
위의 코드는 리지드바디의 회전(rotation)을 z축을 기준으로 하는 것.
Quaternion.FromToRotation(from벡터, to벡터,회전속도) :
from벡터가 to벡터 기준으로 확 기울어 버린다.
Quaternion.Slerp(쿼터니언A, 쿼터니언B,t) : A에서 B로 회전 회전속도는 t
위에서 말했던 LookRotation과 효과는 같다. 오브젝트가 회전하여 target을 바라본다.
그러면 왜 Slerp을 사용할까? 그것은 실제 유니티의 play버튼을 누르면 알 수 있다.
LookRotation이 play버튼을 누르자마자(다른 함수없이 LookRotation만 사용!!) target을 바라보는 반면,
Slerp은 서서히 타겟방향으로 회전한다. 즉, 서서히 몸을 돌리는 것 처럼 보인다.
Quaternion.Lerp(Quaternion from, Quaternion to, float t) vs Quaternion.Slerp(Quaternion from, Quaternion to, float t)
Lerp이 Slerp보다 빠르다. 대신 멀리 to에 들어가는 퀴테니언이 멀 경우 회전이 나쁘게 보이는 단점이 있다.
(This is faster than Slerp but looks worse if the rotations are far apart.)
출처 :
http://supersoftware.tistory.com
'Engine > Unity' 카테고리의 다른 글
[NGUI/펌] 해상도에 따른 이미지 사이즈 맞추기 (0) | 2018.07.13 |
---|---|
[unity/C#] 특정 소수점 자리 이하 올림, 버림, 반올림 (2) | 2017.12.01 |
[Unity] 유니티 스크립트 함수 호출 순서 (0) | 2017.05.15 |
[Unity] animator 메카님 사용 시, 발동된 Trigger 취소하기 (0) | 2017.03.06 |
[Unity] 애니메이션 클립에 스크립트를 추가한 후 해당 함수 오버라이딩하기 (0) | 2017.01.26 |
[퍼온 자료] Lua와 C 바인딩2018. 10. 25. 21:13
<<<펌>>>
스택 이해하기
C와 lua간 연동에 중요한 요소는 가상 스택이다.
lua의 스택 액세스 방법은 절대/상대 접근이 있다.
양수 값 - 절대 접근
음수 값 - 상대 접근
절대 접근 방법은 스택 base에서 시작해 양수 1,2,3으로 순서를 부여하는 방법이다.
상대 접근 방법은 스택 top에서 시작해 음수 -1,-2,-3으로 순서를 부여하는 방법이다.
*스택의 마지막 값을 접근 시 -1, 바닥부터 접근 시 1
lua_checkstack : 스택 사이즈를 확인하기 위한 lua C API
LUA_MINSTACK 20 으로 정의
허용 가능한 스택 인덱스 범위는
1 | (index < 0 && abs(index) <= top) || (index > 0 && index <= stackspace ) | cs |
글로벌 테이블의 의사인덱스 : LUA_GLOBALSINDEX
Lua에서 C 함수 호출
순서
C함수 정의 - C함수 lua에 등록 - lua에서 등록된 함수 호출
우선 Visual Sutdio랑 연동(VS2012)
https://code.google.com/p/luaforwindows/downloads/detail?name=LuaForWindows_v5.1.4-46.exe&can=2&q=
에서 luaforwindows 설치
cmd에서 lua를 이용할 수 있다.
버전에 맞는 루아 바이너리 받기
난 VS2012용 정적 라이브러리를 받았다.
디렉토리 지정과 추가종속성 지정에 대한 설명은 생략한다.
예제
main.cpp
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 | extern "C" { #include "lua.hpp" } // 함수 정의 int luaHello(lua_State* L) { int count = 0; // luaL_checkstring을 통해 루아에서 넘어온 값을 가져온다. // 양수 1은 stack base의 첫 번째 값으로 루아에서 넘어온 첫 인자. const char* name = luaL_checkstring(L, 1); count++; printf("%s\n", name); // test name = luaL_checkstring(L, 2); count++; printf("%s\n", name); return count; } // 메인 void main() { lua_State *lua = luaL_newstate(); luaL_openlibs(lua); // 함수 등록하기 lua_register(lua, "hello", luaHello); // hello.lua에서 읽기 luaL_dofile(lua, "hello.lua"); // 루아 닫기 lua_close(lua); } | cs |
hello.lua
1 2 | hello("alice", "vorpal sword") hello("hello", "kowabunga!") | cs |
이게 말이 좀 애매해서 한참을 봤다.
C에서 정의한 함수를 루아 스크립트만 돌렸을 때는 당연히 안되고
컴파일 했을 때 루아에 있는 스크립트에서 C 함수가 작동된다는 말... 참 한글 어렵죠.
C에서 lua 함수 호출하기
lua 함수를 스택에 올림 - 스택에 있는 함수를 실행
lua 함수 스택에 올리기
1 2 3 4 5 6 7 8 9 | //case1) lua_pushstring("function"); lua_gettable(lua, LUA_GLOBALSINDEX); //case2) lua_getfield(lua, LUA_GLOBALSINDEX, "function"); //case3) lua_getglobal(lua, "function"); | cs |
세 가지중 하나로. LUA_GLOBASINDEX를 5.2버전에서는 사용할 수 없다고 한다.
main.cpp
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 | #include <string> extern "C" { #include "lua.hpp" } // 함수 정의 int luaHello(lua_State* L) { int count = 0; // luaL_checkstring을 통해 루아에서 넘어온 값을 가져온다. // 양수 1은 stack base의 첫 번째 값으로 루아에서 넘어온 첫 인자. const char* name = luaL_checkstring(L, 1); count++; printf("%s\n", name); // test name = luaL_checkstring(L, 2); count++; printf("%s\n", name); return count; } // 메인 void main() { // 초기화 lua_State *lua = luaL_newstate(); luaL_openlibs(lua); // 루아에서 C함수 사용하기 // 함수 등록하기 lua_register(lua, "hello", luaHello); // hello.lua에서 읽기 luaL_dofile(lua, "hello.lua"); lua_getglobal(lua, "popura"); if (lua_isfunction(lua, -1) == false) { fprintf(stderr, "print is not function\n"); return; } // C에서 루아 함수 사용하기 // 스택 탑 구하기 int top = lua_gettop(lua); lua_getglobal(lua, "popura"); if (lua_isfunction(lua, -1) == false) { return; } // pcall 에러 핸들러 int handle = lua_pcall(lua, 0, LUA_MULTRET, 0); if (handle) { fprintf(stderr, "call error: %s\n", lua_tostring(lua, -1)); return; } int ret_cnt = lua_gettop(lua) - top; printf("ret_cnt = %d\n", ret_cnt); int ret_val1 = 0; std::string ret_val2; // 스택 탑에서 문자값 가져오기 ret_val2 = luaL_checkstring(lua, -1); // 스택 팝 lua_pop(lua, 1); // 스택 탑에서 숫자값 가져오기 ret_val1 = static_cast<int>(luaL_checknumber(lua, -1)); // 스택 팝 lua_pop(lua, 1); // 루아에서 가져온 값 출력 printf("%d, %s", ret_val1, ret_val2.c_str()); // 루아 닫기 lua_close(lua); } | cs |
hello.lua
1 2 3 4 5 6 | function popura() return 1, "popura" end hello("alice", "vorpal sword") hello("hello", "kowabung") | cs |
결과
출처: http://hmjo.tistory.com/326 [오이데 ]
'(구) 자니..?' 카테고리의 다른 글
[Lua] 기초 : if 문법 / end expected near eof (0) | 2016.09.09 |
---|---|
[OpenGL] 기본 도형 그리기 (0) | 2015.11.26 |
[OpenGL] 윈도우 좌표를 OpenGL 좌표로 변환하기 (1) | 2015.11.19 |
[OpenGL] 초기 설정 및 셋팅 (1) | 2015.10.24 |