2017년 2월 21일 화요일

Unity 포물선 운동

포물선 운동


1. Unity Physics


1) 원하는 방향으로의 포물선 운동
1
2
3
4
void SetVelocity(Vector3 velocity)
{
    GetComponent<Rigidbody>().velocity = velocity;
}
cs

또는
1
2
3
4
void SetForce(Vector3 force)
{
    GetComponent<Rigidbody>().AddForce(force, ForceMode.Impulse);
}
cs

2) 원하는 좌표로의 포물선 운동
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
Vector3 GetVelocity(Vector3 currentPos, Vector3 targetPos, float initialAngle)
{
    float gravity = Physics.gravity.magnitude;
    float angle = initialAngle * Mathf.Deg2Rad;
 
    Vector3 planarTarget = new Vector3(targetPos.x, 0, targetPos.z);
    Vector3 planarPosition = new Vector3(currentPos.x, 0, currentPos.z);
 
    float distance = Vector3.Distance(planarTarget, planarPosition);
    float yOffset = currentPos.y - targetPos.y;
 
    float initialVelocity = (1 / Mathf.Cos(angle)) * Mathf.Sqrt((0.5f * gravity * Mathf.Pow(distance, 2)) / (distance * Mathf.Tan(angle) + yOffset));
 
    Vector3 velocity = new Vector3(0f, initialVelocity * Mathf.Sin(angle), initialVelocity * Mathf.Cos(angle));
 
    float angleBetweenObjects = Vector3.Angle(Vector3.forward, planarTarget - planarPosition) * (targetPos.x > currentPos.x ? 1 : -1);
    Vector3 finalVelocity = Quaternion.AngleAxis(angleBetweenObjects, Vector3.up) * velocity;
 
    return finalVelocity;
}
cs

Type Identifier Explain
Vector3
currentPos 출발 좌표
Vector3 targetPos 도착 좌표
float initialAngel 포물선의 각도

Example
1
2
3
4
5
void Fire(Vector3 target)
{
    Vector3 velocity = GetVelocity(transform.position, target, 45f);
    SetVelocity(velocity);
}
cs

2. Spline


세개 이상의 좌표를 이용해 포물선을 구현 가능
Curves and Splines
소스 받기

사용 방법
SplineNode 컴퍼넌트가 붙은 오브젝트들을 생성한다.
SplineController 컴퍼넌트를 붙인 오브젝트를 생성한다.
SplineController 컴퍼넌트에 SplineNode 가 붙어있는 오브젝트들을 링크시킨다.

2017년 1월 26일 목요일

Amazon Web Service - 7.PHP와 MySQL을 이용한 회원 가입 페이지 구현

PHP와 MySQL을 이용한 회원 가입 페이지 구현

1. DB 생성


phpMyAdmin을 이용한 Database생성 및 권한 부여 참고
1) DB 생성
2) 테이블 생성

3) 컬럼 생성


2. 초기 페이지 생성


/var/www/html/index.php
1
2
3
4
5
6
<html>
    <head/>
    <body>
        <a href="./admin/join.php">JOIN</a>
    </body>
</html> 
cs

3. 회원 가입 페이지 생성


/var/www/html/admin/join.php
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
<html>
    <head/>
    <body>
         <form name="join_form" method="post" action="./join_db.php" >
            ID<input type="text" name="join_id" />
            <br />
            PASSWORD<input type="password" name="join_pw" />
            <br />
            PASSWORD CHECK<input type="password" name="join_pwc" />
            <br />
            E-MAIL<input type="text" name="join_email" />
            <br />
            <input type="submit" value="SIGN IN" />
        </form>
    </body>
</html>
cs

4. DB 저장 구현


'#########' 부분을 본인 계정의 암호로 교체
/var/www/html/admin/join_db.php
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
<?php
$mysqli = new mysqli('localhost''root''#########''db');
 
