unity学習#7
4509 ワード
第3部
第六章-1:弾幕射撃ゲーム:ダギー
今週は、前回作成したプレーヤースクリプトPlayer Controllerを改良し、より良い操作感を実現しました.
まず、既存のPlayer Controlスクリプトは次のようになります.
1.操作がゲームにすぐに反映されない.
-最初のプレゼンテーションビデオで確認できる問題です.既存のAddForce()メソッドでは、十分な高速な力を追加するのに時間がかかります.移動中に逆方向に移動しようとすると、力は冠状面で相殺され、すぐに方向変換できません.これは操作が不便と見なされる可能性がある問題で、修正が必要です.
2.入力検出コードが複雑です.
-4つのifゲートを用いて方向キーを検出する効率が低下する.
3.playerRigidbodyコンポーネントのドラッグ&ドロップ割り当てが不便です.
-構成部品を変数に直接ドラッグ&ドロップする方法は不便であり、誤った値が割り当てられる可能性があるため、より直接的なコードを実行したいと考えています.
これらの問題を改善するために、スクリプトをいくつか修正しました.
第一に、3つ目の問題:playerRigidbody素子割り当ての問題を解決しました.
2つ目は、既存の更新方法を変更して、より良い操作感を生み出すことです.
```C#
void Update()
{
//水平軸と垂直軸の入力値の検出と保存
float xInput = Input.GetAxis("Horizontal");
float zInput = Input.GetAxis("Vertical");
#2回目の操作確認
第六章-1:弾幕射撃ゲーム:ダギー
今週は、前回作成したプレーヤースクリプトPlayer Controllerを改良し、より良い操作感を実現しました.
まず、既存のPlayer Controlスクリプトは次のようになります.
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class PlayerController : MonoBehaviour
{
public Rigidbody playerRigidbody; //이동에 사용할 리저드바디 컴포넌트
public float speed = 8f; //이동 속력
void Start()
{
}
void Update()
{
if(Input.GetKey(KeyCode.UpArrow) == true) //위쪽 방향키 입력이 감지된 경우 z방향 힘 주기
{
playerRigidbody.AddForce(0f, 0f, speed);
}
if (Input.GetKey(KeyCode.DownArrow) == true) //위쪽 방향키 입력이 감지된 경우 -z방향 힘 주기
{
playerRigidbody.AddForce(0f, 0f, -speed);
}
if (Input.GetKey(KeyCode.RightArrow) == true) //위쪽 방향키 입력이 감지된 경우 x방향 힘 주기
{
playerRigidbody.AddForce(speed, 0f, 0f);
}
if (Input.GetKey(KeyCode.LeftArrow) == true) //위쪽 방향키 입력이 감지된 경우 -x방향 힘 주기
{
playerRigidbody.AddForce(-speed, 0f, 0f);
}
}
public void Die() //게임 오브젝트 비활성화
{
gameObject.SetActive(false);
}
}
これらのスクリプトは十分に利用できますが、いくつかの問題もあります.1.操作がゲームにすぐに反映されない.
-最初のプレゼンテーションビデオで確認できる問題です.既存のAddForce()メソッドでは、十分な高速な力を追加するのに時間がかかります.移動中に逆方向に移動しようとすると、力は冠状面で相殺され、すぐに方向変換できません.これは操作が不便と見なされる可能性がある問題で、修正が必要です.
2.入力検出コードが複雑です.
-4つのifゲートを用いて方向キーを検出する効率が低下する.
3.playerRigidbodyコンポーネントのドラッグ&ドロップ割り当てが不便です.
-構成部品を変数に直接ドラッグ&ドロップする方法は不便であり、誤った値が割り当てられる可能性があるため、より直接的なコードを実行したいと考えています.
これらの問題を改善するために、スクリプトをいくつか修正しました.
第一に、3つ目の問題:playerRigidbody素子割り当ての問題を解決しました.
private Rigidbody playerRigidbody; //이동에 사용할 리저드바디 컴포넌트
public float speed = 8f; //이동 속력
void Start()
{
//게임 오브젝트에서 Rigidbody 컴포넌트를 찾아 playerRigidbody에 할당
playerRigidbody = GetComponent<Rigidbody>();
}
変数PlayerRigidBodyのアクセス制限子をpublicからprivateに変更し、未使用のStart()メソッドセクションを変更して、変数PlayerRigidBodyにRidgedマスター構成部品の参照を割り当てます.2つ目は、既存の更新方法を変更して、より良い操作感を生み出すことです.
```C#
void Update()
{
//水平軸と垂直軸の入力値の検出と保存
float xInput = Input.GetAxis("Horizontal");
float zInput = Input.GetAxis("Vertical");
//실제 이동 속도를 입력값과 이동 속력을 사용해 결정
float xSpeed = xInput * speed;
float zSpeed = zInput * speed;
//Vector3 속도를 (xSpeed, 0 , zSpeed)로 생성
Vector3 newVelocity = new Vector3(xSpeed, 0f, zSpeed);
//리지드바디의 속도에 newVelocity 할당
playerRigidbody.velocity = newVelocity;
}
여기서 Input.GetAxis() 메서드가 등장하는데, 이는 어떤 **축에 대한 입력값을 숫자로 변환하는 메서드**이다.
>✍ **Horizontal 축**의 경우
- 음의 방향 : ←(왼쪽 방향키), A 키에 대응되어 -1.0이 출력됨.
- 양의 방향 : →(오른쪽 방향키), D 키에 대응되어 +1.0이 출력됨.
- 아무것도 누르지 않을 때는 0이 출력됨.
>✍ **Vertical 축**의 경우
- 음의 방향 : ↓(아래쪽 방향키), S 키에 대응되어 -1.0이 출력됨.
- 양의 방향 : ↑(위쪽 방향키), W 키에 대응되어 +1,0이 출력됨.
- 아무것도 누르지 않을 때는 0이 출력됨.
이를 입력받아 각각을 speed와 곱하여 X 방향 이동 속도, Z 방향 이동 속도를 표현하여 조작감을 개선하였다.
이러한 점을 개선하여 2차 스크립트를 완성하였다.
```C#
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class PlayerController : MonoBehaviour
{
private Rigidbody playerRigidbody; //이동에 사용할 리저드바디 컴포넌트
public float speed = 8f; //이동 속력
void Start()
{
//게임 오브젝트에서 Rigidbody 컴포넌트를 찾아 playerRigidbody에 할당
playerRigidbody = GetComponent<Rigidbody>();
}
void Update()
{
//수평축과 수직축의 입력값을 감지하여 저장
float xInput = Input.GetAxis("Horizontal");
float zInput = Input.GetAxis("Vertical");
//실제 이동 속도를 입력값과 이동 속력을 사용해 결정
float xSpeed = xInput * speed;
float zSpeed = zInput * speed;
//Vector3 속도를 (xSpeed, 0 , zSpeed)로 생성
Vector3 newVelocity = new Vector3(xSpeed, 0f, zSpeed);
//리지드바디의 속도에 newVelocity 할당
playerRigidbody.velocity = newVelocity;
}
public void Die() //게임 오브젝트 비활성화
{
gameObject.SetActive(false);
}
}
上記のコードを実行するときのプレゼンテーションビデオです.#2回目の操作確認
突然加速する現象は,以前の1回目のプレゼンテーションビデオに比べて減少し,方向操作がより即時であることがわかる.p>
まず今週は操作感を改善する方法を見つけて修正し、来週からはゲームオブジェクトを追加するなどの作業でゲームを完成させます.
Reference
この問題について(unity学習#7), 我々は、より多くの情報をここで見つけました https://velog.io/@purangi_code/유니티-공부-7テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol