find / name / print

void start(){
    GameObject monster = GameObject.Find("Cube");
    GameObject koko = GameObject.Find("Cube");
    
    monster.name = "Orc";
    
    print(koko.name);
    }

결과 = orc

 

 

Public -스크립트 외부에서 수치를 변경이 가능해진다.

[Sytem.NonSerialized] - public 변수를 외부에서 변경을 못하게 한다. 

(애초에 public으로 안하면 될것을 왜이리 하는지 알수는 없지만...나중에 알게되겄지...)

public int myAge =10;

[Sytem.NonSerialized]
public int myAge =10;

void start(){
	print (myAge);
    }
    

결과 = 10 이거나 외부에서 넣은 수치

 

 

변수사용

int gogo =10;

void start(){
    print("who is"+ gogo);
    print("what is"+ gogo);
    print("where is"+ gogo);
    }
    
   

결과 = who is 10 , what is 10 , where is 10

 

void 활용영역

void는 공허(빈)라는 뜻이고 함수를 만드는데 사용된다. 함수는 ()가 있으며 가능하면 함수명 앞은 대문자로 한다.

void Start(){
	GoGo();
    GoGo();
    GoGo();
    GoGo();    
    }
    
void GoGo(){
    print ("What");
    print ("How");
    print ("YEA");
    }

결과 = what How YEA, what How YEA, what How YEA

 

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

배열

int[ ] numbers = new int[5];

void Start(){
     numbers[0]=6;
     numbers[1]=2;
     numbers[2]=11;
     numbers[3]=3;
     numbers[4]=9;

     print(numbers[3]);
}

------ public ------

    public int[] numb;

    void Start()
    {
    }

    void OnMouseDown()
    {
        print(numb[numb.Length - 1]);
    }

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

'Unity > C#' 카테고리의 다른 글

캐릭터 랜덤 모션  (0) 2020.11.02
EditorWindow  (0) 2020.10.30
간단한 애니메이션 스크립트  (0) 2020.09.08
MiniPorfiler  (0) 2020.07.29
object rotate by tag  (0) 2020.07.29

유니티 보트어텍에 들어있는 포퍼먼스 테스트터 입니다.

using UnityEngine.Profiling;
using UnityEngine.Rendering;

namespace UnityEngine.Experimental.Rendering
{
    public class MiniProfiler : MonoBehaviour
    {
        private bool m_Enable = true;
        private const float kAverageStatDuration = 1.0f;            // stats refresh each second
        private int m_frameCount;
		private float m_AccDeltaTime;
        private string m_statsLabel;
        private GUIStyle m_style;

        private float[] m_frameTimes = new float[5000];
        private int m_totalFrames = 0;
        private float m_minFrameTime = 1000f;
        private float m_maxFrameTime = 0f;

        internal class RecorderEntry
        {
            public string name;
            public int callCount;
            public float accTime;
            public Profiling.Recorder recorder;
        };

		enum Markers
		{
			kRenderloop,
			kCulling,
            kShadows,
            kDraw,
            kPost,
		};
		
        RecorderEntry[] recordersList =
        {
			// Warning: Keep that list in the exact same order than SRPBMarkers enum
            new RecorderEntry() { name="UnityEngine.CoreModule.dll!UnityEngine.Rendering::RenderPipelineManager.DoRenderLoop_Internal()" },
            new RecorderEntry() { name="CullScriptable" },
            new RecorderEntry() { name="Shadows.ExecuteDrawShadows" },
            new RecorderEntry() { name="RenderLoop.ScheduleDraw" },
            new RecorderEntry() { name="Render PostProcessing Effects" },
        };

        void Awake()
        {
            for (int i = 0; i < recordersList.Length; i++)
            {
                var sampler = Sampler.Get(recordersList[i].name);
                if (sampler.isValid)
                    recordersList[i].recorder = sampler.GetRecorder();
            }

            m_style =new GUIStyle();
            m_style.fontSize = 18;
            m_style.normal.textColor = Color.white;

            ResetStats();

        }