if (mysqli_connect_error()) {
    exit('Connect Error (' . mysqli_connect_errno() . ') '. mysqli_connect_error());
}
 
extract($_POST);
 
$q = "INSERT INTO table ( id, password, email ) VALUES ( '$join_id', '$join_pw', '$join_email' )";
 
$mysqli->query($q);
 
$mysqli->close();
?>
cs

1) MySQL에 연결
2
$mysqli = new mysqli('localhost''root''#########''db');
cs

mysqli(Hostname, Username, Password, DB)
Hostname : Host의 주소
Username : DB 접근 권한이 있는 ID
Password : DB 접근 권한이 있는 ID의 암호
DB : DB명

2) 연결 실패시 메세지 출력 후 실행 중단
4
5
6
if (mysqli_connect_error()) {
    exit('Connect Error (' . mysqli_connect_errno() . ') '. mysqli_connect_error());
}
cs


3) POST 방식으로 전달할 변수 자동 생성
6
extract($_POST);
cs


4) 쿼리 전송
10
11
12
$q = "INSERT INTO table ( id, password, email ) VALUES ( '$join_id', '$join_pw', '$join_email' )";
 
$mysqli->query($q);
cs

INSERT INTO 테이블명 (속성1, 속성2...) VALUES (변수1, 변수2...)
테이블의 각 속성과 매칭되는 순으로 변수 입력

5) MySQL 연결 종료
14
$mysqli->close();
cs

참고 사이트


PHP MySQLi

Amazon Web Service - 5.Database 테이블 생성 및 권한 부여

Database 테이블 생성 및 권한 부여

1. Database 테이블 생성


1) Database 선택
2) 이름 및 컬럼수 입력 후 실행


3) 컬럼 추가시 실행 선택
4) 컬럼 설정이 끝났으면 저장 선택

2. 권한 부여


1) 사용자 항목 선택
2) 권한을 부여할 사용자의 권한 수정 선택

3) 권한을 부여할 Database의 권한 수정 선택

4) 권한을 부여할 테이블 선택

5) 원하는 권한 선택 후 실행

2017년 1월 25일 수요일

Amazon Web Service - 4.phpMyAdmin을 이용한 Database생성 및 권한 부여

phpMyAdmin을 이용한 Database생성 및 권한 부여

1. phpMyAdmin 접속


LinuxLAMP 웹 서버 설치 [5. phpMyAdmin 설치] 참고

2. Database 생성


1) 데이터베이스 항목 선택
2) 데이터 베이스 이름 설정
3) 한글 지원을 위해 데이터 정렬방식은 utf8_general_ci를 선택
4) 만들기 선택

3. User 생성


1) 사용자 항목 선택
2) 사용자 추가 선택


3) 로그인 정보 입력(사용자명, 암호)
4) 원격 접속을 허용하기 위해 호스트 설정을 아무데서나로 설정(%로 표기됨)
5) 전체적 권한에 모두 체크 선택
6) 하단의 실행 선택

4. 생성한 User에 Database 권한 부여


1) 사용자 항목 선택
2) 권한을 부여할 사용자의 권한 수정 선택


3) 권한을 부여할 데이터베이스 선택

4) 데이터베이스 선택시 권한 설정으로 자동 이동
5) 데이터베이스 권한 모두 체크 선택
6) 실행 선택

Amazon Web Service - 3.Instance FileZilla 연결

Instance FileZilla 연결

1. FileZilla 설치


FileZilla 다운로드

2. Key Pair 추가


1) 편집에서 설정 선택

2) SFTP 선택 후 키 파일 추가
키 파일(KeyPair, keypairname.pem) 추가 Linux 가상 머신 시작 [2.Instance 구성] 참고
참고 : FileZilla에서 Key Pair를 사용하려면 PuTTY 를 사용해 '.pem' 파일을 컨버팅해야 사용이 가능하다고 하나 최신 버전에서는 컨버팅 없이 '.pem' 파일 그대로 사용이 가능했다.

