프로그램에서 UI 하면 많이 쓰이는 방식 중 하나가 스크롤이 달린 리스트입니다.

그런데 유니티에는 리스트가 기본 제공이 아니군요.

그럼 직접 구현해야죠 ㅎㅎㅎㅎㅎ

 

리스트구현은 내용이 많습니다.

그래서 이번 포스팅에서는 간단하게 크기조절 없이 항목(Item)만 있는 리스트를 만들어 보겠습니다.

 

1. 레이아웃 작성하기

컬럼은 넣지 않고 스크롤뷰와 컨탠츠뷰만 넣겠습니다.

구조는 이렇게 됩니다.

 

 

패널(GameObject > UI > Panel)을 추가하고 이름을 'ListView'로 설정합니다.

앵커 프리셋(Anchor Presets)을 'left top'으로 지정합니다.

추가한 패널을 크기를 400*600으로 지정해 줍니다.

위치는 원하는 대로 옮겨 줍니다.

 

 

'ListView' 밑에 빈 오브젝트(Create Empty)를 생성하고 이름을 'ScrollView'로 설정합니다.

'ScrollView'의 구성요소에 트랜스폼(Transform)을 랙트 트랜스폼(Add Component > Layout > Rect Transform)으로 바꿔줍니다.

앵커 프리셋(Anchor Presets)을 'stretch stretch'로 지정하는데 알트(Alt) + 시프트(Shift)를 눌러 피벗(pivot)과 포지션(position) 함께 설정해 줍니다.

(참고 : [Unity 5] UI - 앵커(Anchor)와 앵커 프리셋(Anchor Presets) 다루기 )

 

'ScrollView' 밑에 패널(GameObject > UI > Panel)을 추가하고 이름을 'Content'로 설정합니다.

앵커 프리셋을 'stretch stretch'로 지정하는데 알트 + 시프트를 눌러 피벗과 포지션 함께 설정해 줍니다.

 

 

 

2. 항목(Item)만들기

항목은 UI로 먼저 만들고 나중에 프리팹(Prefab)으로 변환해서 사용합니다.

 

2-1. UI 만들기

먼저 항목으로 사용할 객체를 만들기 위해 'Content'안에 버튼(GameObject > UI > button)을 추가하고 이름을 'btnItem'으로 설정합니다.

앵커 프리셋을 'left top'로 지정하는데 알트를 눌러 포지션 함께 설정해 줍니다.

피벗은 마우스로 잡아 왼쪽 위로 옮겨 줍니다.

넓이는 400, 높이는 100으로 설정합니다.

 

이 스샷에는 앵커가 잘못 찍혀 있습니다. (왼쪽에 몰려 있는 것이 맞습니다.)

 

 

'btnItem' 밑에 이미지(GameObject > UI > Image) 2개, 텍스트(GameObject > UI > Text) 1개를 추가해주고 아래와 같이 배치해줍니다.

 

 

 

각 오브젝트는 앵커프리셋을 잡을 때 피벗만 같이 잡았고 나머지는 수동으로 조절했습니다.

 

이제 이렇게 만든 버튼을 프리팹으로 변환해 줍니다.

하이어라키(Hierarchy)에서 'btnItem'을 드래그해서 프로젝트(Project)로 옮겨 줍니다.

 

 

 

 

이렇게 하면 프로젝트에 'btnItem'이 프리팹으로 변환되어 추가 된 것을 확인할 수 있습니다.

프리팹 오브젝트는 하이어라키에서 파란색으로 표시됩니다.

 

2-2. 오브젝트 데이터 만들기

데이터 리스트를 만들어서 리스트에 바인딩 되도록 할 것입니다.

 

프로젝트에 만들어둔 'btnItem' 프리팹을 클릭하고 인스팩터에서 스크립트(Add Component > New Script)를 추가해줍니다.

스크립트 이름은 'ItemObject'로 넣어 줍니다.

 

 

 

