public class NPC_Animation : MonoBehaviour
{
Animator anim;
// Start is called before the first frame update
void Start()
{
anim = GetComponent<Animator>();
anim.applyRootMotion = false;//humanoid에서 캐릭터 위치가 바뀌는것을 방지한다.
}
// Update is called once per frame
void Update()
{
int pickAnumber = Random.Range(1, 6);
anim.SetInteger("ani", pickAnumber); //ani라는 int를 animator에 추가
}
}
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class test_ani : MonoBehaviour
{
Animator m_Animator;
void Start()
{
//오브젝트에 넣는부분
m_Animator = gameObject.GetComponent<Animator>();
}
void Update()
{
//트러거에 원하는 키패드를 넣고. 애니메이션 트리거 이름을 넣음 된다.
if (Input.GetKey(KeyCode.Keypad0))
{
m_Animator.SetTrigger("sliding");
}
if (Input.GetKey(KeyCode.Keypad1))
{
m_Animator.SetTrigger("fall");
}
if (Input.GetKey(KeyCode.Keypad2))
{
m_Animator.SetTrigger("catch");
}
if (Input.GetKey(KeyCode.Keypad3))
{
m_Animator.SetTrigger("kick");
}
if (Input.GetKey(KeyCode.Keypad4))
{
m_Animator.SetTrigger("win");
}
if (Input.GetKey(KeyCode.Keypad5))
{
m_Animator.SetTrigger("jump");
}
}
}
int intOk; // intOk라는 정수형 변수를 만든다.
float Afloat = 10.5f //Afloat라는 실수형을 만들고 그 값을 10.5라고 넣는다.
float Bfloat = 9.5f //Bfloat라는 실수형을 만들고 그 값을 9.5라고 넣는다.
void FloatToint() //FloatToint라는 함수를 만든다.
{
}
void FloatToint(flaot _Af, float _Bf, String _TEX = "디폴트") //()안에는 입력받을 것을 넣는데 사용된다.
// _TEX에 넣을것이 없을때 디폴트라는 글자를 출력한다.
{
intOk =(int)(_Af+_Bf); //_Af과 _Bf 더한것을 int정수형으로 변경하여, intOK에 담는다.
print(intOk); //intOK를 출력한다.
print(_TEX);
}
void Start() // 유니티에서 첫번째 실행하는 함수이다.
{
FloatToint(Afloat,Bfloat, "Good"); // Afloat은 _Af에 들어가게 되고, Bfloat은 _Bf에 들어가게된다.
// Good은 _TEX안에 들어가게 된다.
}
retrun 은 void를 사용하지 않는 함수를 사용할때 필요하다.
void Start(){
int yourAge = GetYourAge();
print(yourAge);
}
int GetYourAge(){
return 30;
}
결과 = 30
오버로딩
void Start(){
int answerInt = AddTo(12,2);
int answerInt2 = AddTo(2,4,6);
float answerFloat = AddTo(5.2f,2f);
print(answerFloat);
}
int AddTo(int numA, int numB){
int sum = numA +numB
return sum;
}
int AddTo(int numA, int numB, int numC){
int sum = numA + numB + numC
return sum;
}
float AddTo(float numA, float numB){
float sum = numA +numB
return sum;
}
결과 = 7.2
조건문
int hp =100;
void Start(){
}
void OnMouseDonw(){
hp = hp-10;
if(hp < 1){
print("killed")
print("HP:" +hp);
Destroy(gameObject);
}else if(hp<20){
print("hurt...");
print("HP:" +hp);
}else{
print("OK");
print("HP:" +hp);
}
}
Switch문
pulbic int myHp= 50;
void Start(){
}
vod OnMouseDonw(){
case 10:
print("NONO")
break;
case 20:
print("NO")
break;
case 30:
print("more")
break;
default:
print("OK")
break;
}
결과 = OK
for 와 while (Loop문)
------ for ------ 반복횟수가 명확할때 주로 사용한다.
for (시작수:언제까지:증가수)
void Start(){
}
void OnMouseDown(){
for( int i =0 ; i<10 ; i++){
MoveForward();
}
}
void MoveForward(){
transform.Translate(0, 0, 0.1f);
}
다른 응용법
<<<<
int add = 0; // 시작수
void Start()
{
for(;;) // ;만 남기고 나머지는 따로 처리하는 방식
{
if(add>5) // 언제까지
break; // if 멈춤
num = add+2; //(add +=2) 증가수
}
}
>>>>>
------ while ------ 반복횟수가 명확하지 않을때 주로 사용한다.(어찌되었건 비슷하다.)
void OnMouseDown()
{
int count = 0;
while (count < 10)
{
MoveForward();
count++;
}
}
void MoveForward()
{
transform.Translate(0, 0, 0.1f);
}
void Start(){
int[] points = {10,20,30,40};
int sum = 0;// 무언가 우선 들어있어야한다.
for(int i=0; i<point.Lenght;i++)
{ sum +=points[i]; }
int average = sum / points.Length;
Debug.Log(average);
}
결과: 25
new 와 static
new는 클래스의 변수를 사용할때 재지정하여 사용하는것.
Static은 클래수의 변수에 직접 변수를 넣어서 사용하는것.
public class TestA
{
private int a;
public int b; // 이 부분을 활용.
public static int c; // static처럼 외부에서 직접 사용되는 변수를 정적변수라고 한다.
}
public class Test : MonoBehaviour
{
TestA a1 = new TestA(); //위에 클래스의 변수를 새로 지정해야 정상적으로 작동한다.
TestA a2 = new TestA();
TestA a3 = new TestA();
void Start()
{
Abc();
}
void Abc()
{
a1.b = 5; // 클래스에 접근하여 수를 대입하는 방식이다.
a2.b = 1;
a3.b = 10;
TestA.c = 20; // static의 경우 new를 사용하지 않고 직접 대입할수 있다. 클래스 자체를 수정하는것이다.
//변수를 만들 필요가 없이 직접 대입한다.
print(a1.b);
print(a2.b);
print(ac.b);
print(TestA.c);
}
}
t is number of actors * number of bones per actor.
A decent number of bones per a humanoid character would be …
2 upper leg bones + 2 lower leg bones + 2 feet bones + 2 toe bones + 30 finger bones (3 bones per finger) + 2 upper arm bones + 2 lower arm bones + hip bone + 3 spine bones + 2 shoulder bones + 1 neck bone + 1 head bone = 50.
The number can go much higher. For example, highly detailed models in Guilty Gear Xrd Sign have up to 400 or 500 bones.
So, for 24 characters onscreen you could easily have 1500 bones active.
Here’s a thing, though. Those bones are not necessarily represented as a full-blown game objects, and might not be stored as matrix transform driven by animation. Meaning, you might see a 20 characters, but have no “bone” objects on screen. Of course, if you have 20 ragdolls, then you’ll have 18..20+rigidbodies per character (because it is unlikely that fingers will be driven by ragdolls)
But either way 1500+ matrix multiplications on modern system is cheap. Now, if you want to have few thousands characters onscreen, optimization techniques will be necessary.
I remember Crytek’s Ryse saying each character had 770 bones (at full LOD), with the faces having 260 alone. Though this is Crytek we’re talking about.
I know ~120 bone characters work in unity/ios, if that helps.
외국애들이 떠드는걸 봐서 확실히 다 다르지만... 기본 50에서 대략 보편적으로 100개로 잡아보자..