3. Instance 연결

1) 파일에서 사이트 관리자 선택

2) Instance 등록
a) 새 사이트 선택
b) 호스트는 Instance의 Public IP값 입력
c) 프로토콜은 "SFTP" 설정
d) 로그온 유형 "키 파일" 선택
e) 사용자에 "ec2-user" 입력
f) 키 파일(KeyPair, keypairname.pem) 추가 Linux 가상 머신 시작 [2.Instance 구성] 참고
g) 연결 선택

Amazon Web Service - 2.LinuxLAMP 웹 서버 설치

LinuxLAMP 웹 서버 설치

1. Amazon Linux에서 LAMP 웹 서버 설치 및 시작

1) 인스턴스 연결
Linux 가상 머신 시작 [3. Instance 연결] 참고

2) 퀵 소프트웨어 업그레이드 실행

[ec2-user ~]$ sudo yum update -y
cs

3) Apache 웹 서버, MySQL, PHP 소프트웨어 패키지 설치

1
[ec2-user ~]$ sudo yum install -y httpd24 php56 mysql55-server php56-mysqlnd
cs

4) Apache 웹 서버 시작

[ec2-user ~]$ sudo service httpd start
cs

5) Apache 웹 서버 시스템 부팅시 자동 시작 설정

[ec2-user ~]$ sudo chkconfig httpd on
cs

6) 웹 서버 테스트
Insance의 Public DNS 주소 또는 Public IP 주소 입력 후 Apache 테스트 페이지 확인

2. 파일 권한 설정


pache httpd가 처리하는 'Apache document root' 디렉터리에 보관된 파일을 처리. Amazon Linux Apache document root는 /var/www/html

1) www그룹을 인스턴스에 추가

[ec2-user ~]$ sudo groupadd www
cs

2) 사용자를 www그룹에 추가

[ec2-user ~]$ sudo usermod --G www ec2-user
cs

3) 재로그인 후 멤버십 확인

[ec2-user ~]$ exit
cs

[ec2-user ~]$ groups
ec2-user wheel www
cs

4) /var/www 및 콘텐츠의 소유권을 www 그룹으로 변경

[ec2-user ~]$ sudo chown -R root:www /var/www
cs

5) /var/www 및 하위 디렉터리의 디렉터리 권한을 변경해 그룹 쓰기 권한을 추가하고 미래 하위 디렉터리에서 그룹 ID 설정

[ec2-user ~]$ sudo chmod 2775 /var/www
cs

[ec2-user ~]$ find /var/www -type d -exec sudo chmod 2775 {} \;
cs

6) /var/www 및 하위 디렉터리의 파일 권한을 계속 변경해서 그룹 쓰기 권한 추가

[ec2-user ~]$ find /var/www -type f -exec sudo chmod 0664 {} \;
cs

3. LAMP 웹 서버 테스트

1) Apache 문서 루트에서 PHP 테스트 파일을 생성

[ec2-user ~]$ echo "<?php phpinfo(); ?>" > /var/www/html/phpinfo.php
cs

2) PHP 테스트 파일 확인
웹 브라우저에서 파일의 URL입력. Instance의 Public DNS 주소에 슬래시(/)와 파일이름이 추가된 형태
http://my.public.dns.amazonaws.com/phpinfo.php
페이지가 확인되지 않았을 경우 다음 명령어를 이용해 패키지가 모두 설치되었는지 확인

[ec2-user ~]$ sudo yum list installed httpd24 php56 mysql55-server php56-mysqlnd
cs

3) PHP 테스트 파일 삭제
테스트로 생성한 PHP파일의 내용은 보안상의 이유로 공개되면 안되기 때문에 삭제

[ec2-user ~]$ rm /var/www/html/phpinfo.php
cs

4. MySQL 서버 보안 유지

1) MySQL 서버 시작