추가한 스크립트에 아래 코드를 넣습니다.

 

1
2
3
4
5
6
7
8
9
10
11
using UnityEngine;
using UnityEngine.UI;
 
public class ItemObject : MonoBehaviour
{
    public Button Item;
    public Text Name;
    public Text Info;
    public Image Face;
    public GameObject Confirm;
}
cs

 

 

각 변수는 프리팹에 들어가 있는 오브젝트를 연결하여 다른 스크립트에서 접근할 때 쉽게 오브젝트들을 컨트롤 할 수 있게 해줍니다.

'Confirm'이 'bool'이 아니고 'GameObject'인 이유는 트루(true)일때만 오브젝트를 표시할 것이기 때문입니다.

펄스면(false) 오브젝트 자체를 숨기게 됩니다.

 

프로젝트에 'btnItem'을 클릭하고 인스팩터에서 'ItemObject'를 확인하면 변수가 표시됩니다.

'btnItem'의 구성요소를 드래그하여 각 변수에 넣어 줍니다.

 

 

 

3. 리스트 만들기

이제 하이어라키에서 'btnItem'을 복사하여 'Content'에 여러 번 붙여넣습니다.

 

 

 

버튼이 여러 개가 겹쳐서 등장합니다.

이것은 유니티에서 기본 레이아웃에서는 정열이 없기 때문입니다.

하지만 리스트는 새로운 줄(row)이 생기면 자동으로 밑으로 붙어야 하죠.

 

이럴 때 필요한 것이 버티칼 레이아웃 그룹(Vertical Layout Group)입니다.

(가로로 쌓고 싶다면 호리젠탈 레이아웃 그룹(Horizontal Layout Group)을 추가하면 됩니다.)

'Content'의 인스팩터(inspector)에 버티칼 레이아웃 그룹을 추가해 줍니다.

추가한 버티칼 레이아웃 그룹의 'Child Force Expand'속성의 'Heigh'속성을 꺼줍니다.

 

 

 

원하는 대로 쌓이기 시작합니다.

 

그런데 아이템을 10개 정도 쌓아보면 아이템이 레이아웃 밖으로 나가는 것을 알 수 있습니다.

이건 마스크 영역을 만들어주면 역역에 밖으로 나간 아이템은 그리기 않습니다.

 

'ScrollView'에 인스팩터에 마스크(Mask, Add Component > UI > Mask)를 추가해줍니다.

'ScrollView'에 인스팩터에 이미지(Mask, Add Component > UI > Image)를 추가해줍니다.

 

이렇게 해주면 아래와 같이 마스크 영역이 지정됩니다.

 

 

4. 스크롤 만들기
이대로 실행해보면 스크롤이 안되는 것을 알 수 있습니다.

 

스크롤이 되게 하려면 스크롤 렉트(Scroll Rect)를 사용해야 합니다.

자세한 내용은 아래 포스팅을 참고해 주세요.

참고 : [Unity 5] UI 스크롤(Scroll) 다루기

 

'ScrollView'에 스크롤 렉트(Add Component > UI > Scroll Rect)를 추가합니다.

콘텐츠(Content)에 하이어라키의 'Content'를 드래그 하여 넣어 줍니다.

 

'Content'에 자동으로 크기를 지정하기 위해 콘텐츠 사이즈 필터( Content Size Fitter, Add Component > Layout > Content Size Fitter )를 추가해 줍니다.

추가한 콘탠츠 사이즈 필터에 'Vertical Fit'속성을 'Min Size'로 설정합니다.

 

 

 

콘텐츠의 크기가 적용되어 스크롤이 되는 것을 볼 수 있습니다.

 

테스트용으로 넣어두었던 'btnItem'을 모두 제거합니다.

 

5. 데이터 만들기

리스트에 사용될 데이터는 위에서 만든 'btnItem'에 출력될 데이터입니다.

