8
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

Godot EngineAdvent Calendar 2019

Day 4

Godot Engine 入門 パート3

Last updated at Posted at 2019-12-03

パート2 からの続きです

玉転がし

プレイヤー作成

ついにプレイヤーを作ります
下図赤枠の「+」をクリックして新規シーンを作成
スクリーンショット 2019-10-22 22.54.36のコピー.png

今回はルートノードをAreaにします
「カスタムノード」をクリックしてRigidBodyを選択してください
スクリーンショット 2019-10-22 22.55.43.png
下のようにツリーを構成して、「CollisionShape」ノードのShapeにはSphereShapeを選択します
スクリーンショット 2019-10-22 22.56.32.png
「CSGSphere」ノードのRingsを12にします
これは必要ではありませんが、デフォルトより丸く見えます
スクリーンショット 2019-10-22 22.57.40のコピー.png
「RigidBody」ノードで右クリックして「スクリプトをアタッチ」を選択します
スクリーンショット 2019-10-22 23.08.30.png
デフォルトの設定のまま作成します
スクリーンショット 2019-10-22 23.11.09.png
以下のようにスクリプトを書きます
スクリーンショット 2019-10-22 23.13.01.png

矢印キーの入力に応じて球に X, Z 方向の力を加えるスクリプトです

extends RigidBody

const speed = 5
var velocity = Vector3()

func player_move():
	var direction = Vector3()

	if Input.is_action_pressed("ui_right"):
		direction.x += 1
	if Input.is_action_pressed("ui_left"):
		direction.x -= 1
	if Input.is_action_pressed("ui_down"):
		direction.z += 1
	if Input.is_action_pressed("ui_up"):
		direction.z -= 1

	if direction.length() > 0:
		var force = direction.normalized() * speed
		add_force(force, Vector3(0, 0, 0))


func _ready():
	pass


func _process(delta):
	player_move()

カメラ

ルートノードの子ノードとしてカメラを追加します
スクリーンショット 2019-10-22 23.17.35.png
カメラのTransformを、球が真ん中に映るように変更します
スクリーンショット 2019-10-22 23.18.50.png
同様にカメラにもスクリプトをアタッチします
スクリーンショット 2019-10-22 23.20.58.png
カメラを球の子として配置するだけでは、球の回転といっしょにカメラも回転してしまうので、
それを抑えるために以下のようなスクリプトを書きます
スクリーンショット 2019-10-22 23.21.35.png

ごめんなさいコピペしました

extends Camera

onready var player = get_parent()
var offset : Vector3

func _init():
	set_as_toplevel(true)


func _ready():
	offset = get_global_transform().origin


func _physics_process(delta):
	var target = get_parent().get_global_transform().origin
	var pos = offset + target
	var up = Vector3(0, 1, 0)
	look_at_from_position(pos, target, up)


func _process(delta):
	pass

保存

ルートノードの名前を「Player」に変更します
スクリーンショット 2019-10-22 23.19.14.png
Mainシーンと同様に「Player.tscn」としてシーンを保存します
スクリーンショット 2019-10-22 23.13.34.png

メインシーンへの追加

「Main.tscn」をダブルクリックし、「Spacial」ノードに「Player.tscn」をドラッグアンドドロップします
スクリーンショット 2019-10-22 23.19.33.png
PlayerのTranslateを調整します
スクリーンショット 2019-10-22 23.19.40.png

床と壁を固定する

忘れていました
メインシーンのFloorの「Mode」を「Static」にします
スクリーンショット 2019-10-22 23.23.02.png
各Wallも同様です
スクリーンショット 2019-10-22 23.23.20.png

動かしてみる

下図赤枠の実行ボタンをクリックして実行します
スクリーンショット 2019-10-22 23.19.44のコピー.png

矢印キーで玉が転がることを確認しましょう

パート4に続きます…

8
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
8
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?