[ec2-user ~]$ sudo service mysqld start
Initializing MySQL database:  Installing MySQL system tables...
OK
Filling help tables...
OK
 
To start mysqld at boot time you have to copy
support-files/mysql.server to the right place for your system
 
PLEASE REMEMBER TO SET A PASSWORD FOR THE MySQL root USER !
...
 
Starting mysqld:                                           [  OK  ]
cs

2) mysql_secure_installation 실행

[ec2-user ~]$ sudo mysql_secure_installation
cs

a) 현재 root 암호 입력창. 기본은 없음. Enter로 넘어감.
b) Y를 눌러 암호 설정 모드 진입 후 암호 2회 입력
c) Y를 눌러 익명 사용자 계정 제거
d) Y를 눌러 원격 root 로그인 비활성화(활성화시 N)
c) Y를 눌러서 테스트 데이터베이스 제거
d) Y를 눌러서 권한 테이블을 다시 로드하고 변경사항 저장

3) MySQL 시스템 부팅시 자동 시작 설정

[ec2-user ~]$ sudo chkconfig mysqld on
cs

5. phpMyAdmin 설치

1) EPEL(Extra Packages for Enterprise Linux) 리포지토리를 활성화

[ec2-user ~]$ sudo yum-config-manager --enable epel
cs

2) phpMyAdmin 패키지 설치

[ec2-user ~]$ sudo yum install -y phpMyAdmin
cs

3) 로컬 시스템 액세스 허용
로컬 IP 주소 확인 후 서버 IP 주소를 로컬 IP 주소로 대체

[ec2-user ~]$ sudo sed --'s/127.0.0.1/your_ip_address/g' /etc/httpd/conf.d/phpMyAdmin.conf
cs

4) Apache 웹 서버 재시작

[ec2-user ~]$ sudo service httpd restart
Stopping httpd:                                            [  OK  ]
Starting httpd:                                            [  OK  ]
cs

5) MySQL 서버 재시작

[ec2-user ~]$ sudo service mysqld restart
Stopping mysqld:                                           [  OK  ]
Starting mysqld:                                           [  OK  ]
cs

6) phpMyAdmin 접속 확인
웹 브라우저에서는 phpMyAdmin 설치의 URL을 입력.
Instace의 Public DNS 주소에 슬래시(/) 및 phpmyadmin이 추가된 형태
http://my.public.dns.amazonaws.com/phpmyadmin

참고 : phpMyAdmin 외부망 접속 수동 설정

1) phpMyAdmin.conf 설정

[ec2-user ~]$ cd /etc/httpd/conf.d
cs

[ec2-user ~]$ sudo vi phpMyAdmin.conf
cs

<Directory /usr/share/phpMyAdmin/>
   AddDefaultCharset UTF-8
   <IfModule mod_authz_core.c>
     # Apache 2.4
     <RequireAny>
       Require ip 127.0.0.1
       Require ip ::1
     </RequireAny>
   </IfModule>
   <IfModule !mod_authz_core.c>
     # Apache 2.2
     Order Deny,Allow
     Deny from All
     Allow from 127.0.0.1
     Allow from ::1
   </IfModule>
</Directory>
cs

위의 부분을 아래와 같이 수정
<Directory /usr/share/phpMyAdmin/>
   AddDefaultCharset UTF-8
   Order Allow,Deny
   Allow from All
</Directory>
cs

2) httpd.conf 설정

[ec2-user ~]$ cd /etc/httpd/conf
cs

[ec2-user ~]$ sudo vi httpd.conf
cs

<Directory />
    AllowOverride none
    Require all denied 
</Directory>
cs

위의 부분을 아래와 같이 수정. 보통 102번째 라인에서 확인됨.
<Directory />
    AllowOverride none
    Require all granted 
</Directory>
cs

참고 사이트


Amazon LinuxLAMP 웹 서버 설치 가이드 참고