'Item'으로 스크립트를 추가하고 다음 코드를 넣습니다.

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
using System;
using UnityEngine;
using UnityEngine.UI;
 
[Serializable]
public class Item
{
    public string Name;
    public string Info;
    public Sprite Face;
    public bool Confirm;
 
    /// <summary>
    /// 아이템을 클릭했을때 발생할 이벤트
    /// </summary>
    public Button.ButtonClickedEvent OnItemClick;
}
cs

 

 

6. 리스트 바인딩 스크립트 만들기

이제 메인 스크립트를 만들어서 리스트를 생성/관리해보겠습니다.

 

'GameMain'으로 스크립트를 생성하고 메인 카메라에 적용 시켜 줍니다.

스크립트 코드는 아래와 같습니다.

 

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
using System.Collections.Generic;
using UnityEngine;
 
public class GameMain : MonoBehaviour
{
    /// <summary>
    /// 아이템으로 사용할 오브젝트(프리팹)
    /// </summary>
    public GameObject ItemObject;
    /// <summary>
    /// 아이템이 추가될 오브젝트
    /// </summary>
    public Transform Content;
 
    /// <summary>
    /// 바인딩할 리스트
    /// </summary>
    public List<Item> ItemList;
 
 
    // Use this for initialization
    void Start ()
    {
        this.Binding();
    }
    
    // Update is called once per frame
    void Update () {
        
    }
 
    /// <summary>
    /// 아이템 리스트를 지정된 프리팹으로 변환하여 추가합니다.
    /// </summary>
    private void Binding()
    {
        GameObject btnItemTemp;
        ItemObject itemobjectTemp;
 
        foreach (Item item in this.ItemList)
        {
            //추가할 오브젝트를 생성한다.
            btnItemTemp = Instantiate(this.ItemObject) as GameObject;
            //오브젝트가 가지고 있는 'ItemObject'를 찾는다.
            itemobjectTemp = btnItemTemp.GetComponent<ItemObject>();
 
            //각 속성 입력
            itemobjectTemp.Name.text = item.Name;
            itemobjectTemp.Info.text = item.Info;
            itemobjectTemp.Face.sprite = item.Face;
            itemobjectTemp.Confirm.SetActive(item.Confirm);
            itemobjectTemp.Item.onClick = item.OnItemClick;
 
            //화면에 추가
            btnItemTemp.transform.SetParent(this.Content);
        }
    }
 
 
    /// <summary>
    /// 아이템 클릭
    /// </summary>
    public void ItemClick_Result()
    {
        Debug.Log("아이템이 클릭 되었다.");
    }
}
cs

 

 

코드는 간단합니다.

리스트에 있는 내용을 'btnItem'으로 변환한 후 'Content'에 추가합니다.

 

이제 테스트를 해봅시다.

메인 카메라에 'GameMain'스크립트의 속성을 보면 퍼블릭(public)변수들이 표시된 것을 알 수 있습니다.

 

'Item Object'속성엔 'btnItem'을 드래그하여 넣습니다.

'Content'속성엔 하이어라키에 있는 'Content'를 드래그하여 넣습니다.

'Item List'의 'Size'속성을 '2'로 바꾸면 자동으로 'ItemObject'객체가 생성됩니다.

각각의 요소에 원하는 값을 넣고 실행해 봅시다.

 

 

 

항목이 잘 생성되고 있습니다!

 

 

 

7. 테스트용 리스트 데이터

테스트용 데이터 생성코드는 깊이 볼 필요는 없습니다.

스크립트에서 객체를 어떻게 생성해야 하는지 테스트하는 코드라고 생각하시면 됩니다.

 

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
#region 테스트용 데이터 생성 코드
 
/// <summary>
/// 생성할 알파뱃
/// </summary>
private string[] m_Alpabet 
    = { "a""b""c""d""e""f""g""h""i"
        , "j""k""l""m""n""o""p""q""r"
        , "s""t""u""v""x""y""z" };
 
    
