$30 off During Our Annual Pro Sale. View Details »

にんにんLT2025_どりー編

Avatar for アイドル_ドリー アイドル_ドリー
December 29, 2025
1

 にんにんLT2025_どりー編

こちらの記事も併せてご覧ください
https://topaz.dev/projects/a3d4fa9ad088ffd00111

Avatar for アイドル_ドリー

アイドル_ドリー

December 29, 2025
Tweet

Transcript

  1. © ︎ Hack’z inc. 2 ハックツどりー 4XJGU ε Π ϑ

    τ גࣜձࣾϋοΫπॳ୅ՐӨ 🦈 ਫ伿ɾେ伸஄ͷज़ ͢ ͍ ͱ Μ ɹ ͩ ͍ ͜ ͏ ͩ Μ ͷ ͡ Ύ ͭ ੈքΫϩϛԽܭը ͔͍ͤ͘ΖΈ͔͚͍͔͘ ࣗݾ঺հ Introduction BORUTOੈքઢͷ ໦ͷ༿ؙͱಉ͍೥(29)Β͍͠
  2. © Hack’z inc. 3 גࣜձࣾϋοΫπͱ͸ Who we are vision ֶੜً͕͘؀ڥΛ૑Γɺ

    ࠓҎ্ʹָ͠ΊΔੈքʹ͢Δ ͦͷͨΊʹ… Πϕϯτࣄۀ ։ൃࣄۀ Hacker ㊗ 8ظ໨ 🎊
  3. Vibration  バイブレーション 🫨 όΠϒϨʔγϣϯͷىಈ im port AudioToolbox AudioServicesPlaySystemSound(kSystemSoundID_Vibrate) ެࣜͷ

    AudioToolbox Λ import Լهͷؔ਺ΛݺͿ͚ͩɻkSystemSoundID_Vibrate ͕όΠϒϨʔγϣϯͷIDʹͳ͍ͬͯΔ
  4. Vibration  バイブレーション 🫨 όΠϒϨʔγϣϯͷىಈ im port AudioToolbox AudioServicesPlaySystemSound(kSystemSoundID_Vibrate) ެࣜͷ

    AudioToolbox Λ import Լهͷؔ਺ΛݺͿ͚ͩɻkSystemSoundID_Vibrate ͕όΠϒϨʔγϣϯͷIDʹͳ͍ͬͯΔ ͪͳΈʹɾɾɾ ͜ͷؔ਺ͰγεςϜα΢ϯυ͸ͳΜͰ΋໐Β͢͜ͱ͕Ͱ͖Δɻ(ϝʔϧͷૹ৴Իͱ͔ΞϥʔϜͱ͔) ͔ͯόΠϒϨʔγϣϯͬͯԻ੠ग़ྗͩͬͨͷ͔Α
  5. Vibration  バイブレーション 🫨 όΠϒϨʔγϣϯͷىಈ im port AudioToolbox AudioServicesPlaySystemSound(kSystemSoundID_Vibrate) ެࣜͷ

    AudioToolbox Λ import Լهͷؔ਺ΛݺͿ͚ͩɻkSystemSoundID_Vibrate ͕όΠϒϨʔγϣϯͷIDʹͳ͍ͬͯΔ ͪͳΈʹɾɾɾ ͜ͷؔ਺ͰγεςϜα΢ϯυ͸ͳΜͰ΋໐Β͢͜ͱ͕Ͱ͖Δɻ(ϝʔϧͷૹ৴Իͱ͔ΞϥʔϜͱ͔) ͔ͯόΠϒϨʔγϣϯͬͯԻ੠ग़ྗͩͬͨͷ͔Α
  6. Vibration  バイブレーション 🫨 εϚϗΛৼͬͨ࣌ʹόΠϒϨʔγϣϯ private func updateMotionData(deviceMotion:CMDeviceMotion) { xStrNum

    = abs(deviceMotion.userAcceleration.x) yStrNum = abs(deviceMotion.userAcceleration.y) zStrNum = abs(deviceMotion.userAcceleration.z) let power = max(xStrNum, yStrNum, zStrNum) //ৼ͍ͬͯΔ࣌ if power > 1.0 { vibrationManager.startActiveVibration() } Ճ଎౓Λऔͬͯᮢ஋Λӽ͑ͨΒ͖ͬ͞ͷؔ਺Λݺͼग़͢
  7. BubbleEffect  泡 エフェクト 🫧 ๐ͷੜ੒ ࠨӈͷ༳ΕΛSin೾Ͱදݱ bubbles[i].x += sin(CGFloat(date.timeIntervalSince1970)

    + bubbles[i].phase) * 0.4 let dt = lastTime.map { date.timeIntervalSince($0) } ?? 0 var count = Int(abs(motionManager.spawnRate * dt)) λΠϜΠϯλʔόϧ(dt) * ࿈ଓͰৼͬͨճ਺(spawnRate) Ͱ๐ͷݸ਺Λ؅ཧ ๐ͷΞχϝʔγϣϯ for _ in 0..<count { bubbles.append( BubbleModel( x: .random(in: 0…size.width), y: size.height + CGFloat.random(in: 0...bottomBand), radius: .random(in: 10...20), speed: .random(in: 40...400), phase: .random(in: 0...(.pi * 2)) ) ) } ๐ͷαΠζɾ଎౓ɾ༳Εํ ΛϥϯμϜʹ ఆظߋ৽ͯ͠๐Λඳը TimelineView(.animation) { timeline in GeometryReader { geo in Canvas { context, _ in draw(context: context) } AIʹؙ౤͛͠·ͨ͠
  8. LiquidGlassUI Liquid Glass UI iOS26 (2025.9~) ͔Β௥Ճ͞Εͨ ·ΔͰΨϥε͕༳ΒΊ͘ͷΑ͏ͳ UI 

    Liquid Glass UI 🥂 ࣮૷΋௒؆୯ɻ.glassEffect()Λ௥Ճ͢Δ͚ͩ Button (action: { //Ϙλϯॲཧ },label: { Text("🍾γϟϯύϯλΠϜ🍾") }) .glassEffect(.clear.tint(.green.opacity(0.7)).interactive())
  9. LiquidGlassUI Liquid Glass UI iOS26 (2025.9~) ͔Β௥Ճ͞Εͨ ·ΔͰΨϥε͕༳ΒΊ͘ͷΑ͏ͳ UI 

    Liquid Glass UI 🥂 ࣗવʹ͍͍ͬͭͯ͘Δײ͡ͷUI΋GlassEffectContainer()ͰғΉ͚ͩ GlassEffectContainer(spacing: 30) { HStack() { Button (action: { //Ϙλϯॲཧ }, label: { Text(“🪇”) }) .glassEffect(.clear.interactive()) Button (action: { //Ϙλϯॲཧ }, label: { Text("✋") }) .glassEffect(.clear.interactive()) } }
  10. Setting ཚ਺ௐ੔εϥΠμ  Setting Mode ⚙ ͭ·Έ͕2ͭͷεϥΠμ͕SwiftUIʹͳ͍ɻ ͷͰࣗ࡞͠·ͨ͠ɻ struct SliderIntoItem:

    View { @Binding var valL: Int @Binding var valH: Int @Binding var widthL: CGFloat @Binding var widthH: CGFloat var body: some View { ZStack(alignment: .leading) { Rectangle() .fill(Color.orange.opacity(0.2)) .frame(height: 6) Rectangle() .fill(Color.orange) .frame(width: self.widthH - self.widthL, height: 6) .offset(x: self.widthL + 18) HStack(spacing: 0) { Circle() .fill(Color.orange) .frame(width: 18, height: 18) .offset(x: self.widthL) .gesture( DragGesture() .onChanged({(value) in if value.location.x >= 1 && value.location.x <= self.widthH { self.widthL = value.location.x self.valL = self.getValue(val: self.widthL / (totalWidth - 72)) } }) ) Circle() .fill(Color.orange) .frame(width: 18, height: 18) .offset(x: self.widthH) .gesture( DragGesture() .onChanged({(value) in if value.location.x <= totalWidth - 72 && value.location.x >= self.widthL { self.widthH = value.location.x self.valH = self.getValue(val: (self.widthH / (totalWidth - 72))) } }) ) } } .frame(width: totalWidth - 36) } func getValue(val: CGFloat) -> Int { let result = Double(val) * 100 return Int(round(result)) } }
  11. Setting ޮՌԻมߋ  Setting Mode ⚙ enum ܕͰϞσϧΛ࡞੒͢Δ͜ͱͰ؅ཧ͠΍͘͢ enum PlayerModel:

    String, CaseIterable, Identifiable { case normal case tequila case premium case secret var id: String { rawValue } var assetName: String { switch self { case .normal: return "pon" case .tequila: return "tequila" case .premium: return "pon_premium" case .secret: return "tequila_secret" } } var displayName: String { switch self { case .normal: return "ϊʔϚϧ" case .tequila: return "͍ͭ΋ͷ" case .premium: return "ϓϨϛΞϜ" case .secret: return "γʔΫϨοτ" } } }