        void RazCounters()
        {
            m_AccDeltaTime = 0.0f;
            m_frameCount = 0;
            for (int i = 0; i < recordersList.Length; i++)
            {
                recordersList[i].accTime = 0.0f;
                recordersList[i].callCount = 0;
            }
        }

        void    ResetStats()
        {
             m_statsLabel = "Gathering data...";
             RazCounters();
        }

        void Update()
        {
            if (m_Enable)
            {
                m_AccDeltaTime += Time.unscaledDeltaTime;
                m_frameCount++;

                m_frameTimes[(int) Mathf.Repeat(m_totalFrames, 5000)] = Time.unscaledDeltaTime;

                int frameFactor = Mathf.Clamp(m_totalFrames, 0, 5000);

                float m_averageFrameTime = 0f;
                
                for (int i = 0; i < frameFactor; i++)
                {
                    m_averageFrameTime += m_frameTimes[i];
                }

                if (m_frameCount > 10)
                {
                    m_minFrameTime = Time.unscaledDeltaTime < m_minFrameTime ? Time.unscaledDeltaTime : m_minFrameTime;
                    m_maxFrameTime = Time.unscaledDeltaTime > m_maxFrameTime ? Time.unscaledDeltaTime : m_maxFrameTime;
                }

                // get timing & update average accumulators
                for (int i = 0; i < recordersList.Length; i++)
                {
                    if (recordersList[i].recorder != null)
                    {
                        recordersList[i].accTime += recordersList[i].recorder.elapsedNanoseconds / 1000000.0f;      // acc time in ms
                        recordersList[i].callCount += recordersList[i].recorder.sampleBlockCount;
                    }
                }

				if (m_AccDeltaTime >= kAverageStatDuration)
				{

					float ooFrameCount = 1.0f / (float)m_frameCount;
					float avgLoop = recordersList[(int)Markers.kRenderloop].accTime * ooFrameCount;
					float avgCulling = recordersList[(int)Markers.kCulling].accTime * ooFrameCount;
					float avgShadow = recordersList[(int)Markers.kShadows].accTime * ooFrameCount;
					float avgDraw = recordersList[(int)Markers.kDraw].accTime * ooFrameCount;
					float avgPost = recordersList[(int)Markers.kPost].accTime * ooFrameCount;

					m_statsLabel = $"Rendering Loop Main Thread:{avgLoop:N}ms\n";
					m_statsLabel += $"    Culling:{avgCulling:N}ms\n";
					m_statsLabel += $"    Shadows:{avgShadow:N}ms\n";
					m_statsLabel += $"    Draws:{avgDraw:F2}ms\n";
					m_statsLabel += $"    PostProcessing:{avgPost:F2}ms\n";
					m_statsLabel += $"Total: {(m_AccDeltaTime * 1000.0f * ooFrameCount):F2}ms ({(int)(((float)m_frameCount) / m_AccDeltaTime)} FPS)\n";
                    
                    float frameMulti = 1f / frameFactor;
                    m_statsLabel += $"Average:{(m_averageFrameTime * 1000f * frameMulti):F2}ms\n";
                    m_statsLabel += $"Minimum:{m_minFrameTime * 1000f:F2}ms\n";
                    m_statsLabel += $"Maximum:{m_maxFrameTime * 1000f:F2}ms\n";
                    
					RazCounters();
				}
            }

            m_totalFrames++;
        }

        void OnGUI()
        {
            if (m_Enable)
            {
                bool SRPBatcher = UnityEngine.Rendering.Universal.UniversalRenderPipeline.asset.useSRPBatcher;

//                GUI.skin.label.fontSize = 15;
                GUI.color = new Color(1, 1, 1, 1);
                float w = 400, h = 300;

                if ( SRPBatcher )
                    GUILayout.BeginArea(new Rect(32, 50, w, h), "(SRP batcher ON)", GUI.skin.window);
                else
                    GUILayout.BeginArea(new Rect(32, 50, w, h), "(SRP batcher OFF)", GUI.skin.window);

                GUILayout.Label(m_statsLabel, m_style);

                GUILayout.EndArea();
            }
        }
    }
}