private void AddListItem()
{
    Sprite[] image
    = { Resources.Load("Air"typeof(Sprite)) as Sprite
        , Resources.Load("Earth"typeof(Sprite)) as Sprite
        , Resources.Load("Fire"typeof(Sprite)) as Sprite
        , Resources.Load("Water"typeof(Sprite)) as Sprite };
 
    Item itemTemp;
        
 
    for (int i = 0; i < 20++i)
    {
        itemTemp = new Item();
 
        itemTemp.Name = GetAlpabet();
        itemTemp.Info = Random.Range(0100000000).ToString();
        itemTemp.Face = image[Random.Range(04)];
        itemTemp.Confirm = System.Convert.ToBoolean(Random.Range(02));
        itemTemp.OnItemClick = new Button.ButtonClickedEvent();
        itemTemp.OnItemClick.AddListener(delegate { ItemClick_Result(i); });
 
 
        //리스트에 추가
        this.ItemList.Add(itemTemp);
    }
}
 
private string GetAlpabet()
{
    string sReturn = "";
 
        
    int nMax = Random.Range(0100);
 
    for (int i = 0; i < nMax; ++i)
    {
        sReturn += this.m_Alpabet[Random.Range(024)];
    }
 
    return sReturn;
}
 
#endregion
cs

 

 

'Binding();'을 호출하기 전에 'AddListItem()'을 호출하면 테스트 데이터가 생성되어 들어간 화면을 볼 수 있습니다.

 

 

 

마무리

깃허브 : https://github.com/dang-gun/Unity_UI_List001

 

프로젝트 파일 : UnityUI_ListView_001.zip

 

간단하게(?) 리스트 뷰를 구현해 보았습니다.

이게 리스트 뷰내용의 10%도 안 된다고 보시면 됩니다-_-;;;

쓸만한 리스트뷰를 만들려면 작업해야 할 게 엄청 많습니다.

 

유니티 스토어에 유료애셋이 있는데 15$입니다.

(참고 : unity Asset Store - ListView for Unity UI )

이걸 사용하는 것도 생각해 보는 것이 좋습니다.

