Pemain dapat menerima umpan balik tentang apakah tindakan mereka melakukan apa pun dengan animasi. Ini bisa menjadi pohon bergetar saat dihantam, atau hewan peliharaan berbahagia saat diberi makan. Dalam hal ini, kami akan menunjukkan cara membuat tombol yang bergerak saat pemain mengkliknya.
Menggabungkan dengan Animasi
Salah satu cara animasi objek adalah menggunakan tweens. Tween tween, singkatan dari dalam-antara, adalah proses mengubah nilai awal ke nilai akhir dalam waktu tertentu. Tweens dapat digunakan untuk mengubah propperti seperti posisi, warna, atau rotasi.
Pengaturan Proyek
Untuk proyek ini, tween akan menggerakkan objek dari posisi awal ke posisi tujuan.
Tentukan bagian mana yang akan Anda animasikan. Dalam contoh di bawah ini, 1 adalah tombol dan 2 adalah dinding.
Dalam bagian yang akan bergerak, tambahkan ClickDetector dan naskah bernama TweenMove. Jangan ganti nama ClickDetector.
Buka script TweenMove. Kemudian, salinan dan pasta skrip di bawah ini.
-- Menggandakan bagian kembali dan ke depan berdasarkan sumbu yang dipilih-- Tombol memiliki status on/off yang menggerakkan bagian ke depan atau ke belakanglocal TweenService = game:GetService("TweenService")local button = script.Parentlocal clickDetector = button:FindFirstChildWhichIsA("ClickDetector")local buttonState = -1 -- Menentukan arah tombol; -1 berarti itu akan menekan, 1 berarti itu akan muncullocal inTween = false-- 変수 yang dapat disesuaikanlocal TWEEN_TIME = 0.15local TWEEN_MOVE_DISTANCE = 1.5-- Mengubah variabellocal buttonTweenInfo = TweenInfo.new(TWEEN_TIME, -- WaktuEnum.EasingStyle.Quad, -- Gaya MeredakanEnum.EasingDirection.Out -- Arah Mudah)local function buttonPress()-- Jika tombolnya tweening, hindari agar tidak digunakan lagiif inTween == true thenreturnend-- Hitung CFrame baru untuk posisi tombollocal offsetCFrame = CFrame.new(0, TWEEN_MOVE_DISTANCE * buttonState, 0)local newCFrame = button.CFrame:ToWorldSpace(offsetCFrame)-- Buat tween dan mainkanlocal tweenButton = TweenService:Create(button, buttonTweenInfo, {CFrame = newCFrame})tweenButton:Play()inTween = true-- Pada tahap selesai, buat tombol yang dapat digunakan kembalitweenButton.Completed:Connect(function()inTween = false-- Mengubah status tombolbuttonState *= -1end)endclickDetector.MouseClick:Connect(buttonPress)Mainkan dan klik objek. Saat mengetestasi, Anda mungkin perhatikan bahwa objek bergerak ke arah atau jarak yang salah. Itu dapat disesuaikan dalam bagian berikutnya.
Menyesuaikan Move Tween
Dengan naskah ditambahkan, Anda dapat menyesuaikannya untuk menyesuaikan kebutuhan gameAnda. Tombol dapat ditekan untuk bergerak ke arah depan dan kembali, atau ke atas dan ke bawah.
Posisi Perubahan
Ingat, remaja beralih dari nilai awal ke nilai tujuan. Skrip ini menggunakan CFrame untuk menindak tombol dalam arah relatif terhadap posisinya saat ini. Arah ini diperlukan dalam Baris 28 dari script.
Pada baris itu, CFrame baru dibuat menggunakan koordinat X, Y, dan Z. Dalam contoh ini, tombol bergerak relatif terhadap sumbu Y-nya.
-- Hitung CFrame baru untuk posisi tombollocal offsetCFrame = CFrame.new(0, TWEEN_MOVE_DISTANCE * buttonState, 0)local newCFrame = button.CFrame:ToWorldSpace(offsetCFrame)
Untuk memiliki tombol bergerak dalam arah berbeda , cukup ganti salah satu koordinat yang diinginkan dengan garis: TWEEN_MOVE_DISTANCE * buttonState. Tetap semua koordinat lainnya ke 0.
Misalnya, garis ini akan menggerakkannya relatif terhadap sumbu X-nya.
-- Hitung CFrame baru untuk posisi tombollocal offsetCFrame = CFrame.new( TWEEN_MOVE_DISTANCE * buttonState, 0, 0)local newCFrame = button.CFrame:ToWorldSpace(offsetCFrame)
Waktu dan Jarak Tweening
Skrip ini mencakup variabel berikut yang mengubah gerakan tween. Nama-nama capitalized seperti TWEEN_TIME ditulis secara khusus agar script ini diubah.
Coba ubah nilai satu variabel di bawah ini:
- Baris 11 - TWEEN_TIME : Waktu dalam detik yang dibutuhkan untuk tween terjadi.
- Baris 12 - TWEEN_MOVE_DISTANCE : Jarak di mana tombol bergerak dalam studs.
Mengubah Other Properties
Sebagian besar proporsi dengan jenis data numerik dapat dibuat kembali. Bagian ini mencakup beberapa proporsi umum, seperti rotasi, yang dapat digunakan untuk membawa lebih banyak umpan balik pemain ke game Anda. Ingatlah, Anda juga dapat mengubah lebih dari satu proporsi sekaligus.
Untuk daftar penuh atribut, lihat halaman TweenService API.
Berputar
Untuk rotasi, kombinasikan tweening dan CFrame sebagai gantinya menggunakan Vector3. Tweetens rotasi dapat digunakan untuk membuat makhluk bergulir saat hewan peliharaan, atau koin berputar saat mereka diambil.
Dalam contoh skrip berikutnya, posisi dan rotasi makhluk diperkecil ketika diklik untuk menunjukkan betapa bahagia saat menjadi hewan peliharaan.
Kode di bawah ini akan memutar objek berdasarkan jumlah derajat di TWEEN_ROT_ANGLES .
-- Menggunakan tween untuk membuat objek berputar ke atas dan bounce
local TweenService = game:GetService("TweenService")
local partToTween = script.Parent
local clickDetector = partToTween:FindFirstChildWhichIsA("ClickDetector")
local inTween = false
-- 変수 yang dapat disesuaikan
local TWEEN_TIME = 0.25
local TWEEN_ROT_ANGLES = -45
local TWEEN_MOVE_DISTANCE = 3
-- Mengubah variabel
local tweenInfo = TweenInfo.new(
TWEEN_TIME, -- Waktu
Enum.EasingStyle.Quad, -- Gaya Meredakan
Enum.EasingDirection.Out, -- Arah Mudah
1, -- RepeatCount (ketika kurang dari nol tween akan berulang tanpa batas)
true -- Mundur (tween akan mundur setelah mencapai tujuan)
)
local function activateAction()
-- Jika objek tweening, hindari agar tidak tweening lagi
if inTween == true then
return
end
-- Hitung CFrame baru untuk posisi dan rotasi objek
local offsetCFrame = CFrame.new(0, TWEEN_MOVE_DISTANCE, 0)
local rotatedCFrame = CFrame.Angles(math.rad(TWEEN_ROT_ANGLES), 0, 0)
offsetCFrame = offsetCFrame:ToWorldSpace(rotatedCFrame)
local newCFrame = partToTween.CFrame:ToWorldSpace(offsetCFrame)
-- Buat tween dan mainkan
local tweenObject = TweenService:Create(partToTween, tweenInfo, {CFrame = newCFrame})
tweenObject:Play()
inTween = true
-- Pada tahap pembuatan tween, buat objek clickable lagi
tweenObject.Completed:Connect(function()
inTween = false
end)
end
clickDetector.MouseClick:Connect(activateAction)
Skalabilitas
Mengubah ukuran objek dalam game juga dapat menunjukkan bahwa seorang pemain berinteraksi dengan mereka. kejadian, pengambilan seperti paket kesehatan atau permata dapat menrutek saat disentuh. Untuk menyesuaikan bagian, ubah tujuan tween ke Vector3 yang diinginkan.
-- Tweed skala bagian saat disentuh, lalu hancurkan
local TweenService = game:GetService("TweenService")
local partToScale = script.Parent
local inTween = false
-- 変수 yang dapat disesuaikan
local TWEEN_TIME = 1
local TWEEN_SCALE = Vector3.zero
-- Mengubah variabel
local tweenInfo = TweenInfo.new(
TWEEN_TIME, -- Waktu
Enum.EasingStyle.Exponential, -- Gaya Meredakan
Enum.EasingDirection.Out -- Arah Mudah
)
local function onPartTouch(otherPart)
-- Jika objek tweening, hindari agar tidak tweening lagi
if inTween == true then
return
end
local partParent = otherPart.Parent
local humanoid = partParent:FindFirstChildWhichIsA("Humanoid")
if humanoid then
-- Mencegah tabrakan lebih lanjut pada objek karena telah diambil
partToScale.CanCollide = false
-- Buat tween dan mainkan
local tweenObject = TweenService:Create(partToScale, tweenInfo, {Size = TWEEN_SCALE})
tweenObject:Play()
inTween = true
-- Pada tahap selesai, hancurkan objek
tweenObject.Completed:Connect(function()
partToScale:Destroy()
end)
end
end
partToScale.Touched:Connect(onPartTouch)
Perubahan Warna
Bagian dapat beralih warna dengan menyesuaikan dengan nilai Color3. kejadian, musuh atau objek yang dapat dihancurkan dapat menunjukkan warna lampu untuk memberikan umpan balik bahwa mereka telah dihantam atau diklik.
-- Tweed warna objek setelah klik dan hancurkan setelah 3 klik
local TweenService = game:GetService("TweenService")
local partToTween = script.Parent
local clickDetector = partToTween:FindFirstChildWhichIsA("ClickDetector")
local inTween = false
-- 変수 yang dapat disesuaikan
local TWEEN_TIME = 0.2
local COLOR_ON_HIT = Color3.fromRGB(255, 0, 50)
local hitCount = 0
-- Mengubah variabel
local tweenInfo = TweenInfo.new(
TWEEN_TIME, -- Waktu
Enum.EasingStyle.Exponential, -- Gaya Meredakan
Enum.EasingDirection.InOut, -- Arah Mudah
0, -- RepeatCount (ketika kurang dari nol tween akan berulang tanpa batas)
true -- Mundur (tween akan mundur setelah mencapai tujuan)
)
local function activateAction()
-- Jika objek tweening, hindari agar tidak tweening lagi
if inTween == true then
return
end
-- Buat tween dan mainkan
local tweenObject = TweenService:Create(partToTween, tweenInfo, {Color = COLOR_ON_HIT})
tweenObject:Play()
inTween = true
-- Pada tahap pembuatan tween, buat objek clickable lagi
tweenObject.Completed:Connect(function()
inTween = false
-- Meningkatkan hit count
hitCount += 1
-- Setelah 3 hits, hancurkan objek
if hitCount == 3 then
partToTween:Destroy()
end
end)
end
clickDetector.MouseClick:Connect(activateAction)
Sementara script ini menggunakan Part yang normal untuk mengubah warna, juga mungkin untuk menggunakannya di MeshParts dengan tekstur yang diterapkan. MeshParts sering diimpor 3D model, bukan bagian yang dibangun langsung di Roblox Studio.
Jika Anda bekerja dengan MeshPart yang benar-benar bertekstur, kami menyarankan mengikuti:
Gunakan SpecialMesh alih-alih MeshPart. Ini karena tekstur MeshPart mengalahkan warna yang ditato oleh script.
Ubah script untuk mengubah Warna VertexColor dari SpesialMesh alih-alih property Warna.
Sampel Proyek
Lihat semua contoh skrip ini di tempat yang tidak dikunci ini. Dapatkan semua skrip untuk dimodifikasi juga.
Mencakup skrip untuk rotasi, skalasi, dan perubahan warna remaja. > |