'Unity > C#' 카테고리의 다른 글

캐릭터 랜덤 모션  (0) 2020.11.02
EditorWindow  (0) 2020.10.30
간단한 애니메이션 스크립트  (0) 2020.09.08
C# 기초 기억창고  (0) 2020.08.09
object rotate by tag  (0) 2020.07.29

매번 물체에 회전을 넣기가 귀찮아서... 어렵사리 코딩하였습니다.(코딩은어려버.)

Tag를 설정하고, Y축으로 회전합니다.

 

쉐이더 테스트할때 사용하려고 만든겁니다.

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class rotate_tag : MonoBehaviour
{
    
    //Rotational Speed
    public float speed = 20f;



    //object

    GameObject[] objt;


    void Start()
    {
        objt = GameObject.FindGameObjectsWithTag("gogo");

    }


    //Forward Direction

    bool ForwardY = true;

    
    void _All()
    {

        for(int i = 0; i < objt.Length; i++)
        {
            objt[i].transform.Rotate(0, Time.deltaTime * speed, 0, Space.Self);

        }
                 
    }



    void Update()
    {
        //Forward Direction

        if (ForwardY == true)
        {

            _All();
            
        }


    }
}

'Unity > C#' 카테고리의 다른 글

캐릭터 랜덤 모션  (0) 2020.11.02
EditorWindow  (0) 2020.10.30
간단한 애니메이션 스크립트  (0) 2020.09.08
C# 기초 기억창고  (0) 2020.08.09
MiniPorfiler  (0) 2020.07.29

https://www.youtube.com/playlist?list=PL0M1m9smMVPJ4qEkJnZObqJE5mU9uz6SY

 

RealToon Tutorials

 

www.youtube.com

강제 스페큘러가 있고, 일반적인 스페큘러가 안된다는 아쉬움있지만 쓸만하다.

컨셉에 따라 사용하면될듯하다.

'Unity > ETC' 카테고리의 다른 글

유니티 패키지에 대한 정보는  (0) 2020.09.08
dynamic bone test  (0) 2020.08.21
유니티짱 쉐이더 설정  (0) 2020.07.29
캐릭터 폴리곤  (0) 2020.07.29
모델 데이터 최적화  (0) 2020.05.20

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개로 잡아보자..

PS2 파판: 8,000폴리곤


PS3 메기솔 4: 1.4만폴리곤 /스테이지는 스테이지 별로 25만-35만폴리곤

 

갓오브워 3:  크레이토스 2.3만폴리곤 / 하데스 3만폴리곤 / 가이아 6.5만폴리곤

 

파이날판타지 13: 3만폴리곤 (PS2에 8,000폴리곤)

 

언차티드 2: 네이트 드레이크 8만폴리곤

 

 

출처:https://bbs.ruliweb.com/ps/board/300001/read/314046

'Unity > ETC' 카테고리의 다른 글

RealToon Tutorials  (0) 2020.07.29
유니티짱 쉐이더 설정  (0) 2020.07.29
모델 데이터 최적화  (0) 2020.05.20
최적화에 대한  (0) 2020.05.17
잡다한..  (0) 2020.05.16

행열: 버텍스와 계산을 할때 사용한다고 한다.

 

Direct Specular: 물체 극성을 주는것이라고하는데, 물이나 굴절같은데 쓴다고 한다. 

 

Metal Reflectance: 미리 설정된 금속 반사율 이다. specular나 Albedo에 넣어서 활용할수 있다.

 

Camera: 

 

Fog: 안개로 멀어질수록 밀도가 높아짐.

 

Object: 물체에 Transform에서 값을 참조한다.

Scene Color:  화면을 캡쳐하는 기능이다.

Scene Depth:

 