신고
  1. dd 2017.06.01 12:49 신고  Address  Edit/Delete  Reply

    다 좋은데 왜 사진을 저러 쓰레기사진을 사용한건지 내용은 참 좋은데 겁나 저렴해보이네요

    • Favicon of http://blog.danggun.net BlogIcon 당근천국 2017.06.01 15:59 신고  Address  Edit/Delete

      아무런 성적인 메시지 없이 단백하게 여성의 라인만 강조되어 있는 사진인데 저렴해 보인다니.....
      저랑 취향차이가 많이 나는가 봅니다.

    • 개발자 2017.06.24 01:39 신고  Address  Edit/Delete

      저 예쁜 사진을 보고 쓰레기사진이라고 하는분이 있네요. 드로잉하시는분, 사진작가분들을 쓰레기 만드는 분으로 취급해버리시네. 공부자료에 맞지않는 사진이라고 말했으면 그러려니 할텐데 (물론 교과서나 서적같은곳은 저렇게 올리면 안되겠지만 개인 블로그기라 전혀 문제 되지않음) 블로거님 공부자료 매우 유익해요 많이 올려주세요~~

    • Favicon of http://blog.danggun.net BlogIcon 당근천국 2017.06.25 03:08 신고  Address  Edit/Delete

      어이쿠 감사합니다. ^^

  2. asdf 2017.07.26 17:31 신고  Address  Edit/Delete  Reply

    전부 다 되는데 이상하게 마지막에 실행눌러서 자동으로
    리스트가 생성되고나면, 버튼 스케일이 전부 1.0이 아니라 1.1111111 이렇게 되어있습니다...

    이유가 뭘까요?

    • asdf 2017.07.26 21:05 신고  Address  Edit/Delete

      아 그리고, activity 설정을, 메인카메라의 인스펙터에서 말고, 스크립트로 true / false를 주고 싶은데 어떻게 해야 할까요?

    • Favicon of http://blog.danggun.net BlogIcon 당근천국 2017.07.28 03:41 신고  Address  Edit/Delete

      버튼 스케일은 원본을 따라가기 때문에 원래는 그대로 가야하는게 맞는데 만약 안그렇다면 복사할때 직접 값을 지정해보시는게 좋을듯 합니다.

      프라이빗 변수 만들어서 넣어두시면 됩니다.

  3. Liel 2017.08.16 23:30 신고  Address  Edit/Delete  Reply

    저도 사진보고 조금 불쾌하긴 했어요.

    많은 사람들이 보고 갈 강좌이고, 알찬 내용만 있어도 충분할텐데
    굳이 적나라하게 드러난 여성의 뒤태 사진으로 이목을 끄시려는 이유를 모르겠습니다.

    본인이 '성적인 메시지가 없다'고 생각해도, 타인이 그렇게 생각 할 여지가 조금이라도 있는 부분은
    올려서는 안된다고 생각합니다.

    • Favicon of http://blog.danggun.net BlogIcon 당근천국 2017.08.17 01:29 신고  Address  Edit/Delete

      이것보다 성적인 메시지가 강하지만 노출은 적은 사진도 얼마든지 있습니다.
      애초에 목적이 리스트에 맞게 세로로 긴사진이 필요했고 그중 성적메시지가 적으면서도 리스트의 스크롤을 강조하는 사진으로 선택한 것입니다.
      물론 이것이 개개인의 가치관에 따라 다르게 느껴질수는 있겠지만 그판단기준이 '타인이 그렇게 생각 할 여지가 조금이라도 있다면'이라면 여기에 비너스상이나 다비드 상을 올려놔도 같은 이야기를 하실거라고 생각합니다.
      왜냐하면 예전에 EBS에서 하는 강의 봤는데 비너스상과 다비드상에 모자이크 한거 보고 식겁했는데 같은 느낌을 받고 있어서 말이죠 ㅎㅎㅎ

    • Liel 2017.08.17 16:06 신고  Address  Edit/Delete

      글쓴이님 눈엔 저게 조각상으로 보이시나 봅니다. 대체 왜 비너스상, 다비드상을 언급하시는거지? 제 눈엔 실사 여성의 신체로 밖에 안보이는데요.

      공개적인 강좌라서 10대들도 쉽게 접할 수 있는 글입니다. 저도 네이버에서 유니티 리스트 뷰 검색하고 떡하니 접하게 됐구요. 그런데 저 사진을 보자마자 강좌를 읽을 생각보단 그냥 불쾌감밖에 안들었어요. 성인 사이트에서나 볼 법한 저급한 썸네일... 네. 딱 그 수준으로밖에 안보였으니까요.

      자꾸 예술이라는 키워드로 쉴드치시는데, 본인이 그렇게 생각한다고 타인도 다 그렇게 생각할 거라는 생각하지 마세요. 어디까지나 그건 이기심의 연장선일 뿐입니다. "비너스상이나 다비드 상을 올려놔도 같은 이야기를 하실거라고 생각합니다." 는 딱 조롱조로 쓴 문장으로 밖에 안보이는데 참 안타깝습니다. 아예 그냥 사진을 쿠르베의 세상의 기원으로 올리지 그러셨어요?

    • Liel 2017.08.17 16:07 신고  Address  Edit/Delete

      그리고 본인도 인정하셨네요. "그중 성적메시지가 적으면서도 리스트의 스크롤을 강조하는 사진으로 선택한 것입니다." 성적 메시지가 있음을 자각하시면서 왜 올리셨나요?

    • Favicon of http://blog.danggun.net BlogIcon 당근천국 2017.08.17 17:52 신고  Address  Edit/Delete

      스크롤의 기능의 강조되어서 보이려면 스크롤이 이동하면서 배경의 일부분이 가려지고 열리면서 전체적인 배경이미지를 떠올리게 하는게 좋은이미지 입니다.
      그런 이미지로 이 이미지는 딱인것이 세로로 길고 직선이 아닌 곡선이 끊기지 않는 다는 것입니다.
      살아있는 생명체를 다룰 때 성적인 메시지가 제로가 될 순 없습니다.
      그렇기 때문에 성적인 메시지가 있다없다가 중요한것이 아니고 얼마나 강한가가 중요한 것이죠.

      안그래도 세상의 기원도 이야기할까하다가 너무 비아냥 대는게 아닌가 해서 뺐는데 마침 이야기하셨으니 하자면 그 작품은 에로티즘을 예술로 포장것을 비판하는 작품입니다.
      그러면서 그 그림자체는 담백하고 사실적으로 신체를 묘사하므로서 '예술작품'인정 받고 있는 작품입니다.

      시대를 막론하고 예술로 추앙받던 신체의 아름다움을 에로티시즘으로 오염시키는 작품이 없다는 이야기를 하는 것이 아닙니다.
      하지만 저 사진은 그런 작품들과는 달리 신체자체의 아름다음을 사실적으로 보여주는 사진입니다.
      보정이 팍팍들어가거나 자연스러운 라인보다는 대칭에 의한 아름다움을 강조하는 일반적인 누드사진과는 차원이 다른 사진입니다.
      그것이 작가가 의도한 것이든 아니든 말이죠.

      이런 작품들까지 다비드상과 비너스상에 모자이크처리를 하듯 에로티즘의 시선으로 보는걸 비판하는 겁니다.
      이런 시선이라면 교과서에 누드로된 예술작품은 모자이크 처리를 하거나 올리지 말고 가능하면 누드작품을 만든 예술가들 소개하지 않아야 합니다.
      '로뎅전'을 하는데 19금을 붙일일이 없으니 학생들이 별생각없이 가서 충격받으면 안되니까 말이죠.

      제가 일베충티나는 글만 아니면 이정도로 비아냥거리는 경우가 별로 없는데 이렇게까지 비아냥거리는건
      21세기에 이런 논쟁을 하고 있다는게 너무 충격적이여서 그렇습니다.
      이점은 제가 사과하겠습니다.
      그래도 이미 비아냥 거렸으니 그냥 밀고 가겠습니다 ㅎㅎㅎ

      90년대에 어떤 미술선생님이 에로티즘읠 설명하기 위해 에로티즘이 전혀 없는 누드사진과 에로티즘이 강하지만 노출이 별로없는 플래이보이 잡지사진을 자신의 홈페이지에 올렸다가 처벌받은 사례가 있었습니다.
      학생을 가르치는 선생이 자신의 홈페이지에 누드 사진을 올렸다는 이유로 말이죠.
      이런 시선을 21세기에도 받고 있을줄은 생각도 못하고 있었기 때문에 더욱 충격적입니다.

      그렇다면 저 사진이 왜 예술로서 가치가 없는지 설명해 주시겠습니까?

      p.s. 그러고보니 ebs가 아니고 kbs강의였던거 같기도하네요.

  4. syke 2017.08.23 16:37 신고  Address  Edit/Delete  Reply

    그냥 왔다가 가는데 참고라고, 모르는사람 알려주는 취지는 좋으나,
    사진을 왜 저런거해두는지 이해가안됨
    댓글보니 자기 생각을 일반화시키는 이유를 모르겠기도하고.
    교과서 예시사진으로 삼각함수구할때 나체 꼭지에다가 점 이어도 일반화 하실듯.
    근대미술에서나 하세요. 적당히 말을 갖다붙여야지


    • Favicon of http://blog.danggun.net BlogIcon 당근천국 2017.08.24 03:01 신고  Address  Edit/Delete

      제가 더 이해가지 않는건 다른 포스팅에있는 셈플들에는 성적메시지가 강한 이미지도 있는데 이런건 아무도 신경쓰지 않는데 성적메시지가 적은 이미지가 단지 누드 그것도 성기나 유두가 아슬아슬하게 가리는 누드도 아닌 가릴필요조차 없는 누드가 논란이 된다는게 더 이상하네요.
      뭘 현대예술까지 오나요?
      과거부터 현재까지 인체의 아름다움은 항상 최고의 예술이였는데 말이죠.
      불과 몇년전에 tv에서 모자이크된 다비드상을 봤는데 현대예술이던 과거예술이던 어차피 그 시선은 똑같은거 아닌가요?

      애초에 그런 시선이라면 왜 자기는 그런시선을 가지고 있으면 이러이러한 이유로 이건 예술이라고 보지 않는지를 납득시켜야지하지 않겠습니까?
      이정도는 예술의 범위에서 허용된다고 생각하는 사람한테 대뜸 자기취향이 아니라는 식으로 말해봐야 무슨 의미가 있겠습니까?
      그래서 제가 계속 왜 제가 이걸 예술로 보는지 설명하는 것이고요.

  5. ㅇㅇ 2017.10.06 17:20 신고  Address  Edit/Delete  Reply

    사진 보기안좋네요
    본인도 '취향'이니 '성적메세지가 적은 이미지'니 하면서 쌩뚱맞다는걸 인지는 하면서 구구절절 설명하고있네요.
    그냥 그러려니 하세요. 님블로그에 님마음대로 글쓰는게 잘못이라곤 안하겠지만 많은 사람들이 눈살찌뿌리고 간다는 사실만 알아두세요

    • Favicon of http://blog.danggun.net BlogIcon 당근천국 2017.10.07 02:41 신고  Address  Edit/Delete

      이 포스팅 말고 다른 포스팅에서 사용한 사진이 문제가 될까봐 걱정하면서 썼는데...
      이 포스팅은 아무 문제가 없을거라고 생각하고 썼던거라 쌩뚱맞긴 하네요.

  6. Favicon of http://ncunia.tistory.com BlogIcon 니힐_NIHIL 2017.10.29 13:23 신고  Address  Edit/Delete  Reply

    저도 선정적인 건 진짜 싫어하는 사람인데 ㅋㅋㅋㅋ 저정도의 사진은 뭐 선정적이라고 하기에도 좀 그런 것 같은데요. 저게 선정적이면 누드 모델은 뭐가되고 저런걸로 그림 연습하는 사람들도 있는데요. 그 사람들이 다 이상한 사람 되는 것 같은데요.

    저런 사진에 성적메시지 같은 건 고려를 할 필요도 없고요. 평소에 야동도 안본다고 할 사람들이로군요. 개구라를 박으면 안되는 것인데 말입니다. 어이가 없어가지고 할 말이 없네요. 저게 뭐가 이상하고 뭐가 야하냐 대체 저 사진도 누군가의 예술 작품일 것이고 혹은 그냥 찍은 사진일 수도 있는데 저게 굳이 야하다고 하는 건 본인들의 머릿속에 야한 것 밖에 들어있지 않아서 편협한 생각을 하는 것일 뿐입니다.

    이해가 안가네 아니 그리고 이게 마음에 안들면 다른 정보글을 보면 되는건데 굳이 마음에 안들어요 빼애애액 하는거 보면 꼬라지 참 웃기구요.

  7. 주억 2017.12.02 05:41 신고  Address  Edit/Delete  Reply

    잘보고 갑니다.
    정말 예술적인 강의입니다.
    사진은 더 예술적이네요
    즐겨찾기했습니다

댓글 작성

이름
패스워드
홈페이지
비밀글

티스토리 툴바