유니티는 화면을 그릴때  불투명(opaque)을 먼저 그리고 Zbuffer 저장 그리고 투명 순으로 그린다.

'Unity > Shader Graph & Amplify' 카테고리의 다른 글

Amplify Shader 주요 기능  (0) 2020.11.04
툰 쉐이더 Amplify shader set  (0) 2020.11.02
Shader graph-input02  (0) 2020.06.29
Shader graph -input01  (0) 2020.06.11
Shader graph -channel01  (0) 2020.06.10

Vertex Color(메쉬의 버텍스 컬러를 이용한 텍스쳐 겹치기 방법:배경 바닥에서 주로 사용된다.)

View Direction - 카메라가 보는 방향

Gradient - 컬러를 그라디언트로(fixed로 하면 끊어진 컬러가 된다.)

Sample gradient - 시간을 넣을수 있다.(이외에 다른것도..)

Ambient - 하늘, 적도, 바닥 컬러를 정해준다. 라이트맵(환경광)의 컬러를 가져오는걸 알수있다.

Baked GI - 베이킹된 맵을 텍스쳐로 사용할수있다.(diffuse로 사용할수 있다는 뜻인데, 용도는 모르겠음.)

 

Refraction Probe - 반사 효과를 넣을수 있다.

'Unity > Shader Graph & Amplify' 카테고리의 다른 글

툰 쉐이더 Amplify shader set  (0) 2020.11.02
Shader graph-input03  (0) 2020.07.12
Shader graph -input01  (0) 2020.06.11
Shader graph -channel01  (0) 2020.06.10
Shader graph -Artistic03  (0) 2020.06.10

Boolean- 참, 거짓...(스위치이다.)

Color- 뭔말이 필요한가...

 

상수라고함.(어디에 쓰임있는지 아직모름..)

PI- 파이임..(3.1415926)

TAU- 파이에 2를 곱한 값.(6.28318530)

PHI- 황금비율(1.618034)

E- 지속적으로 무한으로 다가가는 (고라니TV 참고)
SQRT- 2의 제곱근 . 루트2

 

Integer -정수

Slider - float값을 기반으로 하는 최소최대치를 만든다.

Time-

Time- 1초마다 증가

SineTime- 싸인 그래프로 증가(1.6초면 1이 되고, 3.14초면 0이되고... -1)

CosineTime - 코싸인 그래프로 증가(1.6초면 0되고, 3.14초면 1이되고....-1)

DeltaTime - 프레임간에 시간차이를 매번 다르기 때문에 이를 보완하여 일정하게 만드는것.

SmoothDelta - 델타타임을 좀더 부드러운 간격으로 만든것.

 

Vector(float, uv, vertex...)

vector를 통하여 빼거나 더할수도 있다.

 

Bitangent Vector

출처: http://rapapa.net/?p=2419

object 좌표계:  각 오브젝트의 local로 본 좌표계

world 좌표계: 월드를 중심으로 본 좌표계

view 좌표계: 카메라의 로컬에서 x,y는 그대로이나 z가 반대인 좌표계

tangent 좌표계: 탄젠트벡터(U=x), 비탄젠트(V=y), 노멀벡터(z) 오브젝트이 각 정점마다 탄젠트 좌표계가 존재.

 

Positon

 

Screen Position

(잘안되서 헤멤: UniversalRenderPipelineAsset에 OpaqueTexture가 체크되어야 하며, 가능하면 DepthTexture까지 둘다 체크하고 개발.)

 

Tangent vector

어디에 쓰임있는지 모르겠음..

 

 

UV

 

고라니TV  외에 여러 사이트에서 참고하였습니다.

'Unity > Shader Graph & Amplify' 카테고리의 다른 글

Shader graph-input03  (0) 2020.07.12
Shader graph-input02  (0) 2020.06.29
Shader graph -channel01  (0) 2020.06.10
Shader graph -Artistic03  (0) 2020.06.10
Shader graph -Matcap  (0) 2020.05.30